AdventOfCode/2017/24/test2.py

37 lines
1.2 KiB
Python
Raw Normal View History

2024-12-01 23:24:40 +01:00
import time
def solve(blocks):
new_bridges = [[block] for block in blocks if 0 in block]
strongest = 0
longest_strength = 0
while new_bridges:
bridges = new_bridges
new_bridges = []
for bridge in bridges:
new_bridges.extend(list(extend(bridge, blocks)))
if new_bridges:
longest_strength = max(bridge_strength(bridge) for bridge in new_bridges)
strongest = max(strongest, longest_strength)
return strongest, longest_strength
def bridge_strength(bridge):
return sum(map(sum, bridge))
def extend(bridge, blocks):
unused = list(filter(lambda b: b not in bridge and b[::-1] not in bridge, blocks))
for block in unused:
if bridge[-1][1] == block[0]:
yield bridge + [block]
elif bridge[-1][1] == block[1]:
yield bridge + [block[::-1]]
if __name__ == '__main__':
start = time.time()
block_list = []
with open('input') as f:
for line in f:
block_list.append(tuple(map(int, line.split('/'))))
block_list = [(a, b) if a < b else (b, a) for a, b in block_list]
print('Part 1: {}\nPart 2: {}'.format(*solve(block_list)))
print(f'Solved in {time.time() - start}')