65 lines
1.8 KiB
Python
65 lines
1.8 KiB
Python
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)
|