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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#!/usr/bin/env python3
# import numpy as np
from functools import reduce
from re import findall
from copy import deepcopy
import sys
# filename = "in/day20.ref"
filename = "in/day20.pzl"
data = open(filename).read()
lines = [line for line in data.rstrip('\n').split('\n')]
A = list()
for oi,line in enumerate(lines):
A.append( (oi, int(line.strip())) )
# print(A)
def solve(part, A):
L = len(A)
key = 811589153
if part == 2:
for ci, (oi,mov) in enumerate(A):
A[ci] = oi, key*mov
for _ in range(1 if part == 1 else 10):
for ois in range(L):
for ci,(oi,mov) in enumerate(A):
if ois == oi:
break
# print('moving index:', ci, 'for:', mov)
v = A.pop(ci)
ni = (ci + mov) % (L-1)
A.insert(ni, v)
# print(list(map(lambda x: x[1], A)))
# print(list(map(lambda x: x[1], A)))
iz = None
for ci,(oi,mov) in enumerate(A):
if mov == 0:
iz = ci
res = 0
res += A[(iz+1000) % L][1]
res += A[(iz+2000) % L][1]
res += A[(iz+3000) % L][1]
return res
print('res1:', solve(1, A.copy()))
print('res2:', solve(2, A.copy()))
|