記事担当:共立エレショップ
[ハンダ付け不要-マイコン系]
(記事:糖分)
更新予定:毎週木曜日(次回は7月6日です!)
[ハンダ付け不要-マイコン系]
「3の倍数と3が付く数字」の日だけ休みたい、そんなことを思う初夏。
…と、懐かしいネタから書き出してしまいました。
世代的に分からない方もいるかもしれませんが、現在は落語家に転身された桂三度さんが「世界のナベアツ」という名前で披露していた「3の倍数と3が付く数字のときだけアホになる」という、1から40まで数字を数えながら3の倍数と3の付く数字を数えるときだけアホっぽい言い方と仕草をする文字通りのネタがあり、約10〜15年ほど前に流行りました。
実は、その当時にプログラマー界隈で「これってアルゴリズム」だとか「FizzBuzz問題」を連想したり等の話題になり、いろんなプログラム言語で3の倍数と3の付く数字を判定する「世界のナベアツ」プログラムを組むことが流行りました。
実際、僕も当時に某プログラミング言語用にサンプルを作ったことがあるのですが、このネタの内容はプログラミングを学ぶ上での入門用として最適な問題といえます。
せっかくなのでブログの記事として「micro:bit」で世界のナベアツプログラムネタやってみたいけど、もうやってる人いるだろうなぁと思いながらとりあえず簡単にネット検索してみたら検索結果の上位には見当たらなかったので、じゃあmicro:bitプログラミング初級者向けにサンプルを残すのもいいよね。
ということで、今回は「micro:bit」で世界のナベアツプログラムを組んでみたいと思います。
上の画像のプログラムはネタ同様に1から40までをカウントしながら数字を判定しています。
数字と表情をLEDモニターに表示、3の倍数と3が付く数字のときは表情が変わりブザー音が流れます。
3の倍数かは、数字を3で割って余りが「0」かどうかで判断しています。
3が付く数字かは、文字列処理を使っています。
数字を文字列として扱い、文字の中に「3」という文字があるかどうかをチェックしています。
実は当時、数字の判定には文字列処理を使わず数列の処理のみを使うべき、みたいな話もありまして。
…ということで、次は数列処理のみを使ったプログラム。
こちらのサンプルでは3の倍数については前のプログラムと同様の処理を行っていますが、3の付く数字については別の方法を使っています。
カウントしている数字から10を引く計算を10未満になるまで繰り返しています。
10未満になるまで繰り替えした回数が3なら30〜39の範囲内、つまり10の位が「3が付く数字」ということになるからです。
例えば35の場合、「35-10-10-10=5(10未満の数字)」と10を3回マイナスしているとなるわけです。
さらに、その10を繰り返しマイナスした後の数字が3であるかを調べることで1の位が「3が付く数字」であるかを判断しています。
13の場合は「13-10=3」、23の場合は「23-10-10=3」といった具合です。
実際の世界のナベアツさんのネタ同様、40まで数える内容にしているのでサンプルプログラムの数列処理のみを使うふたつ目の方法で正しく機能しますが、103を超える数字については3の付く数字の判定は正しく行えないのでご容赦ください。
あえて他言語のサンプル等を参考にせず作ってみたので、実際はもっとスマートな数列処理のみの方法があると思うのですが、ここまでしか作れませんでした。
この記事を読んで興味を持たれた方がいれば、チャレンジしてもらえたらと思います。
(記事:糖分)
更新予定:毎週木曜日(次回は7月6日です!)


