Solution to problem 14
This commit is contained in:
63
src/Python/Problem014.py
Normal file
63
src/Python/Problem014.py
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Created on 7 Jan 2018
|
||||||
|
|
||||||
|
@author: David Doblas Jiménez
|
||||||
|
@email: daviddoji@pm.me
|
||||||
|
|
||||||
|
Solution for problem 14 of Project Euler
|
||||||
|
https://projecteuler.net/problem=14
|
||||||
|
"""
|
||||||
|
|
||||||
|
from utils import timeit
|
||||||
|
|
||||||
|
def chain_length(n, terms):
|
||||||
|
length = 0
|
||||||
|
while n != 1:
|
||||||
|
if n in terms:
|
||||||
|
length += terms[n]
|
||||||
|
break
|
||||||
|
if n % 2 == 0:
|
||||||
|
n = n / 2
|
||||||
|
else:
|
||||||
|
n = 3 * n + 1
|
||||||
|
length += 1
|
||||||
|
return length
|
||||||
|
|
||||||
|
@timeit("Problem 14")
|
||||||
|
def compute():
|
||||||
|
"""
|
||||||
|
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 range(1, limit):
|
||||||
|
terms[i] = chain_length(i, terms)
|
||||||
|
if terms[i] > score:
|
||||||
|
score = terms[i]
|
||||||
|
ans = i
|
||||||
|
return ans
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
|
||||||
|
print(f"Result for Problem 14: {compute()}")
|
||||||
Reference in New Issue
Block a user