diff --git a/2017-python/solutions/day_23.py b/2017-python/solutions/day_23.py new file mode 100644 index 0000000..f7c46cd --- /dev/null +++ b/2017-python/solutions/day_23.py @@ -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()