世界のナベアツ問題をなでしこで解いてみた
流行の二周遅れが雑念雑記の標準速度である。
文字列で解く人を批判する人もゐるが、そもそも「3の倍数」ならともかく「3がつく数字」といふのは発想からして文字列的なのだから、無理に数字列的に考へるより自然ではないかと思った。
ちなみに、私がよくお世話になる日本語プログラム言語「なでしこ」では、次のやうに書けば良い。
●ナベアツ判定(対象) #方法1 対象を文字列分解して反復し、もしそれが"3"ならば、真で戻る。 #方法2 対象の0から"3"を文字検索し、もしそれがいいえでなければ、真で戻る。 #方法3 もし対象が"*3*"に一致ならば、真で戻る。 戻る(偽) もし、ナベアツ判定("242532462")が真ならば 「あほ〜」と言う。 違えば 「あほじゃないよ〜」と言う。 終了。
方法3はワイルドカードを用ゐた検索で、正規表現とどちらが早いかは判らない。なほ、これらの記述は以下と等価である。
●ナベアツ判定(対象) #方法1 文字列分解(対象)を反復、もし(_ = "3")ならば、戻る(1)。 #方法2 もし(文字検索(対象,0,"3"))ならば、戻る(1)。 #方法3 もし(一致(対象,"*3*"))ならば、戻る(1)。 戻る(0) もし(ナベアツ判定("24352462"))ならば 言う("あほ〜") 違えば 言う("あほじゃないよ〜") 終了
方法2の判定方法が若干違ふのは、「文字検索」が、見つかった場合はその場所、見つからなければ0を返すため。後の例では0以外のどの数字が出ても真偽値*1に変換され真になるが、先の例では出てきた値を真偽値に変換せずに「真(1)」であるかを比較するため、1以外の数字が返ってきた場合に偽となってしまふ。そこで、偽(0)以外(〜でなければ)といふ書き方をしてゐる。
ちなみに、句読点は「、」が行の継続、「。」が行の終了を意味するが、Perlと異なり書いても書かなくても良い。ちなみに、戻り値を指定しなかった場合の戻り値は最終代入変数「それ」「_」*2である。