Tue02Feb

  1. Project Euler in Ruby: Problem #2

    Problem

    Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

    1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …

    Find the sum of all the even-valued terms in the sequence which do not exceed four million.

    Solution

    class Fibonacci
      class << self
        def upto(max_number)
          # Initial terms
          fib = [1,2]
          loop do
            # Calculate next term
            t = fib[-1] + fib[-2]
            # If next term is less than max_number, append to array and repeat, else break loop
            t < max_number ? fib << t : break
          end
          fib
        end
      end
    end
    
    # Add even terms together
    puts Fibonacci.upto(4_000_000).select { |i| i % 2 == 0 }.reduce :+

    Returns: 4613732