Ce défi a été publié dans le cadre du défi LotM d'avril 2018
Brain-Flak est un langage turing-tarpit qui a acquis beaucoup de renommée ici sur PPCG. La mémoire de la langue est composée de deux piles, mais un « caché » troisième pile a été découverte par Wh e à Wizard , conduisant à de nouvelles façons intéressantes de penser les programmes Brain-Flak.
Alors, qu'en est-il de donner plus de visibilité à cette pauvre troisième pile cachée? Créons un langage où la troisième pile a la reconnaissance qu'elle mérite! Ici, je vous présente Third-Flak .
La langue
Dans Third-Flak, il n'y a qu'une seule pile, appelée la troisième pile. Les opérateurs travaillent sur la troisième pile de la même façon que dans Brain-Flak, mais ici il n'y a pas []
, {}
, <>
nilads et pas {...}
monade ( de sorte que les caractères ne sont recevables que dans un programme de troisième Flak sont ()[]<>
). Voici ce que fait chaque opérateur (des exemples seront donnés représentant la troisième pile avec une liste où le dernier élément est le haut de la pile):
()
est le seul opérateur à deux caractères de Third-Flak. Il augmente le haut de la troisième pile de 1. Exemple:[1,2,3]
→[1,2,4]
(
,[
,<
: Toutes les parenthèses d'ouverture qui ne sont pas couverts par le cas précédent pousser un0
à la troisième pile. Exemple:[1,2,3]
→[1,2,3,0]
)
sort deux éléments de la troisième pile et repousse leur somme. Exemple:[1,2,3]
→[1,5]
]
sort deux éléments de la troisième pile et repousse le résultat de la soustraction du premier de la seconde. Exemple:[1,2,3]
→[1,-1]
>
sort un élément de la troisième pile. Exemple[1,2,3]
→[1,2]
Et voici les autres règles de la langue:
Au début de l'exécution, la troisième pile ne contient qu'un seul 0.
Il est interdit d'avoir vide
[]
ou à l'<>
intérieur d'un programme (ils seraient de toute façon noops s'ils suivaient la sémantique de Third-Flak, mais ils ont en fait une signification différente dans Brain-Flak qu'il n'est pas possible de recréer ici).Les parenthèses doivent toujours être équilibrées, à l'exception du fait que les parenthèses fermantes de fin à la fin du programme peuvent être manquantes. Par exemple,
[()<(()
est un programme Third-Flak valide (et la troisième pile à la fin du programme serait[1,0,1]
).Un programme ne peut contenir que les six caractères autorisés
()[]<>
. Les programmes sont garantis non vides.
Remarque: il est sous-entendu par les règles précédentes que vous n'aurez pas à faire face à des situations où vous devez sauter d'une pile vide.
Le défi
Simple, écrivez un interprète pour Third-Flak. Votre programme doit prendre en entrée un programme Third-Flak et retourner en sortie l'état de la troisième pile à la fin du programme.
Votre format de sortie est flexible tant qu'il est possible de lire sans ambiguïté l'état de la troisième pile et le même nombre est toujours codé de la même manière (c'est juste une façon de dire que tout format de sortie qui n'est pas flagrant) essayer de tricher est très bien).
Votre choix de sortie peut restreindre la plage de nombres que vous pouvez gérer tant que cela ne banalise pas le défi (car ce serait une faille par défaut ).
Cas de test
Pour chaque scénario de test, la première ligne est l'entrée et la deuxième ligne la pile de sortie représentée sous la forme d'une liste de nombres séparés par des espaces où le haut de la pile est le dernier élément.
[()<(()
0 1 0 1
[((((()()()()()))
0 0 0 5
((([()][()][()])))
-3
[<<(((()()()())(((((
0 0 0 0 0 4 0 0 0 0 0
[()]<(([()])><[()]
-1 0 -1
(())(()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(()()()()())(())(())(())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(()()()()())(())(())(())(())(())(())(()())(())(())(())(()())(()()()())(())(()()()()())(()())(()())(()())(()()())(())(()())(())(()()()()())(()())(()()()()())(())(())(())(())(())(()())(())(())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(()())(()())(()())(()())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(()()())(()())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(())(())(()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(()()())(())(()()())(())(())(())(()())(()()())(()())(())(()()()()())(()())(())(()()())(())(()()()()())(())(())(())(()()())(())(())(())(()())(())(()())(()()()())(())(())(()()()()())(()())(()())(())(()()())(())(())(())(())(()()())(()())(())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()())(())(()()()()())(()()()()())(())(()()())(())(())(()())(())(()()()()())(())(()()()()())(())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(()()()()())(())(()()()()())(())(())(())(()())(())(()()()()())(())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()()()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(())(()())(()()()())(())(())(()())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(()())(()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(()()())(())(())(()())(())(())(()()()()())(()()()())(()())(()())(()()())(())(()())(())(()()()()())(()())(()()()()())(())(())(())(()()()())(()()()())(()()
718 2
e
est ici .
[()]
enfreint la règle selon laquelle nous n'avons pas à nous soucier de sauter d'une pile vide