To wyzwanie zostało opublikowane w ramach wyzwania LotM z kwietnia 2018 r
Brain-Flak to język Turinga-Tarpona, który zyskał całkiem sporo sławy tutaj na PPCG. Pamięć języka składa się z dwóch stosów, ale „ukryty” trzeci stos został odkryty przez Wh e at Wizard , co prowadzi do kilku nowych interesujących sposobów myślenia o programach Brain-Flak.
A co powiesz na zwiększenie widoczności tego słabego ukrytego trzeciego stosu? Stwórzmy język, w którym trzeci stos ma takie uznanie, na jakie zasługuje! Tutaj przedstawiam wam Trzeci Flak .
Język
W Third-Flak jest tylko jeden stos, zwany trzecim stosem. Operatorzy pracują na trzecim stosu w ten sam sposób, co robią w Brain-Flak, ale tutaj nie ma []
, {}
, <>
nilads i nie {...}
monada (więc tylko dopuszczalne znaki w programie innej Flak są ()[]<>
). Oto, co robi każdy operator (podane zostaną przykłady reprezentujące trzeci stos z listą, w której ostatni element jest na górze stosu):
()
jest jedynym dwuznakowym operatorem w Third-Flak. Zwiększa górę trzeciego stosu o 1. Przykład:[1,2,3]
→[1,2,4]
(
,[
,<
: Wszystkie nawiasy otwierające, które nie zostały objęte poprzednim przypadku naciskasz0
do trzeciego stosie. Przykład:[1,2,3]
→[1,2,3,0]
)
wyskakuje dwa elementy z trzeciego stosu i odsuwa ich sumę. Przykład:[1,2,3]
→[1,5]
]
wyskakuje dwa elementy z trzeciego stosu i odsuwa wynik odejmowania pierwszego od drugiego. Przykład:[1,2,3]
→[1,-1]
>
wyskakuje element z trzeciego stosu. Przykład[1,2,3]
→[1,2]
A oto inne zasady języka:
Na początku wykonywania trzeci stos zawiera tylko jedno 0.
Zabronione jest posiadanie pustego
[]
lub<>
wewnątrz programu (i tak byłyby noops, jeśli podążałyby za semantyką Third-Flak, ale w rzeczywistości mają inne znaczenie w Brain-Flak, którego nie można tutaj odtworzyć).Nawiasy zawsze muszą być zrównoważone, z wyjątkiem faktu, że na końcu programu mogą brakować końcowych nawiasów zamykających. Na przykład
[()<(()
jest to poprawny program Third-Flak (a trzeci stos na końcu programu byłby[1,0,1]
).Program może zawierać tylko sześć dozwolonych znaków
()[]<>
. Programy z pewnością nie będą puste.
Uwaga: poprzednie zasady sugerują, że nie będziesz musiał radzić sobie z sytuacjami, w których musisz wyskoczyć z pustego stosu.
Wyzwanie
Proste, napisz interpretera dla Third-Flak. Twój program musi przyjąć jako dane wejściowe program Third-Flak i zwrócić jako wynik stan trzeciego stosu na końcu programu.
Twój format wyjściowy jest elastyczny, o ile możliwe jest jednoznaczne odczytanie z niego stanu trzeciego stosu, a ten sam numer jest zawsze kodowany w ten sam sposób (Jest to tylko sposób na stwierdzenie, że każdy format wyjściowy, który nie jest rażący próbować oszukiwać jest w porządku).
Twój wybór danych wyjściowych może ograniczyć zakres liczb, którymi możesz zarządzać, pod warunkiem, że nie będzie to trywialne wyzwanie (ponieważ byłaby to domyślna luka ).
Przypadki testowe
Dla każdego przypadku testowego pierwszym wierszem jest wejście, a drugim wierszem stos wyjściowy reprezentowany jako lista liczb oddzielona spacjami, gdzie góra stosu jest ostatnim elementem.
[()<(()
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
jest tutaj .
[()]
łamie zasadę, że nie musimy się martwić wyskakiwaniem z pustego stosu