aboutsummaryrefslogtreecommitdiff
path: root/julia/002-even_fibonacci_numbers.jl
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2021-06-18 19:17:56 +0200
committerCharles Cabergs <me@cacharle.xyz>2021-06-18 19:17:56 +0200
commit815fbb2a697a060411f19f70ecdaa5c775b430cb (patch)
treef046efba82674917538f368f365fa4ebb6a304e0 /julia/002-even_fibonacci_numbers.jl
parent3c4d885ba7fd25731c030813888b6e3285ed7c2a (diff)
downloadproject_euler-815fbb2a697a060411f19f70ecdaa5c775b430cb.tar.gz
project_euler-815fbb2a697a060411f19f70ecdaa5c775b430cb.tar.bz2
project_euler-815fbb2a697a060411f19f70ecdaa5c775b430cb.zip
problem 1 2 in julia
Diffstat (limited to 'julia/002-even_fibonacci_numbers.jl')
-rw-r--r--julia/002-even_fibonacci_numbers.jl40
1 files changed, 40 insertions, 0 deletions
diff --git a/julia/002-even_fibonacci_numbers.jl b/julia/002-even_fibonacci_numbers.jl
new file mode 100644
index 0000000..052d20d
--- /dev/null
+++ b/julia/002-even_fibonacci_numbers.jl
@@ -0,0 +1,40 @@
+###
+# Even Fibonacci numbers
+# Problem 2
+#
+# 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.
+###
+
+using Base.Iterators
+
+cache = Dict()
+function fib(n)
+ if haskey(cache, n)
+ return cache[n]
+ end
+ if n < 3
+ return n
+ end
+ cache[n] = fib(n - 1) + fib(n - 2)
+ return cache[n]
+end
+
+# https://stackoverflow.com/questions/56137634/function-chaining-in-julia
+# need curried functions
+# ( (fib(n) for n in 1:1_000_000)
+# |> takewhile(<(4_000_000))
+# )
+
+println(sum(
+ Iterators.filter(
+ x -> x % 2 == 0,
+ takewhile(
+ <(4_000_000),
+ fib(n) for n in 1:1_000_000
+ )
+ )
+))