Home > プログラミング > | 雑記 > FizzBuzz問題

FizzBuzz問題

使えないプログラマーさんのところで、面白い記事を見つけました。

使えないプログラマー: FizzBuzz問題

元ネタはこちら
どうしてプログラマに・・・プログラムが書けないのか?

以下、引用


かなりの試行錯誤の末に、コードを書こうともがいている人たちというのは、単に大きな問題に対して苦労しているのではないことがわかった。やや小さな問題(連結リストを実装するというような)に対して苦労するということでさえない。彼らはまったくちっぽけな問題に苦労しているのだ。

それで、そういった類の開発者を見分けるための質問を作り始め、私が「Fizz-Buzz問題」と呼んでいる問題のクラスを考え出した。これはイギリスの学校の子供たちがよくやっている遊び(というかやらされている遊び)にちなんで名付けた。Fizz-Buzz問題の例はこんな感じだ。

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

ちゃんとしたプログラマであれば、これを実行するプログラムを2分とかからずに紙に書き出せるはずだ。怖い事実を聞きたい? コンピュータサイエンス学科卒業生の過半数にはそれができないのだ。自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。

すぐ思いついたので、C#で書いてみた。


using System;
using System.Collections.Generic;
using System.Text;

namespace FizzBuzz
{
class Program
{
static void Main(string[] args)
{
// 3の倍数のときのメッセージ
const string MultipleOfThree = "Fizz";

// 5の倍数のときのメッセージ
const string MultipleOfFive = "Buzz";

StringBuilder message = new StringBuilder();
for (int i = 1; i <= 100; i++)
{
if (i % 3 == 0)
{
message.Append(MultipleOfThree);
}
if (i % 5 == 0)
{
message.Append(MultipleOfFive);
}
if (i % 3 != 0 && i % 5 != 0)
{
message.Append(i);
}
message.AppendLine("");
}

Console.Write(message.ToString());
}
}
}

改めて見てみると、3と5両方の倍数の場合の表示方法はちょっとまずいのかもしれないと思えてきた。
このケースでは結果的に問題は無いのだが、仕様変更して「HogeMoge」にしろと言われたらロジックが変わってしまうからです。
使えないプログラマーさんのところで書かれているように、「FizzBuzz」と素直に書く(さらに言えば定数にするのがベターかと)のが正解かと思います。

みなさんの作ったコードはいかがでしょうか。

Comments:0

Comment Form

Trackbacks:1

TrackBack URL for this entry
http://magicbox.sakura.ne.jp/mt/mt-tb.cgi/446
Listed below are links to weblogs that reference
FizzBuzz問題 from LibertyBoy
FizzBuzz問題 from 使えないプログラマー 2007-08-29 (水) 21:17
FizzBuzz問題というプログラマ適性問題(?)が話題になっているらしい。 以

Home > プログラミング > | 雑記 > FizzBuzz問題

Search
Feeds
Tag Cloud
Recommend

SQLパズル 第2版 プログラミングが変わる書き方/考え方
SQLパズル 第2版 プログラミングが変わる書き方/考え方

ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系
ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系

ITアーキテクト vol.1
ITアーキテクト vol.1

オブジェクト指向における再利用のためのデザインパターン
オブジェクト指向における再利用のためのデザインパターン

アンチパターン―ソフトウェア危篤患者の救出
アンチパターン―ソフトウェア危篤患者の救出

おら!オラ!オラクル
おら!オラ!オラクル

プログラマの数学
プログラマの数学

スタイルシート スタンダード・デザインガイド―SEO/ユーザビリティ/アクセシビリティを考慮した実践的HTML&CSSデザイン術
スタイルシート スタンダード・デザインガイド―SEO/ユーザビリティ/アクセシビリティを考慮した実践的HTML&CSSデザイン術

セオリー・オブ・スタイルシート
セオリー・オブ・スタイルシート

テクニカルセキュリティ技術
テクニカルセキュリティ技術

まってる。
まってる。

Return to page top