初心者も上級者も。FizzBuzz問題について考えてみよう | SiTest (サイテスト) ブログ

メニューボタン閉じるボタン

初心者も上級者も。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について取り上げさせていただきました。
プログラミングを始めた頃はどうやって解こうか頭を抱え、プログラミングに慣れてきた頃にはどうやって書こうかとなやんだのではないでしょうか?
比較的基礎的な問題ですが、調べてみると思わぬユニークな書き方も存在したりします。
最近書いていなかった方は久しぶりに書いてみてはどうでしょう?
思わぬ発見があるかもしれません。

今すぐお気軽に
ご相談ください。

0120-315-465

(平日 10:00~19:00)

今すぐお気軽に
ご相談ください。

0120-315-465

(平日 10:00~19:00)

グラッドキューブは
「ISMS認証」を取得しています。

認証範囲:
インターネットマーケティング支援事業、インターネットASPサービスの提供、コンテンツメディア事業

「ISMS認証」とは、財団法人・日本情報処理開発協会が定めた企業の情報情報セキュリティマネジメントシステムの評価制度です。

いますぐ無料で
お試しください。

SiTest の革新的な機能を
お試しいただけます。
利用規約

お名前【必須】
メールアドレス【必須】
電話番号【必須】