From a44bd51f68aa52bcbac916109996c5d1ab4ea8ec Mon Sep 17 00:00:00 2001 From: Stefan Harmuth Date: Sun, 4 Dec 2022 12:18:54 +0100 Subject: [PATCH] day23 - for p2 I'm guessing what number is changing between inputs --- day23.py | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++ inputs/input23 | 32 +++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 day23.py create mode 100644 inputs/input23 diff --git a/day23.py b/day23.py new file mode 100644 index 0000000..98b347b --- /dev/null +++ b/day23.py @@ -0,0 +1,69 @@ +from collections import defaultdict + +from tools.aoc import AOCDay +from typing import Any + +from tools.math import get_factors + + +class Day(AOCDay): + inputs = [ + [ + (4225, "input23") + ], + [ + (905, "input23") + ] + ] + + def get_commands(self) -> list: + return [x.split(" ") for x in self.getInput()] + + def part1(self) -> Any: + register = defaultdict(int) + index = 0 + commands = self.get_commands() + mul_count = 0 + while 0 <= index < len(commands): + cmd = commands[index] + + try: + value = int(cmd[2]) + except ValueError: + value = register[cmd[2]] + + match cmd[0]: + case "set": + register[cmd[1]] = value + case "sub": + register[cmd[1]] -= value + case "mul": + mul_count += 1 + register[cmd[1]] *= value + case "jnz": + try: + jumper = int(cmd[1]) + except ValueError: + jumper = register[cmd[1]] + if jumper != 0: + index += value - 1 + + index += 1 + + return mul_count + + def part2(self) -> Any: + b = int(self.getInput()[0].split(" ")[2]) * 100 + 100000 + c = b + 17000 + h = 0 + while b <= c: + if len(get_factors(b)) > 2: + h += 1 + b += 17 + + return h + + +if __name__ == '__main__': + day = Day(2017, 23) + day.run(verbose=True) diff --git a/inputs/input23 b/inputs/input23 new file mode 100644 index 0000000..8155688 --- /dev/null +++ b/inputs/input23 @@ -0,0 +1,32 @@ +set b 67 +set c b +jnz a 2 +jnz 1 5 +mul b 100 +sub b -100000 +set c b +sub c -17000 +set f 1 +set d 2 +set e 2 +set g d +mul g e +sub g b +jnz g 2 +set f 0 +sub e -1 +set g e +sub g b +jnz g -8 +sub d -1 +set g d +sub g b +jnz g -13 +jnz f 2 +sub h -1 +set g b +sub g c +jnz g 2 +jnz 1 3 +sub b -17 +jnz 1 -23