I’ve been working through some of the Project Euler problems in Ruby and I thought I’d post my solutions. I refuse to “cheat”, but it’s really neat to see all the different ways other people solve the problems afterwards.
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.
total = 0
1000.times do |i|
if i % 3 == 0 || i % 5 == 0
total += i
end
end
puts total
I googled around a bit after I finished and particularly liked this solution, which seemed more ruby-ish to me:
answer = (0..999).select { |a| a%3 ==0 || a%5==0 }
puts answer.inject { |sum, n| sum+n }
And, from the forums I thought Olathe’s solution was really neat, although mathily over my head:
class Integer
def sum_mod modulus
n = self.div modulus
modulus * n * (n + 1) / 2
end
end
num = 999
sum = num.sum_mod(3) + num.sum_mod(5) - num.sum_mod(15)
puts "Sum is #{ sum }."