Schreiben Sie ein Programm, das eine Zeichenfolge aus vier Zeichen enthält ()[]
, die diese Punkte erfüllt:
- Jede linke Klammer
(
hat eine passende rechte Klammer)
. - Jede linke Klammer
[
hat eine passende rechte Klammer]
. - Übereinstimmende Paare von Klammern und Klammern überlappen sich nicht. zB
[(])
ist ungültig, weil die passenden Klammern nicht vollständig in den passenden Klammern enthalten sind und umgekehrt. - Das erste und das letzte Zeichen sind übereinstimmende Klammernpaare. Also
([]([]))
und[[]([])]
gültig ist das aber[]([])
nicht.
(Eine Grammatik für das Eingabeformat ist <input> ::= [<input>*] | (<input>*)
.)
Jedes Paar übereinstimmender Klammern und Klammern ergibt eine nicht negative ganze Zahl:
- Die Werte von Paaren in übereinstimmenden Klammern werden alle summiert . Das leere Match
()
hat Wert0
. - Die Werte von Paaren in übereinstimmenden Klammern werden alle multipliziert . Das leere Match
[]
hat Wert1
.
(Die Summe oder das Produkt einer Zahl ist dieselbe Zahl.)
Beispielsweise ([](())([][])[()][([[][]][][])([][])])
kann aufgeschlüsselt und ausgewertet werden als 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>
Ein anderes Beispiel:
[([][][][][])([][][])([][][])(((((([][]))))))] <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>
Ihr Programm muss die ganze Zahl auswerten und drucken, die durch die gesamte Eingabezeichenfolge dargestellt wird. Sie können davon ausgehen, dass die Eingabe gültig ist. Der kürzeste Code in Bytes gewinnt.
Anstelle eines Programms können Sie auch eine Funktion schreiben, die eine Zeichenfolge aufnimmt und die Ganzzahl ausgibt oder zurückgibt.