In questa sfida, eseguiamo il rendering delle interfacce utente Ascii.
+----------------------+
|+-----------++-------+|
||<- Previous||Next ->||
|+-----------++-------+|
|== The title == |
| |
|Lorem ipsum dolor |
|sit amet... |
|+--------------+ |
||Post a comment| |
|+--------------+ |
|+-----------------+ |
||User X commented:| |
|| | |
||This is amazing! | |
|+-----------------+ |
|+-----------------+ |
||User Y commented:| |
|| | |
||lol | |
|+-----------------+ |
+----------------------+
Ogni disegno come questo è composto da un elemento , che può contenere sottoelementi. I possibili elementi sono elencati di seguito:
- Elemento di testo. Contiene una o più righe di testo.
- Elemento scatola. Contiene un sottoelemento circondato da bordi. I bordi hanno
+s agli angoli e-s e|ai bordi. - Elenco orizzontale Contiene uno o più elementi allineati orizzontalmente.
- Elenco verticale Contiene uno o più elementi allineati uno sull'altro in verticale e a sinistra in orizzontale.
Ogni elemento è un rettangolo.
Ogni elemento, oltre al suo contenuto, ha una proprietà chiamata baseline . La linea di base viene utilizzata per allineare gli elementi verticalmente: ogni elemento di un elenco orizzontale è allineato in modo tale che le loro linee di base siano sulla stessa linea. Nell'esempio seguente, la linea di base contiene caratteri aeg. Le linee di base dei tre elementi scatolari sono (0-indicizzato) 1, 3e 2.
+-+
|c|+-+
+-+|d||f|
|a||e||g|
|b|+-+|h|
+-+ +-+
Le linee di base sono determinate con le seguenti regole:
- Per gli elementi di testo, la prima riga di testo è la linea di base, vale a dire.
0. - Per gli elementi box, la linea di base è 1 + la linea di base del sottoelemento.
- Per gli elenchi orizzontali, la linea di base è la linea di base massima nell'elenco (
3nell'esempio sopra). - Per gli elenchi verticali, la linea di base è la linea di base di un elemento, che deve essere specificato nell'input.
Ingresso
L'input è una specifica di un'interfaccia in qualche formato (es. Liste, json). Gli input di esempio hanno il seguente formato:
- Un elemento stringa è una stringa:
"..." - Un elemento box è un elenco il cui primo elemento è
"b":["b", subelement] - Un elenco orizzontale è un elenco il cui primo elemento è
"h":["h", items...] - Un elenco verticale è un elenco che è il primo elemento
"v"e il secondo elemento è il numero (indicizzato 0) dell'elemento che viene utilizzato come linea di base:["v", n, items...]
Produzione
L'output deve contenere gli elementi allineati utilizzando le regole specificate sopra. L'output può essere stdout, un elenco di stringhe o qualsiasi altra cosa significativa.
punteggio
Questo è code-golf , si applicano le solite regole.
Casi test
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
asi trovi sulla stessa riga di e, poiché sono entrambi alla base delle rispettive caselle. Non sono del tutto sicuro che "baseline" sia la parola corretta per questo, so solo che è usato nel campo della tipografia per uno scopo simile.