オイラープロジェクト
このところ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