W tym wyzwaniu renderujemy interfejsy użytkownika Ascii.
+----------------------+
|+-----------++-------+|
||<- Previous||Next ->||
|+-----------++-------+|
|== The title == |
| |
|Lorem ipsum dolor |
|sit amet... |
|+--------------+ |
||Post a comment| |
|+--------------+ |
|+-----------------+ |
||User X commented:| |
|| | |
||This is amazing! | |
|+-----------------+ |
|+-----------------+ |
||User Y commented:| |
|| | |
||lol | |
|+-----------------+ |
+----------------------+
Każdy taki rysunek składa się z jednego elementu , który może zawierać podelementy. Możliwe elementy są wymienione poniżej:
- Element tekstowy. Zawiera jeden lub więcej wierszy tekstu.
- Element pudełkowy. Zawiera jeden podelement otoczony granicami. Granice mają
+s na rogach i-s oraz|na krawędziach. - Lista pozioma. Zawiera jeden lub więcej elementów, które są wyrównane w poziomie.
- Lista pionowa. Zawiera jeden lub więcej elementów, które są wyrównane względem siebie w pionie i do lewej w poziomie.
Każdy element jest prostokątem.
Każdy element, oprócz swojej zawartości, ma właściwość o nazwie linia bazowa . Linia bazowa służy do wyrównywania elementów w pionie: każdy element listy poziomej jest wyrównany w taki sposób, że ich linie bazowe znajdują się w tej samej linii. W poniższym przykładzie linia bazowa zawiera znaki aeg. Linie podstawowe trzech elementów skrzynkowych są (0-indeksowane) 1, 3i 2.
+-+
|c|+-+
+-+|d||f|
|a||e||g|
|b|+-+|h|
+-+ +-+
Wartości bazowe są ustalane według następujących zasad:
- W przypadku elementów tekstowych pierwszy wiersz tekstu jest linią bazową, tj.
0. - W przypadku elementów pudełkowych linia bazowa wynosi 1 + linia bazowa podelementu.
- W przypadku list poziomych linia bazowa jest maksymalną linią bazową na liście (
3w powyższym przykładzie). - W przypadku list pionowych linia bazowa jest linią bazową elementu, którą należy określić na wejściu.
Wejście
Dane wejściowe to specyfikacja interfejsu w pewnym formacie (np. Listy, json). Przykładowe dane wejściowe mają następujący format:
- Element ciąg jest ciągiem:
"..." - Element box to lista, której pierwszym elementem jest
"b":["b", subelement] - Lista pozioma to lista, której pierwszym elementem jest
"h":["h", items...] - Lista pionowa jest listą, której jest pierwszy element,
"v"a drugim elementem jest (indeksowany 0) numer elementu, którego podstawa jest używana:["v", n, items...]
Wynik
Dane wyjściowe muszą zawierać elementy wyrównane przy użyciu reguł określonych powyżej. Wyjściem może być standardowe wyjście, lista ciągów znaków lub cokolwiek innego znaczącego.
Punktacja
To jest golf golfowy , obowiązują zwykłe zasady.
Przypadki testowe
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
aw tej samej linii co e, ponieważ oba znajdują się na linii podstawowej swoich pól. Nie jestem do końca pewien, czy „baseline” jest właściwym słowem do tego, wiem tylko, że jest ono używane w dziedzinie typografii do podobnego celu.