問題は()の優先順に数字を表示してくださいという
構文解析の初期段階のような問題
解答はreという正規表現のライブラリをつかってみることにしました。
patternは "(" と ")" にエスケープシーケンスをつけ、その中に0-9までの数値のみの検索
search結果をmに入れた場合、
見つかった結果がm.group()、開始位置と 終了位置がm.start() m.end()で取得できる。
1) プログラム全体は(N)というパターンを文字列の左から検索
2) Nを抽出して解答する文字列に追加、問題文のテキストからは抽出部分を削除
3) 1)と2)をパターンが発見できなくなるまで繰り返す
4) (N)がみつからなければ残りを追加
例 (最後の問題)
6(4((1)3(2))5)
(1) (2)を抽出して6(4(3)5)
(3)を抽出して6(45)
(45)を抽出して6
抽出されたものから()をとってたしていくと123456
蛇足
プログラムのEasyレベルに投稿
問題のレベルが違うと主張する人たち(簡単すぎと主張)に
絡まれてその人たちと謎の取り巻き1人によって却下されてしまいました。
その人たちのコーディング能力は高い(めちゃくちゃ級)(謎の取り巻きMr.Xは未知数)と思うのですが、
それ故に自分の考えているレベルが普通の人たちと離れていることに気がついていないと思ってます。
自分で難易度ちょっと高すぎないかなと思うものは通って、(その人たちも邪魔してこない)
ちょうどいいのではないかと思うものが却下くらって残念です。
一度、難易度高すぎないかなと思っていた自作の問題に遭遇したのですが
7人の参加者中、本人以外は制限時間にテストケース1つも回答することができませんでした。
やっぱり15分で解くのには難しすぎ。
個人的にはみんなに正解してもらえたほうがうれしいので、
このジレンマを打破するのはむずかしい。