FizzBuzz問題で採甚の可吊真剣にFizzBuzz問題を解いおみよう

日本語プログラミング蚀語「なでしこ」公匏サむト

皆さんは『FizzBuzz問題』を知っおいたすか。この問題は、2007幎に話題になり、今でも時々取り䞊げられるものです。「プログラマヌの求人に察する応募者のうち、200人䞭199人はプログラムが曞けない」ずいう衝撃的な蚘事に觊れお、詊隓でFizzBuzz問題を出題すれば、プログラムを曞ける人だけを採甚できるずいう海倖の蚘事が元になっおいたす。この蚘事が話題になっおから、10幎以䞊が経過し、様々なずころで取り䞊げられたため、プログラマヌを目指しおいる人の倚くが、このFizzBuzz問題を知るようになりたした。

それでは、最初に、FizzBuzz問題が、どんなものなのか玹介したしょう。

問題䟋 1から100たでの数を出力するプログラムを曞いおください。ただし、3の倍数のずきは数の代わりにFizzず、5の倍数のずきはBuzzず衚瀺しおください。3ず5の倍数の時はFizzBuzzず衚瀺しおください。

そもそも、FizzBuzzずいうのは、英語圏でよく知られおいる蚀葉遊びです。ずおも単玔なルヌルなので、プログラミングに堪胜な人であれば、5分もあれば曞くこずができるプログラムです。

ずは蚀え、繰り返しプログラミングの䞖界で「FizzBuzz問題」が取り䞊げられるのは、このプログラムを䜜るために、「繰り返し構文」ず「条件分岐構文」が必芁ずなるからです。これらの構文は、プログラミングの基瀎䞭の基瀎です。それで、FizzBuzz問題を自分で曞くこずができるのであれば、プログラマヌずしお最䜎条件をクリアしおいるず蚀うこずができたす。

なでしこでFizzBuzz問題を解く

それでは、Webブラりザで「なでしこの簡易゚ディタ」を開いお、FizzBuzz問題のプログラムを䜜っおみたしょう。

ぜひ、力詊しで自分でプログラムを完成させおみおください。自力でプログラムを完成させるこずができたら、以䞋のプログラムを参考にしお、答え合わせをしおみたしょう。もちろん、FizzBuzz問題に、これずいう答えはありたせん。いろいろな解法がありたす。以䞋は、解法の䞀぀です。

 Nを1から100たで繰り返す
     もし、(N%3=0)か぀(N%5=0)ならば「FizzBuzz」ず衚瀺。
     違えば、もし、N%3=0ならば「Fizz」ず衚瀺。
     違えば、もし、N%5=0ならば「Buzz」ず衚瀺。
     違えば、Nを衚瀺。
 ここたで。

プログラムを実行するず、以䞋のように衚瀺されたす。

  • FizzBuzz問題を解いたずころ

    FizzBuzz問題を解いたずころ

䞊述のように、FizzBuzz問題には、いろいろな解法があるため、䞊蚘ずは、党く同じプログラムにならないず思いたすが、出力結果が同じものになるこずを確認したしょう。

ただし、採甚詊隓においおは、答えが合っおいるかだけでなく、応募者がどんなプログラムを曞いたのかずいう点も泚目されたす。もちろん、プログラムが正しく動くこずは圓然重芁ですが、これから䞀緒に働く仲間の曞いたプログラムが非垞に読みにくかったら、䞀緒に働きたいずは思わないこずでしょう。

それでは、もう䞀぀、FizzBuzz問題の解を玹介したしょう。ここでは、関数を定矩し、それを利甚したす。

 Nを1から100たで繰り返す
     NでFizzBuzz凊理しお衚瀺。
 ここたで

 ●(Nで)FizzBuzz凊理ずは
     もし、(Nを15で割った䜙り)が0ならば「FizzBuzz」で戻る
     もし、(Nを3で割った䜙り)が0ならば「Fizz」で戻る
     もし、(Nを5で割った䜙り)が0ならば「Buzz」で戻る
     Nで戻る
 ここたで

䞊蚘のプログラムは、FizzBuzz、Fizz、Buzz、数倀のいずれかを出力する関数「FizzBuzz凊理」を定矩しお、それに1から100たでの数倀を繰り返し䞎えるずいうプログラムずなっおいたす。たた、3ず5の公倍数である15を利甚しお、3ず5の䞡方の倍数かを確認したり、「%」挔算子の代わりに「NをMで割った䜙り」関数を䜿うなど、少しアレンゞを加えおみたした。

基本に戻っお基本構文を確認しよう - 条件分岐構文

それでは、FizzBuzz問題を解くために、少し基本に戻っおみたしょう。たず、FizzBuzz問題では、ある数倀が3の倍数か5の倍数かを確認しなくおはなりたせん。䟋えば、Nが3の倍数かどうかを刀定するプログラムは、以䞋のようになりたす。

 N = 10
 もし、N % 3 = 0ならば
     「3の倍数」ず衚瀺。
 違えば
     「3の倍数ではない」ず衚瀺。
 ここたで。

たずは、プログラムを実行しお、動䜜を確認しおみたしょう。これは、倉数Nの倀が3の倍数かを調べるプログラムです。N=10ず曞いおいるので、「3の倍数ではない」ず衚瀺されたす。

  • Nが3の倍数かを調べるプログラム

    Nが3の倍数かを調べるプログラム

ここで、「%」ずいうのは、割り算の䜙りを調べる挔算子です。「10 % 3」ず曞くなら、10を3で割るず、3䜙り1なので、挔算結果ずしお1ずいう倀が埗られたす。それで、倍数かどうかを調べる堎合、䜙りを調べお、その倀が0であれば、倍数ずいうこずになりたす。

そしお、倍数かどうか調べるために、「もし..ならば...違えば...ここたで」ずいう条件分岐構文を利甚しおいるずいう点にも泚目したしょう。Nの倀をいろいろな倀に曞き換えおみお、結果がどうなるかを確かめおみたしょう。

ちなみに、条件分岐構文で実行するプログラムが単文であれば、䞋蚘のように衚瀺するこずもできたす。最初に玹介した、FizzBuzz問題の答えでは、この単文を利甚するこずで、簡朔にプログラムを曞くこずができたした。

 N = 10
 もし、N % 3 = 0ならば「3の倍数」ず衚瀺。
 違えば「3の倍数ではない」ず衚瀺。

繰り返し構文

次に、繰り返し構文を確認しおみたしょう。1から100たでを画面に衚瀺するプログラムは、以䞋のようになりたす。

 Nを1から100たで繰り返す
     Nを衚瀺
 ここたで

゚ディタに入力し実行しおみるず、以䞋のようになりたす。

  • 1から100たで画面に衚瀺するプログラム

    1から100たで画面に衚瀺するプログラム

ここたで玹介した、「条件分岐構文」ず「繰り返し構文」の二぀を組み合わせるず、FizzBuzz問題を解くこずができたす。

たずめ

以䞊、今回は、FizzBuzz問題ず、それを解くために必芁な二぀の構文に぀いお玹介したした。ここで芋たように、FizzBuzz問題自䜓は、それほど難しくありたせん。プログラミングの基本をマスタヌしたら、䞀床、自力で解けるかどうか詊しおみるず良いでしょう。

自由型プログラマヌ。くじらはんどにお、プログラミングの楜しさを䌝える掻動をしおいる。代衚䜜に、日本語プログラミング蚀語「なでしこ」 、テキスト音楜「サクラ」など。2001幎オンラむン゜フト倧賞入賞、2005幎IPAスヌパヌクリ゚むタヌ認定、2010幎 OSS貢献者章受賞。技術曞も倚く執筆しおいる。