Pyth jest językiem golfowym opartym na Pythonie. Używa notacji przedrostkowej, przy czym każde polecenie ma inną aranżację (liczbę argumentów, które akceptuje).
Twoim zadaniem jest napisanie kontrolera składni dla (nieistniejącego) języka Pyth-a, Pith.
Składnia Pitha
Pith ma tylko 8 poleceń jednoznakowych:
01234()"
01234
każdy ma arity o odpowiedniej liczbie, a zatem oczekują, że za nim pojawi się wiele argumentów. Na przykład,
400010
jest poprawnym programem Pith, ponieważ 4
po nim następują cztery argumenty, 0
0
0
a 10
po ostatnim 1
następuje pojedynczy argument 0
. Aby to zwizualizować, możemy spojrzeć na następujące drzewo:
R
|
4
|
-------------
| | | |
0 0 0 1
|
0
gdzie R
jest węzeł główny. Alternatywnym sposobem myślenia o tym jest to, że każda liczba odnosi się do liczby dzieci odpowiedniego węzła w powyższym drzewie.
Oto kolejny prawidłowy program Pith, zawierający więcej niż jedno polecenie podstawowe:
210010
odpowiadającej
R
|
-------------
| |
2 1
| |
--------- 0
| |
1 0
|
0
Z drugiej strony,
3120102100
jest nie poprawna Program Pith ponieważ początkowa 3
ma tylko dwa argumenty, które widzimy, patrząc na drzewa poniżej:
R
|
3
|
------------------------ ??
| |
1 2
| |
2 ------
| | |
------ 1 0
| | |
0 1 0
|
0
Następnie (
rozpoczyna nieograniczony i )
kończy nieograniczony. Nieograniczony przyjmuje dowolną liczbę argumentów (zachłannie) i liczy się jako pojedynczy argument do dowolnej komendy nadrzędnej. Wszelkie niezwiązane nadal otwarte do końca programu są automatycznie zamykane. )
Polecenie nie jest błąd jeśli nie unboundeds są otwarte - po prostu nic nie robi *.
Na przykład program Pith
)31(0)0(201000100
odpowiada drzewu
R
|
3
|
------------------------------
| | |
1 0 (
| |
( -----------------------------
| | | | | |
0 2 0 0 1 0
| |
------- 0
| |
0 1
|
0
Puste niezwiązane są w porządku, podobnie ()
jak prawidłowy program Pith.
Niepoprawny program Pith z nieograniczonym jest
12(010
ponieważ 2
tylko jeden otrzymuje argument (bez ograniczeń).
Wreszcie "
rozpoczyna i kończy ciąg znaków, który zawsze ma wartość 0, i liczy się jako pojedynczy argument, np
2"010""44)()4"
który jest po prostu 2
przesłaniem dwóch argumentów łańcuchowych "010"
i "44)()4"
. Podobnie jak nieograniczone, łańcuchy mogą być również puste, a wszelkie niezamknięte łańcuchy do końca programu są automatycznie zamykane.
* Ta część różni się od oryginalnego Pytha, który faktycznie robi coś w takim przypadku 1)
, kończąc 1-arę i zgłaszając błąd.
Wejście wyjście
Dane wejściowe będą pojedynczym niepustym łańcuchem składającym się tylko z znaków 01234()"
. Opcjonalnie możesz założyć, że zawsze jest obecny dodatkowy znak nowej linii. Możesz napisać funkcję lub pełny program dla tego wyzwania.
Powinieneś wypisać prawdziwą wartość, jeśli dane wejściowe są poprawne pod względem składniowym Pith, lub wartość fałszowania w przeciwnym razie. Wartości prawdy i fałszu muszą być ustalone, aby nie można było generować danych wyjściowych1
dla jednego ważnego programu i 2
dla innego.
Punktacja
To jest golf golfowy, więc kod w najmniejszej liczbie bajtów wygrywa.
Przypadki testowe
Prawda:
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())"))
(co, jak sądzę, powinno być prawdziwe).
()210""
z wieloma
[( [2 [0] [1 [0] ] ] [0] [1 [0]] [0] ]
? Ten, który masz, ma oddziały 2, 0, 0, 1 i 0 - drugi nie powinien tam być.