Solve 2020 day 23
This commit is contained in:
73
2020/d23.py
Normal file
73
2020/d23.py
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
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)
|
||||||
@@ -161,8 +161,9 @@ Solutions and utility script for Advent of Code challenges in Python.
|
|||||||
- Day 20: 95:00 (Lot's of code)
|
- Day 20: 95:00 (Lot's of code)
|
||||||
- Day 21: 23:02 (Simply to slow)
|
- Day 21: 23:02 (Simply to slow)
|
||||||
- Day 22: 45:49 (Simple and too slow)
|
- Day 22: 45:49 (Simple and too slow)
|
||||||
- Day 23:
|
- Day 23: 105:00 (Sad)
|
||||||
- Day 24:
|
- Day 24:
|
||||||
|
- Day 25:
|
||||||
|
|
||||||
## AoC 2022
|
## AoC 2022
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user