FizzBuzz問題の回答を書いてみた
1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
どうしてプログラマに・・・プログラムが書けないのか?
はてなブックマークのコメントにみなさんソースコードを書かれているので、私もちょっと書いてみました。awk版はブックマークコメントに書きましたが、C版もblogに書いてみます。
昔アスキーに掲載されていた1行プログラムを思い出しましたよ。:)
/* * FizzBuzz */ main() { int i; #define IsPowerOf(v, p) (((v) % (p)) == 0) for (i = 1; i <= 100; i++) { if (IsPowerOf(i, 3) && IsPowerOf(i, 5)) printf("FizzBuzz\n"); else if (IsPowerOf(i, 3)) printf("Fizz\n"); else if (IsPowerOf(i, 5)) printf("Buzz\n"); else printf("%d\n", i); } }
ひねりも何もないですな。最初の判定はIsPowerOf(i, 3 * 5)の方がいいのかな?上手な人はもっとエレガントに書くんだろうね。
ちゃんとしたプログラマであれば、これを実行するプログラムを2分とかからずに紙に書き出せるはずだ。怖い事実を聞きたい? ?コンピュータサイエンス学科卒業生の過半数にはそれができないのだ。自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。
どうしてプログラマに・・・プログラムが書けないのか?
ありゃ。10分もかかっちゃったよ。つまんないところにこだわりすぎな気もする。まあちゃんとしたプログラマじゃないから、いいよね!?(笑)