From 7c1e124ce26f4a452827e9f2ecaf5a3271aa649b Mon Sep 17 00:00:00 2001 From: nekineki Date: Tue, 20 Dec 2022 08:02:00 +0100 Subject: day20 --- 2022/day20.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100755 2022/day20.py (limited to '2022/day20.py') diff --git a/2022/day20.py b/2022/day20.py new file mode 100755 index 0000000..2680e76 --- /dev/null +++ b/2022/day20.py @@ -0,0 +1,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())) + -- cgit v1.2.3