Fizz Buzz問題というのを見て

まぁ試したわけです。


あまり文句を言っても切ないだけなので、概要だけ。

どうしてプログラマに・・・プログラムが書けないのか?


必要なのはこの部分。

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


これができない自称プログラマがいるとの記事です。



プログラマーでなくても全体の流れは分かりますよね。
1から100まで順に増やしていって、3で割ってあまりが0ならFizz、5で割ってあまりが0ならBuzz
3も5もどちらも真ならばFizz Buzz、どちらにも属さなければ数字をそのまま表示すれば良いわけですよ。


上の文章を素直にコーディングすれば、まぁこんな感じ?

    For i = 1 To 100
        If (i Mod 3 = 0) And (i Mod 5 = 0) Then
            System.Console.WriteLine("Fizz Buzz")
        ElseIf (i Mod 3 = 0) Then
            System.Console.WriteLine("Fizz")
        ElseIf (i Mod 5 = 0) Then
            System.Console.WriteLine("Buzz")
        Else
            System.Console.WriteLine(i.ToString)
        End If
    Next

はい、VBプギャーm9ですねw


でも、これさえもができない自称"プログラムできます"な方が大学を出ていると思うと…
まぁこれ以上文句を言うのもやめる。この記事の信憑性の確認もできないしね。


まぁ、あれだ。このコードのコーディング時間より、ブログを書く時間のほうが長いのは秘密だ!!w




追記:どことなく思いついた。
FizzBuzzのときにFizzBazzをまとめた文字列として書く必要のないことに気がついた。
今度はRUBY

(1..100).each{|i|
	print "Fizz" if i%3 == 0
	print "Buzz" if i%5 == 0
	print "#{i}" if (i%3)*(i%5) != 0 
	puts
}


FizzBuzzのときはどちらにも当てはまる場合と考えれば、両方を改行せずに出してやればいいわけで。
んで、どちらにも当てはまらない場合のみ、即ち3と5それぞれの剰余の積が0でなかった場合に数字を出すわけですね。(ここちょっと気持ちいいw)


これくらいなら思いつく人はたくさんいるんだろうけれど。
もっとスマートにできるかなー