Pyth est un langage de golf basé sur Python. Il utilise la notation de préfixe, chaque commande ayant une arité différente (nombre d'arguments qu'elle accepte).
Votre tâche consiste à écrire un vérificateur de syntaxe pour un langage de type Pyth (inexistant), Pith.
Syntaxe de Pith
Pith n'a que 8 commandes à caractère unique:
01234()"
01234
chacun a une arité du nombre correspondant, et donc s'attend à ce que de nombreux arguments après. Par exemple,
400010
est un programme Pith correct car il 4
est suivi de quatre arguments 0
0
0
et 10
le dernier est 1
suivi d'un seul argument 0
. Pour visualiser cela, nous pouvons regarder l'arborescence suivante:
R
|
4
|
-------------
| | | |
0 0 0 1
|
0
où R
est le nœud racine. Une autre façon de penser à cela est que chaque nombre fait référence au nombre d'enfants que le nœud correspondant a dans l'arbre ci-dessus.
Voici un autre programme Pith valide, avec plus d'une commande de base:
210010
correspond à
R
|
-------------
| |
2 1
| |
--------- 0
| |
1 0
|
0
D'autre part,
3120102100
n'est pas un programme Pith correct car l'initiale 3
n'a que deux arguments, que nous pouvons voir en regardant l'arbre ci-dessous:
R
|
3
|
------------------------ ??
| |
1 2
| |
2 ------
| | |
------ 1 0
| | |
0 1 0
|
0
(
Commence ensuite une illimitée, et)
se termine un illimité. Un illimité prend n'importe quel nombre d'arguments (avec avidité) et compte comme un seul argument pour toute commande parent. Toutes les bornes non encore ouvertes à la fin du programme sont automatiquement fermées. Une )
commande n'est pas une erreur si aucune limite n'est ouverte - elle ne fait rien. *
Par exemple, le programme Pith
)31(0)0(201000100
correspond à l'arbre
R
|
3
|
------------------------------
| | |
1 0 (
| |
( -----------------------------
| | | | | |
0 2 0 0 1 0
| |
------- 0
| |
0 1
|
0
Les limites non vides sont correctes, tout ()
comme un programme Pith valide.
Un programme Pith non valide avec un illimité est
12(010
puisque le 2
seul reçoit un argument (le sans limite).
Enfin, "
démarre et termine une chaîne, qui est toujours de 0 arité et compte comme un seul argument, par exemple
2"010""44)()4"
qui est juste un 2
être passé deux arguments de chaîne"010"
et "44)()4"
. Comme les chaînes non liées, les chaînes peuvent également être vides et toutes les chaînes non fermées à la fin du programme sont automatiquement fermées.
* Cette partie est différente de la Pyth originale qui en fait fait faire quelque chose dans un cas comme1)
, mettant fin à la 1-arité et d' élever une erreur.
Entrée sortie
L'entrée sera une seule chaîne non vide composée uniquement des caractères 01234()"
. Vous pouvez éventuellement supposer qu'une nouvelle ligne de fin supplémentaire est toujours présente. Vous pouvez écrire une fonction ou un programme complet pour ce défi.
Vous devez sortir une valeur véridique si l'entrée est Pith syntaxiquement valide, ou une valeur fausse sinon. Les valeurs de vérité et de fausse doivent être fixes, vous ne pouvez donc pas sortir 1
pour un programme valide et2
pour un autre.
Notation
C'est du code-golf, donc le code dans le moins d'octets gagne.
Cas de test
Vérité:
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
Faux:
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())"))
(ce qui devrait être vrai, je pense).
()210""
avec beaucoup de non-opérations)
[( [2 [0] [1 [0] ] ] [0] [1 [0]] [0] ]
? Celui que vous avez a des branches de 2, 0, 0, 1 et 0 - le second ne devrait pas être là.