aboutsummaryrefslogtreecommitdiff
path: root/julia/014-longest_collatz_sequence.jl
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2021-06-22 20:54:23 +0200
committerCharles Cabergs <me@cacharle.xyz>2021-06-22 20:54:23 +0200
commit3c06b19032a0184c0b3ad1ea352becb5d60c9e6a (patch)
tree726d885ff3f06df69212314fb80b119f4472d125 /julia/014-longest_collatz_sequence.jl
parentcf02fe7a4c8c257e42f081f185ce0eb53293b040 (diff)
downloadproject_euler-3c06b19032a0184c0b3ad1ea352becb5d60c9e6a.tar.gz
project_euler-3c06b19032a0184c0b3ad1ea352becb5d60c9e6a.tar.bz2
project_euler-3c06b19032a0184c0b3ad1ea352becb5d60c9e6a.zip
problem 13 14 in julia
Diffstat (limited to 'julia/014-longest_collatz_sequence.jl')
-rw-r--r--julia/014-longest_collatz_sequence.jl24
1 files changed, 24 insertions, 0 deletions
diff --git a/julia/014-longest_collatz_sequence.jl b/julia/014-longest_collatz_sequence.jl
new file mode 100644
index 0000000..1edaf98
--- /dev/null
+++ b/julia/014-longest_collatz_sequence.jl
@@ -0,0 +1,24 @@
+###
+# Longest Collatz sequence
+# Problem 14
+#
+# The following iterative sequence is defined for the set of positive integers:
+# n → n/2 (n is even)n → 3n + 1 (n is odd)
+# Using the rule above and starting with 13, we generate the following sequence:
+# 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
+# It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms.
+# Although it has not been proved yet (Collatz Problem), it is thought that all starting
+# numbers finish at 1.
+# Which starting number, under one million, produces the longest chain?
+# NOTE: Once the chain starts the terms are allowed to go above one million.
+###
+
+function collatz_length(n)
+ n == 1 && return 1
+ n % 2 == 0 && return 1 + collatz_length(n ÷ 2)
+ return 1 + collatz_length(3n + 1)
+end
+
+result = argmax([collatz_length(x) for x in 1:(1_000_000 - 1)])
+
+println(result)