Skip to content

Instantly share code, notes, and snippets.

@tinomen
Created September 25, 2013 02:35
Show Gist options
  • Save tinomen/6694488 to your computer and use it in GitHub Desktop.
Save tinomen/6694488 to your computer and use it in GitHub Desktop.
positive Fibonacci sum
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, ...
By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
@scizo
Copy link

scizo commented Sep 25, 2013

previous, current = 1, 2
sum = 0

while current <= 4_000_000
  sum += current if current.even?
  previous, current = current, previous + current
end

puts sum

@rickarubio
Copy link

fib_array = [1, 2]
current_num = 2
previous_num = 1
MAX_VALUE = 4_000_000

while fib_array.last.to_i < MAX_VALUE
  fib_array << (current_num + previous_num)
  previous_num = current_num
  current_num = fib_array.last
end
fib_array.pop if fib_array.last.to_i >= MAX_VALUE

# We now have good data to work with
answer = 0
fib_array.each do |i|
  answer += i if i % 2 == 0
end
# sum of all even fibonacci #s in the sequence from 1 to 4 mil
puts answer

@aemadrid
Copy link

Took Jake's code and made it easier to understand

terms = [1, 2]
even_numbers = [terms.last]
ceiling = 4_000_000

begin
  next_t = terms.inject(0) { |t, x| t + x }
  terms = [terms.last, next_t]
  if terms.last < ceiling && terms.last.even?
    even_numbers << terms.last
  end
end while terms.last < ceiling

puts even_numbers.inject(0) { |t, x| t + x }

@scizo
Copy link

scizo commented Sep 25, 2013

def fibs
  Enumerator.new do |y|
    a, b = 0, 1
    loop do
      y << a
      a, b = b, a + b
    end
  end
end

puts fibs.take_while{|n| n <= 4E6}.select(&:even?).reduce(:+)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment