Escriba un programa que tome una cadena de los cuatro caracteres ()[]
que satisfaga estos puntos:
- Cada paréntesis izquierdo
(
tiene un paréntesis derecho coincidente)
. - Cada soporte izquierdo
[
tiene un soporte derecho a juego]
. - Los pares de paréntesis y corchetes no se superpondrán. por ejemplo,
[(])
no es válido porque los corchetes coincidentes no están completamente contenidos en los paréntesis coincidentes, ni viceversa. - El primer y el último carácter son un par de paréntesis o paréntesis coincidentes. Entonces
([]([]))
y[[]([])]
son válidos pero[]([])
no lo son.
(Una gramática para el formato de entrada es <input> ::= [<input>*] | (<input>*)
).
Cada par de paréntesis y paréntesis coincidentes se evalúa como un entero no negativo:
- Todos los valores de pares dentro de paréntesis coincidentes se suman . La coincidencia vacía
()
tiene valor0
. - Los valores de pares dentro de paréntesis coincidentes se multiplican . La coincidencia vacía
[]
tiene valor1
.
(La suma o producto de un número es ese mismo número).
Por ejemplo, ([](())([][])[()][([[][]][][])([][])])
se puede desglosar y evaluar como 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>
Otro ejemplo:
[([][][][][])([][][])([][][])(((((([][]))))))] <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>
Su programa necesita evaluar e imprimir el número entero representado por toda la cadena de entrada. Puede asumir que la entrada es válida. El código más corto en bytes gana.
En lugar de un programa, puede escribir una función que tome una cadena e imprima o devuelva el entero.