Scrivi un programma che includa una stringa di quattro caratteri ()[]che soddisfi questi punti:
- Ogni parentesi sinistra
(ha una parentesi destra corrispondente). - Ogni parentesi sinistra
[ha una parentesi destra corrispondente]. - Le coppie di parentesi e parentesi corrispondenti non si sovrapporranno. es.
[(])non è valido perché le parentesi corrispondenti non sono completamente contenute tra parentesi corrispondenti, né viceversa. - Il primo e l'ultimo carattere sono una coppia di parentesi o parentesi corrispondenti. Quindi
([]([]))e[[]([])]sono validi ma[]([])non lo sono.
(Una grammatica per il formato di input è <input> ::= [<input>*] | (<input>*).)
Ogni coppia di parentesi e parentesi corrispondenti corrisponde a un numero intero non negativo:
- I valori delle coppie tra parentesi corrispondenti sono tutti sommati . La corrispondenza vuota
()ha valore0. - I valori delle coppie all'interno delle parentesi corrispondenti vengono moltiplicati . La corrispondenza vuota
[]ha valore1.
(La somma o il prodotto di un numero è lo stesso numero.)
Ad esempio, ([](())([][])[()][([[][]][][])([][])])può essere suddiviso e valutato come 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 altro esempio:
[([][][][][])([][][])([][][])(((((([][]))))))] <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>
Il tuo programma deve valutare e stampare l'intero rappresentato dall'intera stringa di input. Si può presumere che l'input sia valido. Vince il codice più breve in byte.
Invece di un programma, è possibile scrivere una funzione che accetta una stringa e stampa o restituisce il numero intero.