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」と素直に書く(さらに言えば定数にするのがベターかと)のが正解かと思います。

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

投稿者: ♪ 日時: 2007年08月25日 01:05 このエントリーをはてなブックマークに追加 このエントリーをYahoo!ブックマークに登録 Save This Page to del.icio.us このエントリーをlivedoorクリップに追加 このエントリーをニフティクリップに追加 このエントリーをBuzzurlに追加このエントリーをBuzzurlに追加 このエントリーをBlogPeople Tagsに追加 このエントリーをBlogPeople Instant Bookmarkに追加 このエントリーをPingKingポッケに追加 このエントリーをFC2ブックマークへ追加 このエントリーをnewsingへ追加 Yahoo!ブックマークでこのサイトを登録している人数 人が登録

トラックバック

このエントリーのトラックバックURL:
http://magicbox.sakura.ne.jp/mt/mt-tb.cgi/446

このリストは、次のエントリーを参照しています: FizzBuzz問題:

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

FizzBuzz問題というプログラマ適性問題(?)が話題になっているらしい。 以 [詳しくはこちら]
トラックバック時刻: 2007年08月29日 21:17

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)