From e4e8007494dee9fdcd46d293d9164164fc26dece Mon Sep 17 00:00:00 2001 From: Linus Miller Date: Thu, 29 Mar 2018 11:17:20 +0200 Subject: [PATCH] Problem 18 --- 0018.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 0018.py diff --git a/0018.py b/0018.py new file mode 100644 index 0000000..ad6ab9b --- /dev/null +++ b/0018.py @@ -0,0 +1,55 @@ +target = 1074 + +triangle = [ + [ 75 ], + [ 95, 64 ], + [ 17, 47, 82 ], + [ 18, 35, 87, 10 ], + [ 20, 4, 82, 47, 65 ], + [ 19, 1, 23, 75, 3, 34 ], + [ 88, 2, 77, 73, 7, 63, 67 ], + [ 99, 65, 4, 28, 6, 16, 70, 92 ], + [ 41, 41, 26, 56, 83, 40, 80, 70, 33 ], + [ 41, 48, 72, 33, 47, 32, 37, 16, 94, 29 ], + [ 53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14 ], + [ 70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57 ], + [ 91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48 ], + [ 63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31 ], + [ 4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23 ], +] + +length = len(triangle) + +routes = 2 ** (length - 1) + +def get_bits (nbr): + rest = 0 + + result = [] + + for i in list(range(0, length - 1)): + value = 2 ** (length - 2 - i) + bit = nbr // value + nbr = nbr % value + result.append(bit) + + return result + +largest = 0 + +# for i in range(0, routes - 1): +for i in range(0, routes): + bits = get_bits(i) + + index = 0 + total = triangle[0][0] + + for j in range(0, length - 1): + index += bits[j] + total += triangle[j + 1][index] + + if (total > largest): + largest = total + +print(largest) +print(largest == target)