Если задана строка, содержащая только 0, 1, 2 и скобки, выведите дерево грамматики строки.
А 2
требует 2 аргумента - один слева и один справа
А 1
требует один аргумент - влево или вправо
A 0
не требует никаких аргументов и является базовым случаем
Пара скобок считается одним аргументом, а содержимое скобок вычисляется отдельно от остальной части строки. Возможны вложенные скобки
Входная строка всегда будет полным деревом без выпадающих символов. Строка также будет иметь только одно правильное решение. Обратите внимание, что функции являются коммутативными, и любое расположение аргументов для 2
будет приемлемым. Вам не придется обрабатывать ввод, который не соответствует этим требованиям.
Формат выходной грамматики будет в форме function(arguments)
рекурсивно
Контрольные примеры
0 --> 0
01 --> 1(0)
020 --> 2(0,0)
101 --> 1(1(0))
0120 --> 2(1(0),0)
0120210 --> 2(1(0),2(0,1(0)))
01210 --> 2(1(0),1(0))
(020)210 --> 2(2(0,0),1(0))
((020)20)1 --> 1(2(0,2(0,0)))
10201
действительным вход?0120210
также не может быть проанализировано,2[4](2[2](1[1](0[0]), 0[3]), 1[5](0[6]))
где числа в скобках указывают положение в строке.101
тоже неоднозначно.Ответы:
Python 3.6 (предварительная версия), 199
Сохранено 6 байтов благодаря Morgan Thrapp
Пояснение и версия без гольфа:
источник