Diese Challenge wurde im Rahmen der LotM-Challenge im April 2018 veröffentlicht
Brain-Flak ist eine Turing-Tarpit-Sprache, die hier bei PPCG viel Ruhm erlangt hat. Die Erinnerung an die Sprache besteht aus zwei Stapeln, aber ein "versteckter" dritter Stapel wurde entdeckt von Wh e at Wizard entdeckt , was zu einigen interessanten neuen Denkweisen für Brain-Flak-Programme führte.
Wie wäre es also damit, diesem armen, versteckten dritten Stapel mehr Sichtbarkeit zu verleihen? Lassen Sie uns eine Sprache erstellen, in der der dritte Stapel die Anerkennung erhält, die er verdient! Hier präsentiere ich euch Third-Flak .
Die Sprache
In Third-Flak gibt es nur einen Stapel, den dritten Stapel. Die Betreiber arbeiten auf dem dritten Stapel in der gleichen Art , wie sie in Brain-Flak, aber hier gibt es keine []
,{}
, <>
nilads und keine {...}
Monade (so die einzigen zulässigen Zeichen in einem Third-Flak - Programm sind ()[]<>
). Hier ist, was jeder Operator tut (Beispiele werden gegeben, die den dritten Stapel mit einer Liste darstellen, in der das letzte Element die Oberseite des Stapels ist):
()
ist der einzige zweistellige Operator in Third-Flak. Es erhöht die Oberseite des dritten Stapel von 1. Beispiel:[1,2,3]
→[1,2,4]
(
,[
,<
: Alle Öffnungs Klammern , die nicht von dem vorherigen Fall Push a abgedeckt sind0
zu dem dritten Stapel. Beispiel:[1,2,3]
→[1,2,3,0]
)
Knackt zwei Elemente aus dem dritten Stapel und drückt ihre Summe zurück. Beispiel:[1,2,3]
→[1,5]
]
Fügt zwei Elemente aus dem dritten Stapel hinzu und schiebt das Ergebnis des Subtrahierens des ersten von dem zweiten zurück. Beispiel:[1,2,3]
→[1,-1]
>
Öffnet ein Element aus dem dritten Stapel. Beispiel[1,2,3]
→[1,2]
Und hier sind die anderen Regeln der Sprache:
Zu Beginn der Ausführung enthält der dritte Stapel nur eine einzige 0.
Es ist verboten, leer zu haben
[]
oder<>
innerhalb eines Programms (sie wären sowieso Noops, wenn sie der Semantik von Third-Flak folgen, aber sie haben tatsächlich eine andere Bedeutung in Brain-Flak, die hier nicht wiederhergestellt werden kann).Klammern müssen immer ausgeglichen sein, mit Ausnahme der Tatsache, dass abschließende Klammern am Ende des Programms fehlen können. Als Beispiel
[()<(()
ist ein gültiges Third-Flak-Programm (und der dritte Stack am Ende des Programms wäre[1,0,1]
).Ein Programm kann nur die sechs zulässigen Zeichen enthalten
()[]<>
. Programme dürfen garantiert nicht leer sein.
Hinweis: Die vorherigen Regeln implizieren, dass Sie sich nicht mit Situationen befassen müssen, in denen Sie von einem leeren Stapel abspringen müssen.
Die Herausforderung
Einfach, schreibe einen Interpreter für Third-Flak. Ihr Programm muss als Eingabe ein Third-Flak-Programm annehmen und als Ausgabe den Status des dritten Stapels am Ende des Programms zurückgeben.
Ihr Ausgabeformat ist flexibel, solange es möglich ist, den Status des dritten Stapels eindeutig auszulesen und die gleiche Nummer immer auf die gleiche Weise zu codieren zu versuchen zu betrügen ist in Ordnung).
Ihre Ausgabewahl kann den Bereich der Nummern einschränken, die Sie verwalten können, solange dies die Herausforderung nicht trivialisiert (da dies der Fall wäre) eine Standardlücke ).
Testfälle
Für jeden Testfall ist die erste Zeile die Eingabe und die zweite Zeile der Ausgabestapel, der als durch Leerzeichen getrennte Liste von Zahlen dargestellt wird, wobei die Oberseite des Stapels das letzte Element ist.
[()<(()
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
ist hier .
[()]
verstößt es gegen die Regel, dass wir uns nicht darum kümmern müssen, von einem leeren Stapel zu springen