elsif | spin on the RITZ

elsif

Perlで「else if」って書いてるせいで、エラーが起きていることに気づけなかった今日この頃。

正規表現に四苦八苦しながら楽しんでおります。



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

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

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

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


-A種のヘビ-

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

-B種のヘビ-

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


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

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


注意する必要があるのは、A種については=の数が一緒ってこと、B種については・・・特にないかな。strcmp使うし。

CなりC++なりjavaなりでやれって話ですが、ぶっちゃけ正規表現の課題で出てきそうな内容なので、Perlをつかってみる。



#!/usr/bin/perl

while (<>) {
    chomp;
    if (/^>'(=+)#\1~$/) {
        print "A\n";
    } elsif (/^>\^(Q=)+(~~)$/) {
        print "B\n";
    } else {
        print "NA\n";
    }
}



「Perlを使うと楽チンだね♪」って書きたかったけど、久しぶりに正規表現を使ったので思い出すのに一苦労orz

それ以前にelsifを「else if」と書き間違えるという失態を演じるo........rz



後方参照(だと思う)は遅くなるから使いすぎに注意ってどっかの本に書いてあったな・・・・

Perlの本を手元に置いておきたい。