introduzione
Questa sfida è ispirata a Grime , il mio linguaggio di corrispondenza dei motivi 2D. Fondamentalmente, ti viene data una "grammatica" che descrive griglie bidimensionali di caratteri e il tuo compito è generare una griglia secondo la grammatica. Inoltre, la griglia dovrebbe essere il più piccola possibile in un certo senso debole.
Ingresso
Il tuo input è una stringa contenente caratteri ASCII minuscoli e i simboli |e -. Per semplicità, l'input non contiene caratteri minuscoli ripetuti. La stringa è una specifica per una classe di griglie rettangolari di caratteri e viene analizzata da sinistra a destra usando una pila come segue.
- Dato un carattere minuscolo
c, spingi in pila unam×ngriglia del personaggioc, per qualsiasim, n ≥ 1. - Dato un pipe
|, fai scoppiare due griglieAeBdalla pila (Bera in cima), e spingi la grigliaABottenuta concatenandoBa destra diA. Ciò richiede questoAeBavere uguale altezza. - Dato un trattino
-, fai scoppiare due griglieAeBdalla pila (Bera in cima) e spingi la grigliaA/Bottenuta concatenandoBsul fondo diA. Ciò richiede cheAeBabbiano la stessa larghezza.
È garantito che per alcune scelte di me nfatte durante il processo di analisi (che può essere diverso per ogni lettera), la specifica di input descrive correttamente un rettangolo, che viene lasciato in pila alla fine.
Produzione
L'output è una griglia rettangolare di caratteri specificata dall'input. La griglia deve essere minima, nel senso che la rimozione di qualsiasi riga o colonna la renderebbe non valida. È possibile restituire una stringa separata da una nuova riga (con o senza una nuova riga finale), una matrice 2D di caratteri o una matrice di stringhe, a seconda di quale sia il formato più conveniente.
Si noti che non è necessario elaborare l'input esattamente come descritto sopra; l'unica cosa importante è che l'output sia corretto.
Esempio
Considera le specifiche
par-s||e-
Innanzitutto, scegliamo di premere un 1×2rettangolo di pe 1×1rettangoli di ae r(la ragione di ciò sarà chiara più avanti). Poi, abbiamo pop le ae rrettangoli, e spingere il loro concatenamento verticale
a
r
Successivamente, spingiamo un 1×2rettangolo di s, lo pop e il rettangolo sopra e spingiamo la loro concatenazione orizzontale
as
rs
Quindi pop quel rettangolo e il prettangolo e spingiamo la loro concatenazione
pas
prs
Infine, spingiamo un 3×1rettangolo di e, lo pop e il rettangolo sopra e spingiamo la concatenazione verticale
pas
prs
eee
Questo è l'output del programma, o almeno una delle possibilità. Notalo anche se
ppas
ppas
pprs
eeee
viene inoltre generato dalla specifica, non è un output valido, poiché è possibile rimuovere molte righe e colonne.
Come esempio più sottile, considera
co|m|p|il|e|r|-
Questa specifica genera il rettangolo
comp
iler
che è un output valido. Tuttavia, genera anche
commp
iiler
anche questo è valido, poiché nessuna riga o colonna può essere rimossa senza invalidarla.
Regole
Puoi dare un programma completo o una funzione. Vince il conteggio di byte più basso e non sono consentite scappatoie standard.
Casi di prova extra
Puoi usarli per testare il tuo programma.
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
ne msono scelti in modo non deterministico. È garantito che esistano valori adeguati per loro, ma è compito del tuo programma trovarli.
un|co|p-|yr|i|gh--t-ab|-|le-||-è impossibile essere validi. L'ultimo -ha un'arità di 2, mentre nello stack è presente solo 1 elemento.