FizzBuzz
とても乗り遅れてるのはいつものことで、FizzBuzz 問題。
1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
ちゃんとしたプログラマであれば、これを実行するプログラムを2分とかからずに紙に書き出せるはずだ。怖い事実を聞きたい? コンピュータサイエンス学科卒業生の過半数にはそれができないのだ。自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。
後半はさすがに信用できない。僕でも何も参照せずに 5 分以内には書けた。
int i,j,k; 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);
学習中の awk でいろいろ試したらできたコマンドプロンプト版:
awk 'BEGIN{for($i=1;$i<=100;$i++)print($i%15?$i%3?$i%5?$i:"Buzz":"Fizz":"FizzBuzz")}'
で、この問題は各所でさまざまな言語 (というかそれを書く人) の競合になっていて、そっちの方がおもしろい。上の引用元の引用元とか (の引用元)。
特に元記事:
のコメントを上から読んでいて、#208登場の流れに不覚にも笑った。処理速度なら実はこれが一番なのでは? バイト数とかも含めたら Perl 最強か。