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()