Escreva um programa que use uma sequência de quatro caracteres ()[]
que satisfaça esses pontos:
- Todo parêntese esquerdo
(
tem um parêntese direito correspondente)
. - Cada colchete esquerdo
[
tem um colchete direito correspondente]
. - Pares correspondentes de parênteses e colchetes não se sobrepõem. por exemplo,
[(])
é inválido porque os colchetes correspondentes não estão totalmente contidos nos parênteses correspondentes, nem vice-versa. - O primeiro e o último caracteres são um par correspondente entre parênteses ou colchetes. Então,
([]([]))
e[[]([])]
são válidos, mas[]([])
não são.
(Uma gramática para o formato de entrada é <input> ::= [<input>*] | (<input>*)
.)
Cada par de parênteses e colchetes correspondentes é avaliado como um número inteiro não negativo:
- Os valores dos pares entre parênteses são todos somados . A correspondência vazia
()
tem valor0
. - Os valores dos pares entre colchetes são todos multiplicados . A correspondência vazia
[]
tem valor1
.
(A soma ou o produto de um número é o mesmo número.)
Por exemplo, ([](())([][])[()][([[][]][][])([][])])
pode ser dividido e avaliado 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>
Outro exemplo:
[([][][][][])([][][])([][][])(((((([][]))))))] <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>
Seu programa precisa avaliar e imprimir o número inteiro representado por toda a cadeia de entrada. Você pode assumir que a entrada é válida. O código mais curto em bytes vence.
Em vez de um programa, você pode escrever uma função que pega uma string e imprime ou retorna o número inteiro.