英語圏では言葉遊びとしてFizz Buzz遊びが行われているようであるが、これをもとにプログラミングができるかどうかを問える場合がある。ここではC言語とSwiftを使って回答例と説明を行ってみたい。
Fizz Buzzとは
そもそもFizz Buzzというのは、英語圏で行われている遊びで、グループが1人ずつ1から数を数えるのだが、3の倍数の時は数字の代わりに「Fizz」を、5の倍数の時は同様に「Buzz」を、3と5の公倍数の時は「Fizz Buzz」というルールのもと、間違えたり言えなかったりした場合は脱落というものである。
詳細についてはFizz Buzz – 日本語版Wikipediaを参照のことである。
どういうコードを書けば良いのか
上記の通りのルールに従って、コードを書けば良いのだが、今回は1〜100の場合に従って行いたい。
今回はC言語とSwiftでコードを書いてみた。以下は極めて単純な回答例である。
回答例
C言語
C言語の場合は以下のようになる。
#include <stdio.h>
int main(void){
for(int i = 1; i <= 100; i++) {
if(i % 3 == 0 && i % 5 == 0) {
printf("Fizz Buzz\n");
}else if(i % 3 == 0) {
printf("Fizz\n");
}else if(i % 5 == 0) {
printf("Buzz\n");
}else{
printf("%d\n", i);
}
}
return 0;
}
Swift
Swiftの場合は以下のようになる。
for i in 1 ... 100 {
if(i % 3 == 0 && i % 5 == 0) {
print("Fizz Buzz")
}else if(i % 3 == 0) {
print("Fizz")
}else if(i % 5 == 0) {
print("Buzz")
}else{
print(i)
}
}
解説
上記のコードはいずれも1〜100にかけてループを行い(カウンタとしてiを使っている)、まず3との剰余が0でなおかつ5との剰余が0(つまりiが1以上と仮定して3と5の公倍数)なら「Fizz Buzz」を、3の倍数なら「Fizz」を、5の倍数なら「Buzz」を、いずれにも満たなかったら数字をそのまま出力するというものである。
ゲームのルールさえわかってしまえば、簡単に解けてしまうだろう。
実は答えは一つではない
上記の回答例はかなり単純な解法を使った。これ以外にも剰余を使わない方法、配列を使った方法、短いコードで済ませる方法など幾つか考えられる。機会があれば別の回答例としてあげてみたいが、ここでは割愛する。
最後に
今回のFizzBuzz問題は単純に答えるだけならプログラミングの基礎さえできればなんてことはない問題を挙げてみた。とはいえ、制限を加えていくと、途端に難しくなっていくという。
Fizz Buzz問題の別の解法を是非ともチャレンジしてみたいものである。
ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。主にスマートフォン向けアプリやウェブアプリの開発を携わっています。ご用の方はコメントかコンタクトフォームにて。