オイラープロジェクト

このところRubyを触っていなかったので、Project Eulerを少しやってみることにした。

Problem 1
10未満の自然数のうち、3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の
4つがあり、 これらの合計は 23 になる。

同じようにして、1,000 未満の 3 か 5 の倍数になっている数字の合計を求めよ。
(1...1000).select {|i| (i % 3) == 0 || (i % 5) == 0}.inject(:+) 
=> 233168

そういえば、ふとFizzBuzzを書いたことがないことに気づいた。

puts(
(1..100).map do |i|
  case
  when (i % 15) == 0 then
    "FizzBuzz"
  when (i % 3) == 0 then
    "Fizz"
  when (i % 5) == 0 then
    "Buzz"
  else
    i
  end
end)

なんか違う。「end)」とかありえないぐらいダサい気が。

そんなことより、これはなんだ。

>> (1...10).select {|i| (i % 3) == 0 || (i % 5) == 0}.inject(:+) 
=> 23
>> (1...100).select {|i| (i % 3) == 0 || (i % 5) == 0}.inject(:+) 
=> 2318
>> (1...1000).select {|i| (i % 3) == 0 || (i % 5) == 0}.inject(:+) 
=> 233168
>> (1...10000).select {|i| (i % 3) == 0 || (i % 5) == 0}.inject(:+) 
=> 23331668
>> (1...100000).select {|i| (i % 3) == 0 || (i % 5) == 0}.inject(:+) 
=> 2333316668
>> (1...1000000).select {|i| (i % 3) == 0 || (i % 5) == 0}.inject(:+) 
=> 233333166668
>> (1...10000000).select {|i| (i % 3) == 0 || (i % 5) == 0}.inject(:+) 
=> 23333331666668