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)
|
||||
Reference in New Issue
Block a user