Solves problem 14.

Prepares problem 12
This commit is contained in:
Julien Lengrand-Lambert
2012-01-16 10:47:26 +01:00
parent 7a5644a847
commit 317cf09e71
2 changed files with 35 additions and 1 deletions

36
e_14.py
View File

@@ -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))