from collections import defaultdict from tools.aoc import AOCDay from typing import Any class Day(AOCDay): inputs = [ [ (6828, "input8") ], [ (7234, "input8") ] ] def parse_input(self) -> (dict, int): max_value = 0 register = defaultdict(int) for line in self.getInput(): reg, cmd, value, _, test_reg, test_op, test_value = line.split(" ") value = int(value) test_value = int(test_value) test_outcome = False if test_op == '<': test_outcome = register[test_reg] < test_value elif test_op == '>': test_outcome = register[test_reg] > test_value elif test_op == '>=': test_outcome = register[test_reg] >= test_value elif test_op == '<=': test_outcome = register[test_reg] <= test_value elif test_op == '==': test_outcome = register[test_reg] == test_value elif test_op == '!=': test_outcome = register[test_reg] != test_value else: print("UNKNOWN TEST", test_op) if test_outcome: if cmd == 'inc': register[reg] += value elif cmd == 'dec': register[reg] -= value else: print("UNKNOWN COMMAND", cmd) if register[reg] > max_value: max_value = register[reg] return register, max_value def part1(self) -> Any: register, _ = self.parse_input() return max(register.values()) def part2(self) -> Any: _, ret = self.parse_input() return ret if __name__ == '__main__': day = Day(2017, 8) day.run(verbose=True)