日経ソフトウェアに載っていたパソコン甲子園の問題を解く

パソコン甲子園2006年本選・30点 正答率24%)

ある世界には,文字だけでできた不思議なヘビが住んでいます.このヘビにはA種とB種の2種類が確認されていますが,それ以外の種類がいる可能性があります.A種は ">'" の後に1個以上の "=" が並んだ後, "#" が来て,さらに前と同じ個数の "=" が続き,"~"(半角チルダ)で終わります.B種は ">^"の後に "Q=" が1個以上並んだ後, "~~"(半角チルダ2個)で終わります.

 A種の例:>'====#====~ >'==#==~
 B種の例:>^Q=Q=Q=~~ >^Q=Q=~~

ヘビを文字列データとして受け取り,それがどんな種類か判別して,A種の場合はA,B種の場合はB,A種でもB種でもない場合はNAを出力して終了するプログラムを作成してください(下図参照).1匹のヘビは,100文字以下の,空白を含まない1行の文字列として入力されるものとします.

懐かしい有限状態オートマトンで解くことにする.
あれ,このA種って#挟んで同じ数の=を持っているはずだから,括弧の対応すなわち文脈自由文法(プッシュダウンオートマトン
じゃなきゃ受理できないんじゃね?という(しばしばしったかと呼ばれる)馬鹿な勘違いをする.


別に===#===の大外同士,真中同士,内側同士の対応を見るわけではないので,文脈自由文法は必要ない.
有限状態なので正規文法で受理できます.


ヘビの長さは有限なので,それだけ状態数を増やしてあげればいいだけのこと.
前半と後半を,「行き」「帰り」と考えて状態名をつけてあげると楽にコーディングできる
以下,状態遷移図(丸の中は状態名)



あとはコーディングスキルの問題
ファイルから入力を読み込むというところに一番時間がかかって2時間程度
本番の制限時間を知らないけれど,1時間とかそんなものでしょう


高校生ってすごいなぁ...
普段使っている正規表現の中身にちょっとだけ触れた一日