新人研修も終わりかけでしょうか。私の勤務先は,ITを中心とした教育会社なので,4月から6月はかなり忙しい時期を迎えます。今年の新人研修では,私の同僚,つまり講師たちの間で,「世界のナベアツ」をサンプルプログラムとして使うのが流行しました。

 念のため説明しておくと「世界のナベアツ」は,放送作家(渡辺鐘)を兼務するコメディアンです。「3の倍数と3が付く数字のときだけアホになります」という,あまり面白くなさそうな,でも見るとつい笑ってしまう芸で有名です。ちなみに,この種の遊びは昔からあり,私も大学生時代,小学生相手にキャンプファイアを囲んでやった記憶があります(ただし,アホにはなりませんでしたが)。調べたらFizz Buzzという遊びが原型のようです。

 「世界のナベアツ」プログラムは以下の仕様を満たす必要があります。

1:1から指定した数だけカウントアップして画面に表示する。
2:3の倍数の時は「アホ」と表示し,ブザーを鳴らす。
3:3の付く数字の時も「アホ」と表示し,ブザーを鳴らす。
4:決められた数値に達したら,「オモロー」と表示して終了する。

 1はループの作成の演習です。ループは,プログラムの基本構造の1つですが,条件判断よりも理解が難しいようです。

 2は整数演算と条件判断の演習です。条件判断は意外に理解しやすいようですが,割り切れるかどうかの判定は言語ごとに差があります。剰余を求める演算子や関数を持っている場合は簡単ですが,ない場合もあるからです。昔のBASIC言語だとint(x/3)*3とxが等しい場合は3の倍数として判定するところでしょう。

 人間が判定する場合,3の倍数よりも3の付く数字の方が簡単に判定できますが,プログラムではそうはいきません。整数演算にこだわるなら,x-int(x/10)*10が3になれば,1の位が3だと判定できます。これを利用して,与えられた数値を10分の1ずつにするループを組めば任意の桁に3が含まれるかどうかを判定できます。このループは3を発見した時点で途中脱出が可能です。途中脱出しても,最後まで終了しても4の処理を忘れないようにしなければいけません。

 もっと簡単なのは整数値を文字列に変換し,文字列に「3」が含まれているかを判定することです。最近のプログラム言語には文字列検索のライブラリが含まれている場合もあります。C言語だと文字と文字列の違いを勉強するきっかけになるでしょう。

 一度数えた数字について,アホかアホでないかを保存しておくという問題にすることもできます。これは配列の学習になります。

 テーマを聞いたときは馬鹿馬鹿しいと思いましたが,このように演習問題としてはなかなか良く考えられていると思います。来年は使えるかどうか分かりませんから,早いうちに試してみてください。