En este desafío, representamos las interfaces de usuario Ascii.
+----------------------+
|+-----------++-------+|
||<- Previous||Next ->||
|+-----------++-------+|
|== The title == |
| |
|Lorem ipsum dolor |
|sit amet... |
|+--------------+ |
||Post a comment| |
|+--------------+ |
|+-----------------+ |
||User X commented:| |
|| | |
||This is amazing! | |
|+-----------------+ |
|+-----------------+ |
||User Y commented:| |
|| | |
||lol | |
|+-----------------+ |
+----------------------+
Cada dibujo como este está hecho de un elemento , que puede contener subelementos. Los posibles elementos se enumeran a continuación:
- Elemento de texto Contiene una o más líneas de texto.
- Elemento de caja Contiene un subelemento rodeado de bordes. Los bordes tienen
+
s en las esquinas-
ys y|
en los bordes. - Lista horizontal Contiene uno o más elementos que están alineados horizontalmente.
- Lista vertical Contiene uno o más elementos que están alineados unos sobre otros verticalmente y hacia la izquierda horizontalmente.
Cada elemento es un rectángulo.
Cada elemento, además de su contenido, tiene una propiedad llamada línea base . La línea de base se usa para alinear los elementos verticalmente: cada elemento de una lista horizontal está alineado de modo que sus líneas de base estén en la misma línea. En el ejemplo a continuación, la línea base contiene caracteres aeg
. Las líneas de base de los tres elementos de caja son (0-indexada) 1
, 3
y 2
.
+-+
|c|+-+
+-+|d||f|
|a||e||g|
|b|+-+|h|
+-+ +-+
Las líneas de base se determinan con las siguientes reglas:
- Para elementos de texto, la primera línea de texto es la línea de base, es decir.
0
. - Para elementos de cuadro, la línea base es 1 + la línea base del subelemento.
- Para listas horizontales, la línea base es la línea base máxima en la lista (
3
en el ejemplo anterior). - Para las listas verticales, la línea base es la línea base de un elemento, que debe especificarse en la entrada.
Entrada
La entrada es una especificación de una interfaz en algún formato (por ejemplo, listas, json). Las entradas de ejemplo tienen el siguiente formato:
- Un elemento de cadena es una cadena:
"..."
- Un elemento de cuadro es una lista cuyo primer elemento es
"b"
:["b", subelement]
- Una lista horizontal es una lista cuyo primer elemento es
"h"
:["h", items...]
- Una lista vertical es una lista que es el primer elemento
"v"
y el segundo elemento es el número (indexado a 0) del elemento que se utiliza esa línea base:["v", n, items...]
Salida
La salida debe contener los elementos alineados usando las reglas que especifiqué anteriormente. La salida puede ser estándar, una lista de cadenas o cualquier otra cosa significativa.
Puntuación
Este es el código de golf , se aplican las reglas habituales.
Casos de prueba
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 4
["h", "a * b = ", ["v", 0, "a + a + ... + a", "\\_____________/", " b times"]]
a * b = a + a + ... + a
\_____________/
b times
a
esté en la misma línea e
, ya que ambos están en la línea de base de sus cuadros. No estoy completamente seguro de si "línea de base" es la palabra correcta para esto, solo sé que se usa en el campo de la tipografía para un propósito similar.