139 lines
3.3 KiB
Python
139 lines
3.3 KiB
Python
|
|
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()
|