Fizz Buzz

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

Fizz Buzz(フィズ・バズ、Bizz BuzzBuzzとも呼ばれる)は英語圏で長距離ドライブ中や飲み会の時に行われる言葉遊びである。

遊び方[編集]

プレイヤーは円状に座る。最初のプレイヤーは「1」と数字を発言する。次のプレイヤーは直前のプレイヤーの次の数字を発言していく。ただし、3で割り切れる場合は「Fizz」(Bizz Buzzの場合は「Bizz」)、5で割り切れる場合は「Buzz」、両者で割り切れる場合(すなわち15で割り切れる場合)は「Fizz Buzz」(Bizz Buzzの場合は「Bizz Buzz」)を数の代わりに発言しなければならない。発言を間違えた者や、ためらった者は脱落となる。

ゲーム例[編集]

ゲームは、以下のとおりに発言が進行する。

  • 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, ...

FizzBuzz問題[編集]

このゲームをコンピュータ画面に表示させるプログラムとして作成させることで、コードが書けないプログラマ志願者を見分ける手法をJeff AtwoodがFizzBuzz問題 (FizzBuzz Question) として提唱した。その提唱はインターネットの様々な場所で議論の対象になっている。

また、実際に「制限時間2分以内」「剰余(%記号等)を用いない」「1行でできる限り短く(ワンライナー)」等の縛りでゲーム条件を満たすコード記述の腕試しをする者が続出した。以下はC言語による標準的な解答例である。なお、下記解答例の「i % 3 == 0 && i % 5 == 0」は「i % 15 == 0」と書いても良い。

#include <stdio.h>
int main(void) {
    int i;
    for (i = 1; i <= 100; i++) {
        if (i % 3 == 0 && i % 5 == 0) {
            printf("FizzBuzz\n");
        } else if (i % 3 == 0) {
            printf("Fizz\n");
        } else if (i % 5 == 0) {
            printf("Buzz\n");
        } else {
            printf("%d\n", i);
        }
    }
    return 0;
}

もう一つの標準的な解答例として、文字列の連結を利用することで、3の倍数かつ5の倍数(すなわち15の倍数)か否かの判定を無くしたものがある。なお、ブランクと文字列を連結して文字型配列に代入することは、単に文字列を文字型配列に代入(複写)することと同義であるため、下記解答例の「strcpy(str, "Fizz")」は「strcat(str, "Fizz")」と書いても良い。

#include <stdio.h>
#include <string.h>
int main(void) {
    int i;
    char str[9];
    for (i = 1; i <= 100; i++) {
        strcpy(str, "");
        if (i % 3 == 0) {
            strcpy(str, "Fizz");
        }
        if (i % 5 == 0) {
            strcat(str, "Buzz");
        }
        if (strcmp(str, "") == 0) {
            sprintf(str, "%d", i);
        }
        printf("%s\n", str);
    }
    return 0;
}

関連項目[編集]

「3の倍数と3のつく数のときだけアホになる」という、Fizz Buzzと同様の考えのギャグを行っている。
「パチパチ7」というコーナーで、Fizz Buzzを応用したゲームを行った。こちらは7の倍数と7のつく数のときだけ手を叩くルールであった。

外部リンク[編集]