Возьмите два списка неотрицательных целых чисел и выведите ASCII-блок, как определено ниже.
- Углы и пересечения это плюсы:
+
(ASCII-код 43) - Вертикальные линии - это столбики
|
(ASCII-код 124) - Горизонтальные линии являются минусами
-
(ASCII-код 45)
Первый список ввода указывает количество минусов между каждым знаком плюс в горизонтальном направлении.
Второй список ввода указывает количество столбцов между каждым знаком плюс в вертикальном направлении.
Это проще объяснить несколькими примерами:
0 // No minuses between each + sign
0 // No bars between + signs
++
++
------------------
1 2 // First a single minus, then two minuses
1 2 // First one bar, then two bars
+-+--+
| | |
+-+--+
| | |
| | |
+-+--+
------------------
1 0 3 0 2 0
2 1 0 0
+-++---++--++
| || || ||
| || || ||
+-++---++--++
| || || ||
+-++---++--++
+-++---++--++
+-++---++--++
Разъяснения:
- Порядок и формат ввода не являются обязательными
- Должны быть напечатаны / отображены только поля, но допускается завершающий пробел или переводы строки.
- Вы можете дополнительно добавить 1 ко всем входным значениям, если это более удобно. Второй пример бы тогда:
2 3; 2 3
.
Это код гольф, поэтому выигрывает самый короткий код в байтах.
Ответы:
MATL ,
252221 байтИспользует входы с
1
добавлением (разрешено вызовом).Попробуйте онлайн!
объяснение
Код первоначально создает массив, содержащий
1
для индексов столбцов непробельные символы в конечном результате, и в0
противном случае. Таким образом, если первый вход[2 1 4 1 3 1]
(будет[1 0 3 0 2 0]
в формате на основе 0), этот массив будетОбратите внимание, как длина серий нулей связана с вводом. В частности, этот массив построен следующим образом:
1
.1
. В примере это дает[3 4 8 9 12 13]
.1
записи с индексами (на основе 1), заданными на шаге 2. Промежуточные записи автоматически устанавливаются на0
.Подобный массив построен для строк. Второй вход
[3 2 1 1]
(или[2 1 0 0 ]
) даетТеперь второй массив умножается на
2
, транспонируется и добавляется с передачей в первый. Это дает 2D массивИндексирование в строку
'|-+ '
дает конечный результат в виде двумерного массива символов. Поскольку индексирование является модульным и основано на 1, индекс0
соответствует последнему элементу (пробелу).источник
Python 2, 117 байт
Попробуйте это на Ideone.
Не ожидая слишком многого от этого. Действительно просто, просто использует Python соединения и умножение строк, чтобы собрать все воедино.
источник
JavaScript (ES6), 83 байта
Вывод включает в себя две завершающие строки.
источник
CJam, 50 байт
Попробуйте онлайн!
источник
Pyth, 45 байт
Программа, которая принимает ввод двух разделенных запятыми списков в STDIN и печатает результат.
Здесь, вероятно, еще предстоит сыграть в гольф.
Попробуйте онлайн
Объяснение позже
источник
Haskell, 55 байтов
Определяет функцию,
g
которая принимает два списка ввода и возвращает список, содержащий строки выводаисточник
PowerShell v2 +, 89 байт
Черт, не думаю, что я вполне могу поймать JavaScript.
Принимает входные данные
$a
и в$b
качестве явных массивов. Устанавливает переменную$x
как верхний ряд блоков на основе циклического прохождения$a
и некоторой конкатенации строк. Это заключено в скобки, поэтому оно помещается на конвейер. Затем мы$b
выполняем цикл , каждая итерация помещает в конвейер две строки - одну и ту же строку стиля, но с пробелами, а|
не с дефисами и+
, и$x
. Все эти строки собираются из конвейера с неявнымWrite-Output
завершением программы, с новой строкой по умолчанию между ними.Примеры
источник
Рубин, 66 байт
источник
Желе ,
3026 байтПроверьте это в TryItOnline
Как?
Взятые входные данные являются списком из двух списков
[vertical, horizontal]
и используют опцию приращения- таким образом, пример 3 берет
[[3,2,1,1], [2,1,4,1,3,1]]
Каждый из них затем преобразуется в логический массив, указывающий соответственно rowType или rowCharacterType, например.
[[1,0,0,1,0,1,1,1], [1,0,1,1,0,0,0,1,1,0,0,1,1]]
Затем блоки создаются путем создания строк из символы, идентифицированные комбинациями rowType и rowCharacterType - то есть rowType идентифицирует либо
"+-"
или,"| "
либо rowCharacterType идентифицирует один из этих двух символов.источник