diff options
| author | nekineki <nekineki@nekineki.net> | 2022-12-20 08:02:00 +0100 |
|---|---|---|
| committer | nekineki <nekineki@nekineki.net> | 2022-12-20 08:02:50 +0100 |
| commit | 7c1e124ce26f4a452827e9f2ecaf5a3271aa649b (patch) | |
| tree | 1b99817ab19393b41ec0a6a3db439913a33a3203 /2022/day20.py | |
| parent | c27d4e089c7dd2e6c1561c3781634ba5215f71d8 (diff) | |
day20
Diffstat (limited to '2022/day20.py')
| -rwxr-xr-x | 2022/day20.py | 51 |
1 files changed, 51 insertions, 0 deletions
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())) + |
