Solution to problem 14 in Julia
This commit is contained in:
parent
85f961debb
commit
907a73b0be
68
src/Julia/Problem014.jl
Normal file
68
src/Julia/Problem014.jl
Normal file
@ -0,0 +1,68 @@
|
||||
#=
|
||||
Created on 24 Jul 2021
|
||||
|
||||
@author: David Doblas Jiménez
|
||||
@email: daviddoji@pm.me
|
||||
|
||||
Solution for Problem 14 of Project Euler
|
||||
https://projecteuler.net/problem=14
|
||||
=#
|
||||
|
||||
function chain_length(n, terms)
|
||||
length = 0
|
||||
while n != 1
|
||||
if haskey(terms, n)
|
||||
length += terms[n]
|
||||
break
|
||||
end
|
||||
if n % 2 == 0
|
||||
n = n / 2
|
||||
else
|
||||
n = 3n + 1
|
||||
end
|
||||
length += 1
|
||||
end
|
||||
return length
|
||||
end
|
||||
|
||||
function Problem14()
|
||||
#=
|
||||
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.
|
||||
=#
|
||||
|
||||
ans = 0
|
||||
limit = 1_000_000
|
||||
score = 0
|
||||
terms = Dict()
|
||||
for i in 1:limit
|
||||
terms[i] = chain_length(i, terms)
|
||||
if terms[i] > score
|
||||
score = terms[i]
|
||||
ans = i
|
||||
end
|
||||
end
|
||||
return ans
|
||||
end
|
||||
|
||||
|
||||
println("Time to evaluate Problem 14:")
|
||||
@time Problem14()
|
||||
println("")
|
||||
println("Result for Problem 14: ", Problem14())
|
Loading…
x
Reference in New Issue
Block a user