Pyth es un lenguaje de golf basado en Python. Utiliza la notación de prefijo, y cada comando tiene una aridad diferente (número de argumentos que acepta).
Su tarea es escribir un verificador de sintaxis para un lenguaje similar a Pyth (inexistente), Pith.
Sintaxis de médula
Pith solo tiene 8 comandos de un solo carácter:
01234()"
01234
cada uno tiene una aridad del número correspondiente y, por lo tanto, esperan muchos argumentos después. Por ejemplo,
400010
es un programa Pith correcto porque 4
está seguido por cuatro argumentos 0
0
0
y 10
, el último de los cuales es 1
seguido por el argumento único 0
. Para visualizar esto, podemos mirar el siguiente árbol:
R
|
4
|
-------------
| | | |
0 0 0 1
|
0
donde R
está el nodo raíz Una forma alternativa de pensar sobre esto es que cada número se refiere al número de hijos que tiene el nodo correspondiente en el árbol de arriba.
Aquí hay otro programa Pith válido, con más de un comando base:
210010
correspondiente a
R
|
-------------
| |
2 1
| |
--------- 0
| |
1 0
|
0
Por otra parte,
3120102100
no es un programa Pith correcto porque la inicial 3
solo tiene dos argumentos, que podemos ver mirando el árbol a continuación:
R
|
3
|
------------------------ ??
| |
1 2
| |
2 ------
| | |
------ 1 0
| | |
0 1 0
|
0
Luego (
comienza un sin límite y )
termina un sin límite. Un ilimitado toma cualquier número de argumentos (con avidez) y cuenta como un solo argumento para cualquier comando principal. Todos los ilimitados que todavía estén abiertos al final del programa se cerrarán automáticamente. Un )
comando no es un error si no hay límites ilimitados abiertos, simplemente no hace nada. *
Por ejemplo, el programa Pith
)31(0)0(201000100
corresponde al árbol
R
|
3
|
------------------------------
| | |
1 0 (
| |
( -----------------------------
| | | | | |
0 2 0 0 1 0
| |
------- 0
| |
0 1
|
0
Los ilimitados vacíos están bien, también lo ()
es un programa Pith válido.
Un programa Pith inválido con un sin límite es
12(010
ya que el 2
único recibe un argumento (el ilimitado).
Finalmente, "
comienza y termina una cadena, que siempre es 0 aridad y cuenta como un solo argumento, por ejemplo
2"010""44)()4"
que es solo un 2
ser pasado dos argumentos de cadena "010"
y "44)()4"
. Al igual que los sin límites, las cadenas también pueden estar vacías, y cualquier cadena no cerrada al final del programa se cierra automáticamente.
* Esta parte es diferente del Pyth original, que en realidad hace algo en un caso como 1)
terminar la aridad 1 y generar un error.
De entrada y salida
La entrada será una sola cadena no vacía que consta de solo los caracteres 01234()"
. Opcionalmente, puede suponer que siempre hay una nueva línea final adicional. Puede escribir una función o un programa completo para este desafío.
Debe generar un valor verdadero si la entrada es Pith sintácticamente válida, o un valor falso de lo contrario. Los valores verdadero y falso deben ser fijos, por lo que no puede generar 1
un programa válido y2
otro.
Tanteo
Este es el código de golf, por lo que gana el código en la menor cantidad de bytes.
Casos de prueba
Verdad:
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())"))
(que debería ser cierto, creo).
()210""
con muchas operaciones no
[( [2 [0] [1 [0] ] ] [0] [1 [0]] [0] ]
? El que tienes tiene ramas de 2, 0, 0, 1 y 0; el segundo no debería estar allí.