summaryrefslogtreecommitdiff
path: root/2022/day10/asd.py
diff options
context:
space:
mode:
Diffstat (limited to '2022/day10/asd.py')
-rwxr-xr-x2022/day10/asd.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/2022/day10/asd.py b/2022/day10/asd.py
new file mode 100755
index 0000000..7281026
--- /dev/null
+++ b/2022/day10/asd.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 = "ref.txt"
+filename = "pzl.txt"
+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)
+