読者です 読者をやめる 読者になる 読者になる

FizzBuzz

なんとなくFizzBuzz問題がやりたくなったからやってみるよ!

世の中ではFizzBuzzができるだけで就職うはうはらしいね!

まずふつうにごりっと、

1.upto 100 {|n| 
  if n % 15 == 0
    puts "FizzBuzz"
  elsif n % 3 == 0
    puts "Fizz"
  elsif n % 5 == 0
    puts "Buzz"
  else
    puts n
  end
}

なんかいまいち。putsって何回も書いてるのがよくないよね
出力をループの外にだしてみる

t = ""
1.upto(100){|n| 
  if n % 15 == 0
    t << "FizzBuzz"
  elsif n % 3 == 0
    t << "Fizz"
  elsif n % 5 == 0
    t << "Buzz"
  else
    t << n.to_s
  end
  t << "\n"
}
print t


……なんか余計にひどくなってる気がするね!
メソッドを使って分割してみよう

def fizzbuzz n
  return "FizzBuzz" if n % 15 == 0
  return "Fizz" if n % 3 == 0
  return "Buzz" if n % 5 == 0
  return n.to_s
end

1.upto(100){|n| 
  puts fizzbuzz(n)
}

だいぶきれいになったね!ちょっと関数型っぽい
でもRubyっぽさはかけらもないなあ

Rubyっぽいっていうとイテレータイテレータで……そうだ!mapをつかえばいいんだ!

a = (1..100).map{|n| 
  if n % 15 == 0
    "FizzBuzz"
  elsif n % 3 == 0
    "Fizz"
  elsif n % 5 == 0
    "Buzz"
  else
     n
  end
}

print a.join("\n")


うん、これが一番きれいだね!