У цьому виклику ми надаємо користувальницькі інтерфейси Ascii.
+----------------------+
|+-----------++-------+|
||<- Previous||Next ->||
|+-----------++-------+|
|== The title == |
| |
|Lorem ipsum dolor |
|sit amet... |
|+--------------+ |
||Post a comment| |
|+--------------+ |
|+-----------------+ |
||User X commented:| |
|| | |
||This is amazing! | |
|+-----------------+ |
|+-----------------+ |
||User Y commented:| |
|| | |
||lol | |
|+-----------------+ |
+----------------------+
Кожен малюнок, подібний цьому, складається з одного елемента , який може містити підрядки. Нижче перелічені можливі елементи:
- Текстовий елемент. Містить один або кілька рядків тексту.
- Елемент коробки Містить один підметок, оточений кордонами. Кордони мають
+
s на кутах,-
s та|
на краях. - Горизонтальний список. Містить один або кілька елементів, які вирівняні горизонтально.
- Вертикальний список. Містить один або кілька елементів, які розташовані одна над одною вертикально і ліворуч по горизонталі.
Кожен елемент - це прямокутник.
Кожен елемент, крім свого вмісту, має властивість, яку називають базовою лінією . Базова лінія використовується для вирівнювання елементів по вертикалі: кожен елемент горизонтального списку вирівнюється таким чином, щоб їх основні лінії знаходилися на одній лінії. У наведеному нижче прикладі базова лінія містить символи aeg
. Вихідні лінії три коробчатих елементів (0-індексовані) 1
, 3
і 2
.
+-+
|c|+-+
+-+|d||f|
|a||e||g|
|b|+-+|h|
+-+ +-+
Визначаються базові лінії за такими правилами:
- Для текстових елементів перший рядок тексту є базовим, тобто.
0
. - Для елементів коробки базова лінія дорівнює 1 + базовій лінії підрядки.
- Для горизонтальних списків базовою лінією є максимальна базова лінія у списку (
3
у прикладі вище). - Для вертикальних списків базовою лінією є базовий рядок елемента, який повинен бути вказаний у вході.
Вхідні дані
Вхід - це специфікація інтерфейсу в якомусь форматі (наприклад, списки, json). Приклади входів мають такий формат:
- Елемент рядка - це рядок:
"..."
- Елемент поля - це список, першим елементом якого є
"b"
:["b", subelement]
- Горизонтальний список - це список, першим елементом якого є
"h"
:["h", items...]
- Вертикальний список - це перелік, який є першим елементом,
"v"
а другий - номер (0-індексований) номером базового рівня елемента:["v", n, items...]
Вихід
Вихід повинен містити елементи, вирівняні за допомогою правил, зазначених вище. Вихід може бути stdout, список рядків або будь-що інше, що має значення.
Оцінка балів
Це код-гольф , діють звичайні правила.
Тестові справи
1
["b", ["v", 0, ["h", ["b", "<- Previous"], ["b", "Next ->"]], "== The title ==\n\nLorem ipsum dolor\nsit amet...", ["b", "Post a comment"], ["b", "User X commented:\n\nThis is amazing!"], ["b", "User Y commented:\n\nlol"]]]
+----------------------+
|+-----------++-------+|
||<- Previous||Next ->||
|+-----------++-------+|
|== The title == |
| |
|Lorem ipsum dolor |
|sit amet... |
|+--------------+ |
||Post a comment| |
|+--------------+ |
|+-----------------+ |
||User X commented:| |
|| | |
||This is amazing! | |
|+-----------------+ |
|+-----------------+ |
||User Y commented:| |
|| | |
||lol | |
|+-----------------+ |
+----------------------+
2
["h", ["b", ["v", 0, "a", "b"]], ["b", ["v", 2, "c", "d", "e"]], ["b", ["v", 1, "f", "g", "h"]]]
+-+
|c|+-+
+-+|d||f|
|a||e||g|
|b|+-+|h|
+-+ +-+
3
["h", ["b", ["v", 0, ["b", ["h", "a\nb", "c"]], "d", "e", ["h", ["h", "f"], ["b", ["h", "g"]], "h"]]], ["b", "ijk\nl\nmn\no"], ["v", 2, ["b", "pqrst"], ["b", "uv\nw"], ["b", "x"]], ["b", ["b", ["b", "yz"]]]]
+-----+
|pqrst|
+-----+
+--+
|uv|
|w | +------+
+-----+ +--+ |+----+|
|+--+ |+---++-+ ||+--+||
||ac| ||ijk||x| |||yz|||
||b | ||l |+-+ ||+--+||
|+--+ ||mn | |+----+|
|d ||o | +------+
|e |+---+
| +-+ |
|f|g|h|
| +-+ |
+-----+
4
["h", "a * b = ", ["v", 0, "a + a + ... + a", "\\_____________/", " b times"]]
a * b = a + a + ... + a
\_____________/
b times
a
знаходиться в тому ж рядку e
, що і обидва в базовій лінії своїх коробок. Я не зовсім впевнений, чи правильне слово для цього "базовий рівень", я знаю лише, що воно використовується в галузі друкарства з подібною метою.