スネェェーク!
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
パソコン甲子園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種のヘビってことになるから、そんな感じでやってもいいと思うんですよ。ひねくれた考えだけど。
まぁ、とりあえず『>'#~』みたいなヘビにはどっちのアルゴリズムでも注意が必要だな