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×ncuadrícula del personajec, para cualquieram, n ≥ 1. - Dada una tubería
|, revienta dos cuadrículasAyBdesde la pila (Bestaba arriba), y empuja la cuadrículaABobtenida concatenandoBa la derecha deA. Esto requiere esoAyBtener la misma altura. - Dado un guión
-, haga estallar dos cuadrículasAyBdesde la pila (Bestaba en la parte superior), y empuje la cuadrículaA/Bobtenida concatenandoBhasta el fondo deA. Esto requiere esoAyBtener el mismo ancho.
Se garantiza que para algunas elecciones my nrealizadas 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×2rectángulo de py 1×1rectángulos de ay r(la razón de esto se aclarará más adelante). Entonces, nos pop las ay los rrectángulos, y empujar a sus concatenación verticales
a
r
Luego, empujamos un 1×2rectá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 prectángulo, y empujamos su concatenación
pas
prs
Finalmente, empujamos un 3×1rectá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
ny mse 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.