编写一个程序,()[]
使用满足以下要求的四个字符组成的字符串:
- 每个左括号
(
都有一个匹配的右括号)
。 - 每个左括号
[
都有一个匹配的右括号]
。 - 配对的括号和方括号不会重叠。例如
[(])
是无效的,因为匹配括号没有完全包含在匹配括号中,反之亦然。 - 第一个和最后一个字符是一对匹配的括号或括号。所以
([]([]))
和[[]([])]
是有效的,但[]([])
不是。
(输入格式的语法为<input> ::= [<input>*] | (<input>*)
。)
每对匹配的括号和括号都得出一个非负整数:
例如,([](())([][])[()][([[][]][][])([][])])
可以细分并评估为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>
另一个例子:
[([][][][][])([][][])([][][])(((((([][]))))))] <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>
您的程序需要评估并打印由整个输入字符串表示的整数。您可以假定输入有效。以字节为单位的最短代码获胜。
您可以编写一个接受字符串并打印或返回整数的函数,而不是程序。