задача
Ваша задача - написать программу, которая будет выводить блоки ASCII в местах, указанных входными данными.
вход
Вам будет предоставлен список номеров. Формат здесь немного гибкий, в том , что вы можете использовать любой deliminator вы хотите (например 1,2,3,4
, 1 2 3 4
, [1,2,3,4]
). Список состоит из 4 групп и определяет xywh
каждый из полей. Ширина и высота каждой ячейки будет не менее 2 x
и width
слева направо. y
и height
сверху вниз.
Выход
Рендеринг можно рассматривать как справа налево, с прямоугольником справа, нарисованным первым, и после каждого прямоугольника над ним. Допускаются завершающие пробелы, а также один завершающий перевод строки.
Как обрабатывать перекрывающиеся коробки
Поле слева от ввода является верхним, и ничто не будет перекрывать его. Каждый блок после него отображается только в пространстве, которое уже не содержится в блоке и не заменит границы уже визуализированного блока.
Стиль
Стиль ящиков довольно стандартный, +
используется для углов, -
для горизонтальных линий и |
для вертикальных линий.
Примеры:
( >>>
обозначает ввод)
>>>0 0 11 4 7 2 8 4 3 5 8 3
+---------+
| |
| |---+
+---------+ |
| |
+---+------+
| |
+------+
>>>0 3 11 4 7 5 8 4 3 8 8 3 4 0 13 5
+-----------+
| |
| |
+---------+ |
| |-----+
| |---+
+---------+ |
| |
+---+------+
| |
+------+
>>>0 0 2 2
++
++
>>>2 2 5 3 1 1 7 5 0 0 9 7
+-------+
|+-----+|
||+---+||
||| |||
||+---+||
|+-----+|
+-------+
>>>0 0 3 3 2 0 3 3
+-+-+
| | |
+-+-+
4 0 13 5
чем0 4 13 5
?Ответы:
APL, 116 байт
Это функция, которая принимает массив массивов и возвращает матрицу символов.
тесты:
Объяснение:
⎕IO←0
: установите начало индекса в0
.⌈⌿↑⍵
: найти самые большие значения для x, y, w и h+⌿2 2⍴
: x + w и y + hK←' '⍴⍨⌽
: сделать матрицу из x + w * y + h пробелов и сохранить ее вK
.{
...}¨⌽⍵
: для каждого из ящиков в обратном порядке,x y W H←⍵-⌊.5×⍳4
: Назначить координаты наx
,y
,W
, иH
, и вычесть 1 из обоегоW
иH
. (координаты являются исключительными, диапазоны массива APL включительно.)K[Y←y+⍳H;X←x+⍳W]←' '
: заполните текущее поле пробеламиK[Y;A←x+0 W]←'|'
: нарисовать вертикальные стороныK[B←y+0 H;X]←'-'
: нарисовать горизонтальные стороныK[B;A]←'+'
: установите края в '+'K⊣
: потом вернитесьK
.источник
ES6,
228223217208 201198 байтовПринимает массив массивов координат и возвращает строку.
Где
\n
представляет символ новой строки.Изменить: 5 байтов, изменив мои условия. Сохранение дополнительных 6 байтов путем переключения с массива массивов символов на массив строк. Сохранено еще 9 байтов, введя временную переменную. Сохранено еще 7 байтов, введя вспомогательную функцию. Сохранены еще 3 байта, отменив предыдущее сохранение!
источник
Рубин,
153143Неуправляемый в тестовой программе
источник
SmileBASIC,
128125 байтСкриншоты (обрезано)
объяснение
M
хранит ли он в первой / последней строке поля (0
=+--+
,1
=| |
). На первом проходе через циклM
- 0, а на всех остальных до последнего - 1.источник
Pyth,
162145 байтовВы можете попробовать это здесь
Вывод набора тестов:
Ужасное решение! Просто жду, когда кто-то победит
источник