Solve 2017:23 "Coprocessor Conflagration"
This commit is contained in:
parent
5b754381b0
commit
4b1fa6bd65
1 changed files with 138 additions and 0 deletions
138
2017-python/solutions/day_23.py
Normal file
138
2017-python/solutions/day_23.py
Normal 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()
|
||||
Loading…
Add table
Reference in a new issue