Files
aocpy/2020/d23.py
2024-10-06 18:50:29 -04:00

74 lines
1.2 KiB
Python

from lib import get_data
data = get_data(__file__)
cups = list(map(int, list(data.strip())))
min_label = min(cups)
max_label = max(cups)
cmap = {}
for i in range(len(cups)):
cmap[cups[i]] = cups[(i + 1) % len(cups)]
cc = cups[0]
for _ in range(100):
a = cmap[cc]
b = cmap[a]
c = cmap[b]
cmap[cc] = cmap[c]
dest = cc - 1
while dest in {a, b, c} or dest < min_label:
dest = dest - 1
if dest < min_label:
dest = max_label
cmap[c] = cmap[dest]
cmap[dest] = a
cc = cmap[cc]
s = ""
cup = cmap[1]
while cup != 1:
s += str(cup)
cup = cmap[cup]
print(s)
cups = list(map(int, list(data.strip())))
current = max(cups) + 1
while len(cups) != 1_000_000:
cups.append(current)
current += 1
min_label = min(cups)
max_label = max(cups)
cmap = {}
for i in range(len(cups)):
cmap[cups[i]] = cups[(i + 1) % len(cups)]
cc = cups[0]
for _ in range(10_000_000):
a = cmap[cc]
b = cmap[a]
c = cmap[b]
cmap[cc] = cmap[c]
dest = cc - 1
while dest in {a, b, c} or dest < min_label:
dest = dest - 1
if dest < min_label:
dest = max_label
cmap[c] = cmap[dest]
cmap[dest] = a
cc = cmap[cc]
a = cmap[1]
b = cmap[a]
print(a * b)