From 73d0d4ff36f70921ff90de45bf84bada3991879d Mon Sep 17 00:00:00 2001 From: Philippe Zwietering Date: Sun, 5 Apr 2020 15:36:53 +0200 Subject: [PATCH] Found the longest Collatz chain: 837799 --- 14/main.py | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 14/main.py diff --git a/14/main.py b/14/main.py new file mode 100644 index 0000000..61aed30 --- /dev/null +++ b/14/main.py @@ -0,0 +1,64 @@ +import os +import math +import numpy as np + + +# Given the following sequence, find the longest chain that ends with 1 and starts with some number under a million + +# n -> n/2 | n is even +# n -> 3n + 1 | n is odd + +def next(n): + if n % 2 == 0: + return int(n/2) + else: + return (3*n + 1) + +def sequence(n): + res = [n] + + while res[-1] != 1: + res.append(next(res[-1])) + + return res + + +def getLongestSequence(n): + seqLengths = [0] * n + seqLengths[0] = 1 + + for x in range(1, n): + i = x + 1 + l = 1 + + while True: + if i == 1: + break + elif i < n + 1 and seqLengths[i - 1] > 0: + l = l + seqLengths[i - 1] - 1 + break + else: + l = l + 1 + i = next(i) + + seqLengths[x] = l + print(x + 1, l) + + return seqLengths + + +def main(): + print("Hello, this is Patrick") + + t = getLongestSequence(1000000) + + m = t[0] + j = 0 + for i in range(len(t)): + if t[i] > m: + m = t[i] + j = i + print("Max", j + 1, m) + +if __name__ == "__main__": + main() \ No newline at end of file