mirror of
https://github.com/jlengrand/project_euler.git
synced 2026-03-10 08:41:20 +00:00
Solves problem 14.
Prepares problem 12
This commit is contained in:
36
e_14.py
36
e_14.py
@@ -27,8 +27,42 @@ def longest_chain(max_value):
|
|||||||
Returns the starting number under max_value that produces the longest
|
Returns the starting number under max_value that produces the longest
|
||||||
chain given the sequence.
|
chain given the sequence.
|
||||||
"""
|
"""
|
||||||
|
max_len = 1
|
||||||
|
seed = 1
|
||||||
|
for val in range(1, max_value + 1):
|
||||||
|
curr_len = seq_len(val)
|
||||||
|
if curr_len > max_len:
|
||||||
|
max_len = curr_len
|
||||||
|
seed = val
|
||||||
|
|
||||||
return 1
|
return seed
|
||||||
|
|
||||||
|
def seq_len(value):
|
||||||
|
"""
|
||||||
|
Returns the sequence length for a given value
|
||||||
|
"""
|
||||||
|
val = value
|
||||||
|
seq = [val]
|
||||||
|
|
||||||
|
while val != 1:
|
||||||
|
val = sequence(val)
|
||||||
|
seq.append(val)
|
||||||
|
return len(seq)
|
||||||
|
|
||||||
|
def is_even(value):
|
||||||
|
"""
|
||||||
|
Returns true if the given value is even, false otherwise
|
||||||
|
"""
|
||||||
|
return (value % 2 == 0)
|
||||||
|
|
||||||
|
def sequence(value):
|
||||||
|
"""
|
||||||
|
Returns value / 2 if value is even, 3 * n + 1 otherwise.
|
||||||
|
"""
|
||||||
|
if is_even(value):
|
||||||
|
return value / 2
|
||||||
|
else:
|
||||||
|
return 3 * value + 1
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print "Answer : %d" % (longest_chain(1000000))
|
print "Answer : %d" % (longest_chain(1000000))
|
||||||
|
|||||||
Reference in New Issue
Block a user