msgbartop
Code Musings and Such
msgbarbottom

07 Jan 09 Project Euler: Problem 1 in Ruby

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.

Problem #1

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 }."
Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

Tags: ,

Reader's Comments

  1. |

    [...] 1 – Ruby solution Add all the natural numbers below one thousand that are multiples of 3 or [...]

Leave a Comment