Напишіть програму, яка містить рядок із чотирьох символів, ()[]
що задовольняє цим точкам:
- Кожна ліва дужка
(
має відповідні праві дужки)
. - Кожна ліва дужка
[
має відповідну праву дужку]
. - Збігання пар дужок і дужок не буде перетинатися. наприклад
[(])
, недійсний, оскільки відповідні дужки не містяться повністю в дужках, що відповідають, а також навпаки. - Перший і останній символи - це відповідна пара дужок або дужок. Так
([]([]))
і[[]([])]
справедливі , але[]([])
це не так .
( Граматика для формату введення є <input> ::= [<input>*] | (<input>*)
.)
Кожна пара відповідних дужок і дужок оцінює невід'ємне ціле число:
- Значення пар усередині відповідних дужок підсумовуються . Порожній збіг
()
має значення0
. - Значення пар у відповідних дужках всі множать . Порожній збіг
[]
має значення1
.
( Сума або добуток одного числа - це те саме число.)
Наприклад, ([](())([][])[()][([[][]][][])([][])])
можна розбити і оцінити як 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>
Ще один приклад:
[([][][][][])([][][])([][][])(((((([][]))))))] <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>
Вашій програмі необхідно оцінити та роздрукувати ціле число, представлене всім рядком введення. Ви можете припустити, що введення дійсне. Виграє найкоротший код у байтах.
Замість програми ви можете написати функцію, яка містить рядок і друкує або повертає ціле число.