project-euler/0018.py
2018-03-29 11:17:20 +02:00

56 lines
1.2 KiB
Python

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)