Biorąc pod uwagę ciąg zawierający tylko 0, 1, 2 i nawiasy, wyprowadzaj drzewo gramatyki łańcucha.
2
Wymaga 2 argumenty - jeden po lewej i jeden w prawo
1
Wymaga jednego argumentu - do lewej lub prawej
A 0
nie wymaga żadnych argumentów i jest podstawowym przypadkiem
Para nawiasów liczy się jako jeden argument, a zawartość nawiasów jest oceniana oddzielnie od reszty ciągu. Możliwe są zagnieżdżone nawiasy
Ciąg wejściowy zawsze będzie kompletnym drzewem bez spadających znaków. Ciąg będzie miał tylko jedno poprawne rozwiązanie. Zauważ, że funkcje są przemienne i każde ustawienie argumentów dla 2
jest dopuszczalne. Nie będziesz musiał obsługiwać danych wejściowych, które nie spełniają tych wymagań.
Wyjściowy format gramatyki będzie miał postać function(arguments)
rekurencyjną
Przypadki testowe
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
prawidłowe dane wejściowe?0120210
nie można go również przeanalizować, ponieważ2[4](2[2](1[1](0[0]), 0[3]), 1[5](0[6]))
liczby w nawiasach wskazują pozycję w ciągu.101
jest również niejednoznaczny.Odpowiedzi:
Python 3.6 (wersja wstępna), 199
Zaoszczędź 6 bajtów dzięki Morgan Thrapp
Wyjaśnienie i wersja bez golfa:
źródło