Solve 2017:23 "Coprocessor Conflagration"

This commit is contained in:
Anders Englöf Ytterström 2025-05-06 20:15:16 +02:00
parent 5b754381b0
commit 4b1fa6bd65

View file

@ -0,0 +1,138 @@
from solutions import BaseSolution
from collections import defaultdict
class Solution(BaseSolution):
input_file = "23.txt"
sound_freq = 0
queue = [], []
sent = [0, 0]
def __str__(self):
return "Day 23: Coprocessor Conflagration"
def solve(self, puzzle_input):
R = defaultdict(int)
P = puzzle_input.splitlines()
i = 0
M = 0
while i < len(P):
j = 1
w, r, v = P[i].split()
match w:
case "set":
R[r] = R[v] if v in "abcdefgh" else int(v)
case "sub":
R[r] -= R[v] if v in "abcdefgh" else int(v)
case "mul":
M += 1
R[r] *= R[v] if v in "abcdefgh" else int(v)
case "jnz":
x = R[r] if r in "abcdefgh" else int(r)
if x != 0:
j = R[v] if v in "abcdefgh" else int(v)
i += j
return M
def solve_again(self, puzzle_input):
def isprime(num):
for n in range(2, int(num**0.5) + 1):
if num % n == 0:
return False
return True
b = 99 * 100 + 100_000
c = b + 17_000 + 1
return sum(not isprime(n) for n in range(b, c, 17))
def python_reconstruction(self, puzzle_input):
R = defaultdict(int)
R["a"] = 1
# 00: set b 99
R["b"] = 99
# 01: set c b
R["c"] = R["b"]
# 02: jnz a 2
if R["a"] == 0:
# 03: jnz 1 5
pass
else:
# 04: mul b 100
# 05: sub b -100000
R["b"] = R["b"] * 100 + 100_000
# 06: set c b
# 07: sub c -17000
R["c"] = R["b"] + 17_000
while True:
# 08: set f 1
# 09: set d 2
R["f"] = 1
R["d"] = 2
while True:
# 10: set e 2
R["e"] = 2
while True:
# 11: set g d
# 12: mul g e
# 13: sub g b
R["g"] = R["d"] * R["e"] - R["b"]
# 14: jnz g 2
if R["g"] == 0:
# 15: set f 0
R["f"] = 0
# 16: sub e -1
R["e"] += 1
# 17: set g e
# 18: sub g b
R["g"] = R["e"] - R["b"]
# 19: jnz g -8
if R["g"] == 0:
break
# 20: sub d -1
R["d"] += 1
# 21: set g d
# 22: sub g b
R["g"] = R["d"] - R["b"]
# 23: jnz g -13
if R["g"] == 0:
break
# 24: jnz f 2
if R["f"] == 0:
# 25: sub h -1
R["h"] += 1
# 26: set g b
# 27: sub g c
R["g"] = R["b"] - R["c"]
# 28: jnz g 2
if R["g"] == 0:
# 29: jnz 1 3
break
else:
# 30: sub b -17
R["b"] += 17
# 31: jnz 1 -23
return R["h"]
if __name__ == "__main__":
solution = Solution()
solution.show_results()