aoc2022/py-ver/10.py
2022-12-22 22:50:56 -06:00

217 lines
2.2 KiB
Python

with open("10.txt") as f:
data = f.read()
ex_data = """noop
addx 3
addx -5"""
ex2_data = """addx 15
addx -11
addx 6
addx -3
addx 5
addx -1
addx -8
addx 13
addx 4
noop
addx -1
addx 5
addx -1
addx 5
addx -1
addx 5
addx -1
addx 5
addx -1
addx -35
addx 1
addx 24
addx -19
addx 1
addx 16
addx -11
noop
noop
addx 21
addx -15
noop
noop
addx -3
addx 9
addx 1
addx -3
addx 8
addx 1
addx 5
noop
noop
noop
noop
noop
addx -36
noop
addx 1
addx 7
noop
noop
noop
addx 2
addx 6
noop
noop
noop
noop
noop
addx 1
noop
noop
addx 7
addx 1
noop
addx -13
addx 13
addx 7
noop
addx 1
addx -33
noop
noop
noop
addx 2
noop
noop
noop
addx 8
noop
addx -1
addx 2
addx 1
noop
addx 17
addx -9
addx 1
addx 1
addx -3
addx 11
noop
noop
addx 1
noop
addx 1
noop
noop
addx -13
addx -19
addx 1
addx 3
addx 26
addx -30
addx 12
addx -1
addx 3
addx 1
noop
noop
noop
addx -9
addx 18
addx 1
addx 2
noop
noop
addx 9
noop
noop
noop
addx -1
addx 2
addx -37
addx 1
addx 3
noop
addx 15
addx -21
addx 22
addx -6
addx 1
noop
addx 2
addx 1
noop
addx -10
noop
noop
addx 20
addx 1
addx 2
addx 2
addx -6
addx -11
noop
noop
noop"""
def solve1(data):
cycle = 1
cycle_val = dict()
reg = 1
for line in data.splitlines():
parts = line.strip().split(" ")
if parts[0] == "noop":
cycle_val[cycle] = cycle * reg
cycle += 1
elif parts[0] == "addx":
cycle_val[cycle] = cycle * reg
cycle_val[cycle + 1] = (cycle + 1) * reg
cycle += 2
dx = int(parts[1])
reg += dx
s = 0
want = [20, 60, 100, 140, 180, 220]
for id in want:
s += cycle_val[id]
print(s)
def solve2(data):
cycle = 1
reg = 1
crt = dict()
for x in range(40):
for y in range(6):
crt[x, y] = "."
def topos(n): return (n % 40, n // 40)
def draw():
px = cycle - 1
if (px % 40) in [reg - 1, reg, reg + 1]:
pos = topos(px)
crt[pos] = "#"
for line in data.splitlines():
parts = line.strip().split(" ")
if parts[0] == "noop":
draw()
cycle += 1
elif parts[0] == "addx":
draw()
cycle += 1
draw()
cycle += 1
dx = int(parts[1])
reg += dx
for y in range(6):
for x in range(40):
print(crt[x, y], end="")
print()
solve1(ex2_data)
solve1(data)
solve2(ex2_data)
solve2(data)