diff options
Diffstat (limited to '2022/day10/asd.py')
| -rwxr-xr-x | 2022/day10/asd.py | 71 |
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) + |
