summaryrefslogtreecommitdiff
path: root/2022/day20.py
diff options
context:
space:
mode:
authornekineki <nekineki@nekineki.net>2022-12-20 08:02:00 +0100
committernekineki <nekineki@nekineki.net>2022-12-20 08:02:50 +0100
commit7c1e124ce26f4a452827e9f2ecaf5a3271aa649b (patch)
tree1b99817ab19393b41ec0a6a3db439913a33a3203 /2022/day20.py
parentc27d4e089c7dd2e6c1561c3781634ba5215f71d8 (diff)
day20
Diffstat (limited to '2022/day20.py')
-rwxr-xr-x2022/day20.py51
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()))
+