summaryrefslogtreecommitdiff
path: root/2022/day10.py
diff options
context:
space:
mode:
authornekineki <nekineki@nekineki.net>2022-12-11 14:47:27 +0100
committernekineki <nekineki@nekineki.net>2022-12-11 14:50:32 +0100
commitfe75c10e350743a1c078f065d69556fecf825ca5 (patch)
tree956556a564c9329346dc9d8b1535dc5e365f3d55 /2022/day10.py
parenta74d2dc54aef546664bcc8c81eb8e01a93e94391 (diff)
move files around, update paths
Diffstat (limited to '2022/day10.py')
-rwxr-xr-x2022/day10.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/2022/day10.py b/2022/day10.py
new file mode 100755
index 0000000..feb0034
--- /dev/null
+++ b/2022/day10.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python3
+
+# import numpy as np
+from functools import reduce
+from re import findall
+from copy import deepcopy
+import sys
+
+# filename = "in/day10.ref"
+filename = "in/day10.pzl"
+data = open(filename).read()
+lines = [line for line in data.rstrip('\n').split('\n')]
+
+res1 = 0
+x = 1
+cycles = 1
+for line in lines:
+ opcodes = line.split(' ')
+ if opcodes[0] == 'addx':
+ if cycles == 19 or (cycles+20) % 40 == 39:
+ a = (cycles+1) * x
+ res1 += a
+ elif cycles == 20 or (cycles+20) % 40 == 0:
+ a = cycles * x
+ res1 += a
+ x += int(opcodes[1])
+ cycles += 2
+ elif opcodes[0] == 'noop':
+ if cycles == 20 or (cycles+20) % 40 == 0:
+ a = cycles * x
+ res1 += a
+ cycles += 1
+
+
+res2 = 'read it'
+crt = [0 for _ in range(40*6)]
+x = 1
+cycles = 1
+def print_crt(crt):
+ for i,val in enumerate(crt):
+ print('.' if val == 0 else '#', end='')
+ if (i+1) % 40 == 0:
+ print()
+ print()
+
+def sprite(crt, cycles, x):
+ s = [1 if abs(x-i) % 40 in [39, 0, 1] else 0 for i in range(40*6)]
+ c = [1 if abs(cycles-i-1) % (40*6) == 0 else 0 for i in range(40*6)]
+
+ m = list(map(lambda x: x[0]*x[1], zip(c,s)))
+ crt = list(map(lambda x: x[0]+x[1], zip(crt,m)))
+ return crt
+
+for line in lines:
+ opcodes = line.split(' ')
+ if opcodes[0] == 'addx':
+ crt = sprite(crt, cycles+0, x)
+ crt = sprite(crt, cycles+1, x)
+ x += int(opcodes[1])
+ cycles += 2
+ elif opcodes[0] == 'noop':
+ crt = sprite(crt, cycles+0, x)
+ a = cycles * x
+ cycles += 1
+ # print(cycles, x)
+
+print_crt(crt)
+
+print('res1:', res1)
+print('res2:', res2)
+