すがブロ

sugamasaoのhatenablogだよ

プログラム問題

この問題は

どうしてプログラマに・・・プログラムが書けないのか?
問題はこれだ。

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

そして現実

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

うまく書けるかどうか? という視点で2分以内に書け、といわれるとアレだけど、何のひねりも無くフツーに書けば2分くらいあればかけそうなものだけど……。
動作を確認してないけど書いてみた

for i in 0..100
  mod3 = i % 3
  mod5 = i % 5
  if (mod3 == 0 && mod5 == 0)
    puts "FizzBuzz"
  elsif (mod3 == 0)
    puts "Fizz"
  elsif (mod5 == 0)
    puts "Buzz"
  else
    puts i
  end
end

こんだけを紙に書こうとすると2分だと厳しいかもしれない。
ソースで2分以内なら書けそうな気がするが。。。(ただ、面接っていう場所でいきなり問題をだされたら頭がついていけないかもしれない)

ブクマコメントをみていて

おれのプログラムは、わざわざ変数に割ったあまりを書き出しているんだけど、そもそも「3と5両方の倍数の場合」を「15の倍数」と定義すれば演算結果を変数にいれるようなダサい真似はしなくて良さそうだ。
それに、さくっと書くなら if 〜 else よりも三項演算子、ね。。。
あと、きになったんだが、ブクマコメントで

FizzBuzz問題に剰余を使うような人は願い下げだ

と書いてあったけど、これってどういう意味だろう。わかりません!><