-
Notifications
You must be signed in to change notification settings - Fork 0
/
day20.py
33 lines (27 loc) · 894 Bytes
/
day20.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from pathlib import Path
xs = [int(line) for line in Path("input20.txt").read_text().splitlines()]
def decrypt(cs: list[int]):
n = len(cs)
ret = [(c, False) for c in cs]
count = 0
while count < n:
for i in range(n):
c, visited = ret[i]
if not visited:
if c == 0:
ret[i] = (c, True)
count += 1
break
target = (i + c) % (n - 1)
ret.pop(i)
if target == 0: # wrap arround
ret.append((c, True))
else:
ret.insert(target, (c, True))
count += 1
break
return [x for x, _ in ret]
plain = decrypt(xs)
i = plain.index(0)
coord_sum = sum([plain[(i + offset) % len(plain)] for offset in (1000, 2000, 3000)])
print(f"Part1: {coord_sum}")