FizzBuzz問題とはこれ。
1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
Step1
vi fizzbuzz.rbして以下を記述する。100.eachはさすがに通らなかった。iだけだと0から99表示になるのでi+1する。
100.times do |i| puts i+1 end
ruby fizzbuzz.rbを実行すると1〜99が表示される。
完成した。
#vi fizzbuzz.rb 100.times do |i| i += 1 if i % 3 == 0 and i % 5 == 0 puts "FizzBuzz" elsif i % 3 == 0 puts "Fizz" elsif i % 5 == 0 puts "Buzz" else puts i end end
が、仕様は満たしているが気に入らない。重複が多い。putsが何回も出てくるしi+=1とかダサい…。@ikmさんにしたがってちょっと直した。次はif文をどうにかしたいね。
#vi fizzbuzz.rb 1.upto 100 do |i| t = "" if i % 3 == 0 and i % 5 == 0 t += "FizzBuzz\n" elsif i % 3 == 0 t += "Fizz\n" elsif i % 5 == 0 t += "Buzz\n" else t += "#{i}\n" end puts t end
1.upto(100) do |i| でもいけますよー。