#!/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()))