Created
September 25, 2013 02:35
-
-
Save tinomen/6694488 to your computer and use it in GitHub Desktop.
positive Fibonacci sum
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
justinlyman
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
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
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 }
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