Napisz program, który pobiera ciąg czterech znaków, ()[]który spełnia następujące warunki:
- Każdy lewy nawias
(ma pasujący prawy nawias). - Każdy lewy wspornik
[ma pasujący prawy wspornik]. - Pasujące pary nawiasów i nawiasów nie będą się nakładać. np.
[(])jest niepoprawny, ponieważ pasujące nawiasy nie są w pełni zawarte w pasujących nawiasach, i odwrotnie. - Pierwszy i ostatni znak to pasująca para nawiasów lub nawiasów. Tak
([]([]))i[[]([])]są ważne, ale[]([])nie są.
( Gramatyka formatu wejściowego to <input> ::= [<input>*] | (<input>*).)
Każda para pasujących nawiasów i nawiasów przyjmuje wartość całkowitą nieujemną:
- Wszystkie pary w pasujących nawiasach są sumowane . Puste dopasowanie
()ma wartość0. - Wszystkie pary w pasujących nawiasach są mnożone . Puste dopasowanie
[]ma wartość1.
( Suma lub iloczyn jednego numeru to ta sama liczba).
Na przykład ([](())([][])[()][([[][]][][])([][])])można podzielić i ocenić jako 9:
([](())([][])[()][([[][]][][])([][])]) <input>
(1 (0 )(1 1 )[0 ][([1 1 ]1 1 )(1 1 )]) <handle empty matches>
(1 0 2 0 [(1 1 1 )2 ]) <next level of matches>
(1 0 2 0 [3 2 ]) <and the next>
(1 0 2 0 6 ) <and the next>
9 <final value to output>
Inny przykład:
[([][][][][])([][][])([][][])(((((([][]))))))] <input>
[(1 1 1 1 1 )(1 1 1 )(1 1 1 )((((((1 1 ))))))]
[5 3 3 (((((2 )))))]
[5 3 3 ((((2 ))))]
[5 3 3 (((2 )))]
[5 3 3 ((2 ))]
[5 3 3 (2 )]
[5 3 3 2 ]
90 <output>
Twój program musi ocenić i wydrukować liczbę całkowitą reprezentowaną przez cały ciąg wejściowy. Możesz założyć, że dane wejściowe są prawidłowe. Najkrótszy kod w bajtach wygrywa.
Zamiast programu możesz napisać funkcję, która pobiera ciąg znaków i wypisuje lub zwraca liczbę całkowitą.