Pyramid Scheme è un linguaggio sviluppato da @ ConorO'Brien . In Pyramid Scheme, il codice che scrivi è simile al seguente:
^ ^
/ \ /3\
/ \ ---
/ + \
^-------^
/9\ /3\
/123\ ---
-----
Ora, quel codice ha due ovvie qualità: è difficile da analizzare ed è difficile da scrivere. Conor ha risolto il primo, tuttavia sarà tuo compito risolvere il secondo problema.
Il codice precedente viene elaborato dall'interprete PyramidScheme in una matrice di stringhe nidificate, in questo modo:
[["+", ["9123", "3"]], "3"]
Il tuo compito è scrivere un programma o una funzione che fornisca una matrice nidificata di stringhe, produca o restituisca il codice PyramidScheme ricreato. Si può presumere che l'array di input sia sempre valido.
Una piramide è un triangolo isoscele. La parte superiore è ^
, i lati si inclinano diagonalmente con /
e \
, e la parte inferiore è -
. I due angoli inferiori sono vuoti o contengono l'inizio di altre piramidi, che sono argomenti. Il centro è pieno del nome della piramide, ignorando le interruzioni di riga.
Ecco come il parser converte il codice in un formato utilizzabile. Innanzitutto, cerca una piramide di livello superiore. Se non accetta argomenti, lo rappresenta con una singola stringa e va avanti. Altrimenti, rappresenta è come un array ["name",[arg1,arg2]]
o ["name",[arg1]]
. Gli argomenti sono le piramidi in basso a sinistra e in basso a destra della piramide, che possono essere stringhe o più matrici descritte come sopra. Potresti notare che in qualche modo assomiglia a Lisp, nel qual caso potresti anche aver notato il terribile gioco di parole che è il nome della lingua. Dopo che la piramide è stata completamente rappresentata, il parser passa a quello successivo.
Questo è code-golf , vince il codice più corto!
Casi di test: questi non sono gli unici output validi, questi sono esempi di output validi.
[["+", ["9123", "3"]], "3"]
^ ^
/ \ /3\
/ \ ---
/ + \
^-------^
/9\ /3\
/123\ ---
-----
[["out", [["chr", ["72"]], ["chr", ["101"]]]], ["out", [["chr", ["108"]]]], ["out", [["chr", ["108"]]]], ["out", [["chr", ["111"]]]]]
^ ^ ^ ^
/ \ / \ / \ / \
/out\ /out\ /out\ /out\
^-----^ -----^----- -----^
/ \ / \ / \ / \
/chr\ /chr\ /chr\ /chr\
^----- -----^ -----^ ^-----
/ \ / \ / \ / \
/72 \ /101\ /108\ /111\
----- ----- ----- -----
[ ["+", [ ["asdfghjkl"], ["do", [ "1" ]] ]] ]
^
/ \
/ + \
/ \
^-------^
/a\ /d\
/sdf\ /o \
/ghjkl\ ^-----
-------/1\
---
Nel secondo caso di test, la seconda e la terza out
piramide hanno entrambe ["chr", ["108"]]
un parametro as, che viene compresso in una pila di piramide condivisa da due di livello superiore. Questa è un'ottimizzazione valida che il tuo codice può supportare, ma è completamente opzionale; il punteggio non si basa sulla lunghezza dell'output.
Per i curiosi, il primo caso viene visualizzato a 9126 3
causa della stampa implicita di piramidi di livello superiore, il secondo viene stampato Hello
e l'ultimo è un errore di sintassi, incluso solo perché ha una struttura ordinata.
Si può supporre che l'ingresso contiene solo ASCII stampabile, esclusi gli spazi, ^
, /
, \
, e -
. L'input sarà sempre valido e conterrà almeno una piramide. Non vi è alcun limite alla dimensione dell'array o delle stringhe di input, tuttavia è possibile scrivere il codice come se il tipo intero predefinito della lingua fosse una precisione infinita e che il computer disponga di memoria arbitraria. Se si accetta l'input come singola stringa, è possibile utilizzare qualsiasi cosa ragionevole (virgola, spazio, ecc. Purché sia in ASCII stampabile e non "
o []
) per delimitare gli array. Non è necessario includere parentesi che circondano l'intera cosa e prendere invece più array separati dal delimitatore.
La tua uscita non deve essere giocata a golf, puoi inserire spazio extra o ingrandire le piramidi del necessario. Le piramidi di Toplevel dovrebbero essere in prima linea. L'output dovrebbe essere una stringa con newline o un elenco di stringhe.
Chiunque fa includere una versione del loro codice che golfs in modo ottimale le piramidi possono ricevere qualche rappresentante in forma di upvotes / premi (ma probabilmente solo upvotes).