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 最強か。