Solved project euler 2
[sandbox] / euler / elixir / 0002-sum-of-fibonacci.exs
1 defmodule SumOfEvenFibonacci do
2   def fibonacci_stream() do
3     items_with_prev = Stream.iterate({0,1}, fn({prev, curr}) -> {curr, prev + curr} end)
4     Stream.map(items_with_prev, fn({_, curr}) -> curr end)
5   end
6
7   def fibonacci_to(limit) do
8     Stream.take_while(fibonacci_stream(), fn(n) -> n < limit end)
9   end
10
11   def filter_even(stream) do
12     Stream.filter(stream, fn(n) -> rem(n, 2) == 0 end)
13   end
14
15   def even_fibonacci_to(limit) do
16     filter_even(fibonacci_to(limit))
17   end
18 end
19
20 IO.inspect(Enum.sum(SumOfEvenFibonacci.even_fibonacci_to(4_000_000)))