()[]
これらのポイントを満たす4文字の文字列を取り込むプログラムを作成します。
- すべての左括弧
(
には対応する右括弧があり)
ます。 - すべての左角括弧に
[
は、対応する右角括弧があり]
ます。 - 括弧とブラケットの一致するペアは重複しません。たとえば
[(])
、一致するかっこが一致するかっこに完全に含まれておらず、逆も同様であるため、無効です。 - 最初と最後の文字は、一致する括弧または括弧のペアです。したがって
([]([]))
、[[]([])]
有効ですが、無効です[]([])
。
(入力形式の文法は<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>
プログラムは、入力文字列全体で表される整数を評価して出力する必要があります。入力が有効であると想定できます。バイト単位の最短コードが優先されます。
プログラムの代わりに、文字列を取り込んで整数を出力または返す関数を作成できます。