Pyth è un linguaggio da golf basato su Python. Usa la notazione con prefisso, con ogni comando con un'arità diversa (numero di argomenti che accetta).
Il tuo compito è scrivere un correttore di sintassi per un linguaggio (inesistente) simile a Pyth, Pith.
Sintassi di Pith
Pith ha solo 8 comandi a carattere singolo:
01234()"
01234
ognuno ha arità del numero corrispondente e quindi si aspetta che molti argomenti dopo di esso. Per esempio,
400010
è un programma Pith corretto perché 4
è seguito da quattro argomenti 0
0
0
e 10
, l'ultimo dei quali è 1
seguito dal singolo argomento 0
. Per visualizzare questo, possiamo guardare il seguente albero:
R
|
4
|
-------------
| | | |
0 0 0 1
|
0
dov'è R
il nodo principale. Un modo alternativo di pensare a questo è che ogni numero si riferisce al numero di figli che il nodo corrispondente ha nella struttura in alto.
Ecco un altro programma Pith valido, con più di un comando di base:
210010
corrisponde a
R
|
-------------
| |
2 1
| |
--------- 0
| |
1 0
|
0
D'altro canto,
3120102100
non è un programma Pith corretto perché l'iniziale 3
ha solo due argomenti, che possiamo vedere guardando l'albero sotto:
R
|
3
|
------------------------ ??
| |
1 2
| |
2 ------
| | |
------ 1 0
| | |
0 1 0
|
0
Successivamente (
inizia un illimitato e )
termina un illimitato. Un illimitato accetta qualsiasi numero di argomenti (avidamente) e conta come singolo argomento per qualsiasi comando genitore. Eventuali limiti non ancora aperti entro la fine del programma vengono automaticamente chiusi. Un )
comando non è un errore se non sono aperti limiti illimitati, ma non fa nulla. *
Ad esempio, il programma Pith
)31(0)0(201000100
corrisponde all'albero
R
|
3
|
------------------------------
| | |
1 0 (
| |
( -----------------------------
| | | | | |
0 2 0 0 1 0
| |
------- 0
| |
0 1
|
0
I vuoti illimitati vanno bene, quindi ()
è un programma Pith valido.
Un programma Pith non valido con un illimitato è
12(010
poiché l' 2
unico riceve un argomento (il illimitato).
Infine, "
inizia e termina una stringa, che è sempre 0 arity e conta come un singolo argomento, ad es
2"010""44)()4"
che è solo un 2
essere passato due argomenti stringa "010"
e "44)()4"
. Analogamente a quanto non limitato, anche le stringhe possono essere vuote e tutte le stringhe non chiuse entro la fine del programma vengono automaticamente chiuse.
* Questa parte è diversa dal Pyth originale che in realtà fa qualcosa in un caso come 1)
, terminando l'1-arity e generando un errore.
Input Output
L'input sarà una singola stringa non vuota composta solo da caratteri 01234()"
. È possibile presumere facoltativamente che sia sempre presente una nuova riga finale aggiuntiva. È possibile scrivere una funzione o un programma completo per questa sfida.
Dovresti generare un valore di verità se l'input è Pith sintatticamente valido, o altrimenti un valore di falsa. I valori di verità e falsità devono essere fissi, quindi non è possibile eseguire l'output 1
per un programma valido e 2
per un altro.
punteggio
Questo è code-golf, quindi vince il codice nel minor numero di byte.
Casi test
Truthy:
0
)
(
"
()
""
10
400010
210010
("")00
3"""""
(0)))0)1)0
2(2(2(0)0)0)0
2"010""44)()4"
)31(0)0(201000100
())2)1))0"3())"))
3("4321("301(0)21100"4")"123"00)40"121"31000""01010
Falsy:
1
1(310
(1)0)
12(010
4"00010"
3120102100
20(2((0)(0)))
2(2(2(0)0)0)01)
4(0102)00)00000
2"00"("00"2(""))
())2)1))0"3())"))
(che dovrebbe essere vero, penso).
()210""
con un sacco di no-ops)
[( [2 [0] [1 [0] ] ] [0] [1 [0]] [0] ]
? Quello che hai ha rami di 2, 0, 0, 1 e 0 - il secondo non dovrebbe essere lì.