Files
python-aoc-2020/day23/part2.py
Sebastian Seedorf 1e78940455 Day 23
2020-12-30 10:35:08 +01:00

53 lines
1.0 KiB
Python

#!/usr/bin/env python3
from tqdm import tqdm
class Node:
value = None
next = None
def __init__(self, value, next):
self.value = value
self.next = next
num = [list(map(int, (char for char in x.strip()))) for x in open("input.txt")][0]
num = num + list(range(len(num)+1, 1000000+1))
MAX = len(num)
nodes = dict()
nodes[num[-1]] = curr = last = Node(num[-1], None)
for n in num[-2::-1]:
nodes[n] = curr = Node(n, curr)
last.next = curr
for _ in tqdm(range(10000000)):
pickups = []
lp = curr
for j in range(3):
lp = lp.next
pickups.append(lp.value)
ap = lp.next
destination = curr.value
while True:
destination -= 1
if destination == 0:
destination = MAX
if destination not in pickups:
break
dst = nodes[destination]
lp.next = dst.next
dst.next = curr.next
curr.next = ap
curr = curr.next
while curr.value != 1:
curr = curr.next
curr = curr.next
res = curr.value
curr = curr.next
res *= curr.value
print(res)