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ą.