Day 12 - Advent of Code 2016

Working solutions for the day 12 puzzles.

Part One

""" day_12_01.py """

# usage: python3 day_12_01.py < input

registers = {'a': 0, 'b': 0, 'c': 0, 'd': 0}
code = []

while True:
    try:
        operation, *atoms = input().split()
        code.append((operation, atoms))
    except EOFError:
        break

counter = 0
while counter < len(code):
    operation, atoms = code[counter]
    match operation:
        case 'inc':
            registers[atoms[0]] += 1
        case 'dec':
            registers[atoms[0]] -= 1
        case 'cpy':
            try:
                registers[atoms[1]] = int(atoms[0])
            except ValueError:
                registers[atoms[1]] = registers[atoms[0]]
        case 'jnz':
            try:
                if registers[atoms[0]] > 0:
                    counter += int(atoms[1]) - 1
            except KeyError:
                if int(atoms[0]) > 0:
                    counter += int(atoms[1]) - 1
    counter += 1

print(registers['a'])

Part Two

""" day_12_02.py """

# usage: python3 day_12_02.py < input

registers = {'a': 0, 'b': 0, 'c': 1, 'd': 0}
code = []

while True:
    try:
        operation, *atoms = input().split()
        code.append((operation, atoms))
    except EOFError:
        break

counter = 0
while counter < len(code):
    operation, atoms = code[counter]
    match operation:
        case 'inc':
            registers[atoms[0]] += 1
        case 'dec':
            registers[atoms[0]] -= 1
        case 'cpy':
            try:
                registers[atoms[1]] = int(atoms[0])
            except ValueError:
                registers[atoms[1]] = registers[atoms[0]]
        case 'jnz':
            try:
                if registers[atoms[0]] > 0:
                    counter += int(atoms[1]) - 1
            except KeyError:
                if int(atoms[0]) > 0:
                    counter += int(atoms[1]) - 1
    counter += 1

print(registers['a'])