2023-02-19 14:05:13 +01:00
|
|
|
#Problem 14: https://projecteuler.net/problem=14
|
|
|
|
|
|
|
|
#Problem Statement:
|
|
|
|
#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?
|
|
|
|
|
2023-02-21 18:41:48 +01:00
|
|
|
def solution()
|
2023-02-19 14:05:13 +01:00
|
|
|
index_best_result = 0
|
|
|
|
for num in 2..1000000
|
|
|
|
index_candidate = 0
|
|
|
|
n = num
|
|
|
|
while n > 1
|
|
|
|
if n%2 == 0
|
|
|
|
n = n / 2
|
|
|
|
else
|
|
|
|
n = (3*n) + 1
|
|
|
|
end
|
|
|
|
index_candidate +=1
|
|
|
|
end
|
|
|
|
if index_best_result < index_candidate
|
|
|
|
index_best_result = index_candidate
|
|
|
|
value = num
|
|
|
|
end
|
|
|
|
end
|
|
|
|
result = value
|
|
|
|
end
|
|
|
|
|
2023-02-21 18:41:48 +01:00
|
|
|
answer = solution()
|
2023-02-23 16:01:09 +01:00
|
|
|
p answer
|