Écrivez un programme qui accepte une chaîne de quatre caractères ()[]
qui satisfait ces points:
- Chaque parenthèse gauche
(
a une parenthèse droite correspondante)
. - Chaque support gauche
[
a un support droit correspondant]
. - Les paires de parenthèses et de parenthèses correspondantes ne se chevaucheront pas. eg
[(])
n'est pas valide car les crochets correspondants ne sont pas entièrement contenus dans les parenthèses correspondantes, ni vice-versa. - Le premier et le dernier caractère sont une paire de parenthèses ou de crochets correspondants. Donc
([]([]))
et[[]([])]
sont valides mais[]([])
ne le sont pas.
(Une grammaire pour le format d'entrée est <input> ::= [<input>*] | (<input>*)
.)
Chaque paire de parenthèses et de crochets correspondants correspond à un entier non négatif:
- Les valeurs des paires entre parenthèses correspondantes sont toutes additionnées . La correspondance vide
()
a une valeur0
. - Les valeurs des paires entre parenthèses correspondantes sont toutes multipliées . La correspondance vide
[]
a une valeur1
.
(La somme ou le produit d'un nombre est ce même nombre.)
Par exemple, ([](())([][])[()][([[][]][][])([][])])
peut être décomposé et évalué comme 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>
Un autre exemple:
[([][][][][])([][][])([][][])(((((([][]))))))] <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>
Votre programme doit évaluer et imprimer l'entier représenté par la chaîne d'entrée entière. Vous pouvez supposer que l'entrée est valide. Le code le plus court en octets gagne.
Au lieu d'un programme, vous pouvez écrire une fonction qui prend une chaîne et imprime ou renvoie l'entier.