summaryrefslogtreecommitdiff
path: root/2022/day20.py
blob: 2680e76acd0286d3e8b48d21415633f78e4b468a (plain)
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()))