初心者も上級者も。FizzBuzz問題について考えてみよう
皆さんはFizzBuzzというゲームをご存知ですか?
プログラマなら大抵のかたは聞いたことがあるかと思いますが元は単純なパーティゲームで
– 2人以上のプレイヤーが1から順番に数字を発言していく
– 3で割り切れるときは「Fizz」を発言
– 5で割り切れるときは「Buzz」を発言
– 両方で割り切れるときは「FizzBuzz」を発言
– 間違えた人から脱落
細かな違いはあるでしょうが大体上記のようなルールのゲームです。
FizzBuzzとは?
このFizzBuzzをプログラムとして画面に出力するコードを書くことが
FizzBuzzとはプログラマがプログラムを書くことができるか調べるクイズのようなものです。
当然ながらどのプログラム言語を選んでも解くことはできるのでプログラムの勉強を始めた方は一度解いてみてください。
下記のような出力が得られたら正解です。
1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz Buzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz, Buzz, 26, Fizz, 28, 29, Fizz Buzz, 31, 32, Fizz, 34, Buzz, Fizz, ...
解き方
割り切れる場合を求めるので剰余演算子が使えればあとはループ処理の書き方だけですが、
– 剰余演算子を使用せずに書く
– 再帰呼び出しを用いる
– 配列を準備しそれらにmap関数を用いる
など人によって書き方は様々です。
そのほか各言語毎に最小コードもあり、読んでみると(ものすごく読みにくいですが)コードを短縮する工夫が見られます。
解答例
JavaScriptでの解答例を記載してみます。
条件分岐とforにより繰り返し処理で作られています。
for (var i = 1; i <= 100; i++) {
if (i % 3 == 0 && i % 5 == 0)
console.log("Fizz,Buzz");
else if (i % 3 == 0)
console.log("Fizz");
else if (i % 5 == 0)
console.log("Buzz");
else // iが3の倍数でも5の倍数でもない
console.log(i);
}
多分個人的には一番単純なコードだと思います。
テクニカルな書き方をする人は関数の再帰呼び出しや文字列結合をうまくつかったり三項演算子で条件を分けたりするようです。
最後に弊社グラッドキューブ内でよく使われるlivescriptでの最小コードを記載している記事を見つけたので引用させていただきます。
[1 to 100]map ->[k+\zz for k,v of{Fi:3,Bu:5,Ba:7}|it%v<1]*''||it
64文字だそうです。
普段からlivescriptを書いている我々もよくわからないコードが出てきました。
個人的な意見ですが、再帰呼び出しを用いて書く書き方がそこそこかっこよくて読みやすいかと思います。
function fizzbuzz(n) {
if (n > 1)
fizzbuzz(n-1);
if (n % 3 == 0 && n % 5 == 0)
console.log("Fizz,Buzz");
else if (n % 3 == 0)
console.log("Fizz");
else if (n % 5 == 0)
console.log("Buzz");
else
console.log(n);
}
fizzbuzz(100);
まとめ
今回は最もメジャーなプログラミング問題であるFizzBuzzについて取り上げさせていただきました。
プログラミングを始めた頃はどうやって解こうか頭を抱え、プログラミングに慣れてきた頃にはどうやって書こうかとなやんだのではないでしょうか?
比較的基礎的な問題ですが、調べてみると思わぬユニークな書き方も存在したりします。
最近書いていなかった方は久しぶりに書いてみてはどうでしょう?
思わぬ発見があるかもしれません。
-
お問い合わせ
SiTest の導入検討や
他社ツールとの違い・比較について
弊社のプロフェッショナルが
喜んでサポートいたします。 -
コンサルティング
ヒートマップの活用、ABテストの実施や
フォームの改善でお困りの方は、
弊社のプロフェッショナルが
コンサルティングいたします。
今すぐお気軽にご相談ください。
今すぐお気軽に
ご相談ください。
(平日 10:00~19:00)
今すぐお気軽に
ご相談ください。
0120-315-465
(平日 10:00~19:00)
グラッドキューブは
「ISMS認証」を取得しています。
認証範囲:
インターネットマーケティング支援事業、インターネットASPサービスの提供、コンテンツメディア事業
「ISMS認証」とは、財団法人・日本情報処理開発協会が定めた企業の情報情報セキュリティマネジメントシステムの評価制度です。