Pyth - язык игры в гольф, основанный на Python. Он использует префиксную нотацию, каждая команда имеет разную арность (количество аргументов, которые она принимает).
Ваша задача - написать средство проверки синтаксиса для (несуществующего) языка, подобного Pyth, Pith.
Синтаксис Pith
У Pith есть только 8 команд с одним символом:
01234()"
01234
у каждого есть арность соответствующего числа, и, следовательно, ожидайте, что после него будет много аргументов. Например,
400010
является правильной программой Pith, потому что 4
за ней следуют четыре аргумента, 0
0
0
а 10
за последним 1
следует единственный аргумент 0
. Чтобы визуализировать это, мы можем взглянуть на следующее дерево:
R
|
4
|
-------------
| | | |
0 0 0 1
|
0
где R
корневой узел Альтернативный способ думать об этом состоит в том, что каждое число относится к числу дочерних элементов, которые соответствующий узел имеет в дереве выше.
Вот еще одна действительная программа Pith с более чем одной базовой командой:
210010
соответствует
R
|
-------------
| |
2 1
| |
--------- 0
| |
1 0
|
0
С другой стороны,
3120102100
это не правильная программа Pith , поскольку исходный 3
имеет только два аргумента, которые мы можем увидеть, посмотрев на дерево ниже:
R
|
3
|
------------------------ ??
| |
1 2
| |
2 ------
| | |
------ 1 0
| | |
0 1 0
|
0
Далее (
начинается неограниченное, и )
заканчивается неограниченное. Неограниченный принимает любое количество аргументов (жадно) и считается одним аргументом для любой родительской команды. Любые неограниченные, все еще открытые к концу программы, автоматически закрываются. )
Команда не является ошибкой , если нет unboundeds открыты - это просто ничего не делает *.
Например, программа Pith
)31(0)0(201000100
соответствует дереву
R
|
3
|
------------------------------
| | |
1 0 (
| |
( -----------------------------
| | | | | |
0 2 0 0 1 0
| |
------- 0
| |
0 1
|
0
Пустые неограниченные в порядке, так ()
что действительная программа Pith.
Недопустимая программа Pith с неограниченной
12(010
так как 2
только получает один аргумент (неограниченный).
Наконец, "
начинается и заканчивается строка, которая всегда равна 0 арности и считается как один аргумент, например
2"010""44)()4"
которому просто 2
передают два строковых аргумента "010"
и "44)()4"
. Как и неограниченные, строки также могут быть пустыми, и любые незакрытые строки к концу программы автоматически закрываются.
* Эта часть отличается от оригинального Pyth, который на самом деле делает что-то в случае, например 1)
, завершает 1-арность и вызывает ошибку.
Ввод, вывод
Ввод будет единственной непустой строкой, состоящей только из символов 01234()"
. При желании вы можете предположить, что дополнительный трейлинг-перевод строки всегда присутствует. Вы можете написать функцию или полную программу для этой задачи.
Вы должны вывести истинное значение, если входной синтаксически правильный Pith, или ложное значение в противном случае. Значения true и false должны быть фиксированными, чтобы вы не могли выводить данные 1
для одной действительной программы и 2
для другой.
счет
Это код-гольф, поэтому выигрывает код в наименьшем количестве байтов.
Контрольные примеры
Truthy:
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())"))
(который должен быть правдой, я думаю).
()210""
это происходит из-за отсутствия операций)
[( [2 [0] [1 [0] ] ] [0] [1 [0]] [0] ]
? У того, который у вас есть, есть ветви 2, 0, 0, 1 и 0 - второго не должно быть.