Introducción
Este desafío está inspirado en Grime , mi lenguaje de coincidencia de patrones 2D. Básicamente, se le da una "gramática" que describe cuadrículas de caracteres bidimensionales, y su trabajo es generar una cuadrícula de acuerdo con la gramática. Además, la cuadrícula debe ser lo más pequeña posible en cierto sentido débil.
Entrada
Su entrada es una cadena que contiene caracteres ASCII en minúsculas y los símbolos |
y -
. Para simplificar, la entrada no contiene caracteres en minúsculas repetidos. La cadena es una especificación para una clase de cuadrículas rectangulares de caracteres, y se analiza de izquierda a derecha utilizando una pila de la siguiente manera.
- Dado un carácter en minúscula
c
, empuje a la pila unam×n
cuadrícula del personajec
, para cualquieram, n ≥ 1
. - Dada una tubería
|
, revienta dos cuadrículasA
yB
desde la pila (B
estaba arriba), y empuja la cuadrículaAB
obtenida concatenandoB
a la derecha deA
. Esto requiere esoA
yB
tener la misma altura. - Dado un guión
-
, haga estallar dos cuadrículasA
yB
desde la pila (B
estaba en la parte superior), y empuje la cuadrículaA/B
obtenida concatenandoB
hasta el fondo deA
. Esto requiere esoA
yB
tener el mismo ancho.
Se garantiza que para algunas elecciones m
y n
realizadas durante el proceso de análisis (que puede ser diferente para cada letra), la especificación de entrada describe correctamente algún rectángulo, que se deja en la pila al final.
Salida
Su salida es una cuadrícula rectangular de caracteres especificados por la entrada. La cuadrícula debe ser mínima en el sentido de que eliminar cualquier fila o columna la invalidaría. Puede devolver una cadena separada por una nueva línea (con o sin una nueva línea final), una matriz 2D de caracteres o una matriz de cadenas, según el formato más conveniente.
Tenga en cuenta que no es necesario que procese la entrada exactamente como se describe anteriormente; Lo único importante es que su salida es correcta.
Ejemplo
Considere la especificación
par-s||e-
Primero, elegimos empujar un 1×2
rectángulo de p
y 1×1
rectángulos de a
y r
(la razón de esto se aclarará más adelante). Entonces, nos pop las a
y los r
rectángulos, y empujar a sus concatenación verticales
a
r
Luego, empujamos un 1×2
rectángulo de s
, lo sacamos y el rectángulo de arriba, y empujamos su concatenación horizontal
as
rs
Luego hacemos estallar ese rectángulo y el p
rectángulo, y empujamos su concatenación
pas
prs
Finalmente, empujamos un 3×1
rectángulo de e
, lo sacamos y el rectángulo de arriba, y empujamos la concatenación vertical
pas
prs
eee
Esta es la salida del programa, o al menos una de las posibilidades. Tenga en cuenta que aunque
ppas
ppas
pprs
eeee
también es generado por la especificación, no es una salida válida, ya que muchas de las filas y columnas podrían eliminarse.
Como un ejemplo más sutil, considere
co|m|p|il|e|r|-
Esta especificación genera el rectángulo
comp
iler
que es una salida válida Sin embargo, también genera
commp
iiler
que también es válido, ya que no se puede eliminar una sola fila o columna sin invalidarlo.
Reglas
Puedes dar un programa completo o una función. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten.
Casos de prueba extra
Puede usarlos para probar su programa.
Input:
a
Output:
a
Input:
co|mp|l|-ex|i|f|-y|
Example output:
cccoy
mplly
exify
Input:
ja-r|g-o|ni-|ze|d-|
Example output:
jronze
arondd
ggoidd
Input:
un|co|p-yr|i|gh-t-ab|-|le-||-
Example output:
unnnnnnn
coyriggl
ppyrihhe
ppyritte
ppyriabe
n
y m
se eligen de forma no determinista. Se garantiza que existen valores adecuados para ellos, pero es el trabajo de su programa encontrarlos.
un|co|p-|yr|i|gh--t-ab|-|le-||-
Es imposible ser válido. El último -
tiene una aridad de 2, mientras que solo hay 1 elemento en la pila.