スネェェーク! | spin on the RITZ

スネェェーク!

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

パソコン甲子園2006年本選 問題07 ヘビ

種類A : >'===#===~

種類B : >^Q=Q=Q=~~


-A種のヘビ-

「>」の次に「'」があって、「#」の両隣の「=」の数が左右同じで少なくとも1つ以上あり、最後は「~」

-B種のヘビ-

「>」の次に「^」があって、「Q=」が1つ以上ならび、最後は「~~」


ヘビの形が文字列で与えられるので、A種に属す(A)のかB種に属す(B)のか、それともどちらにも属さない(NA)のかを表示する。

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-


perlでやって出来たー!なんて言っとらず、C言語でやれ!って天の声が聞こえたのでやる。


とりあえず、B種の判定法は
・始めに『>^』と文字列をstrncmpで2文字ずつ比較
・『Q=』と文字列をstrncmpで2文字ずつ比較
・『Q=』じゃなかったら『~~』とstrcmpする
・結果をリターン

くらいが思いつくかな。

A種はいくつかあるんじゃないかなぁ。
宿題スレであったのは
・#より前の=を数える
・#以降の=を#以前の=の数だけ追う
・最後はstrcmp
みたいな感じだったと思う。

これで良いと思うけど、頭と尻尾除いた文字列は『====#====』みたいになってて、これが回文ならA種のヘビってことになるから、そんな感じでやってもいいと思うんですよ。ひねくれた考えだけど。


まぁ、とりあえず『>'#~』みたいなヘビにはどっちのアルゴリズムでも注意が必要だな