Advent of Code Solutions

I have set myself a personal challenge to try and get up to date with advent of code, a set of programming challenges released each December.

Each day has 2 related problems, for a total of 50 problems per year. Each button below will show my code solving that problem. Green buttons where I have solved both problems of the day, orange where I have only solved the first one and red where I haven't solved either.

2015 2016 2017 2018 2019 2020 2021 2022 2023 2024
Not started
Part 1 completed
Both parts completed
from util.input import get_input

def part_1():
    
    puzzle_input = get_input(2015, 23)

    instructions = []
    for line in puzzle_input.splitlines():
        instructions.append(line)

    i=0
    registers = {'a': 0, 'b': 0}
    while i < len(instructions):

        instruction = instructions[i]

        if instruction.startswith('hlf'):
            register = instruction.split()[1]
            registers[register] /= 2
            i+=1
        elif instruction.startswith('tpl'):
            register = instruction.split()[1]
            registers[register] *= 3
            i+=1
        elif instruction.startswith('inc'):
            register = instruction.split()[1]
            registers[register] += 1
            i += 1
        elif instruction.startswith('jmp'):
            offset = instruction.split()[1]
            numb = int(offset[1:]) 
            if offset.startswith('-'):
                numb *= -1
            i += numb
        elif instruction.startswith('jie'):
            _, register,offset = instruction.split()
            register = register.replace(',','')
            if registers[register] % 2 == 0:
                numb = int(offset[1:]) 
                if offset.startswith('-'):
                    numb *= -1
                i += numb
            else:
                i += 1
        elif instruction.startswith('jio'):
            _, register,offset = instruction.split()
            register = register.replace(',','')
            if registers[register] == 1:
                numb = int(offset[1:]) 
                if offset.startswith('-'):
                    numb *= -1
                i += numb
            else:
                i += 1

    return  registers['b']

def part_2():
    
    puzzle_input = get_input(2015, 23)

    instructions = []
    for line in puzzle_input.splitlines():
        instructions.append(line)

    i=0
    registers = {'a': 1, 'b': 0}
    while i < len(instructions):

        instruction = instructions[i]

        if instruction.startswith('hlf'):
            register = instruction.split()[1]
            registers[register] /= 2
            i+=1
        elif instruction.startswith('tpl'):
            register = instruction.split()[1]
            registers[register] *= 3
            i+=1
        elif instruction.startswith('inc'):
            register = instruction.split()[1]
            registers[register] += 1
            i += 1
        elif instruction.startswith('jmp'):
            offset = instruction.split()[1]
            numb = int(offset[1:]) 
            if offset.startswith('-'):
                numb *= -1
            i += numb
        elif instruction.startswith('jie'):
            _, register,offset = instruction.split()
            register = register.replace(',','')
            if registers[register] % 2 == 0:
                numb = int(offset[1:]) 
                if offset.startswith('-'):
                    numb *= -1
                i += numb
            else:
                i += 1
        elif instruction.startswith('jio'):
            _, register,offset = instruction.split()
            register = register.replace(',','')
            if registers[register] == 1:
                numb = int(offset[1:]) 
                if offset.startswith('-'):
                    numb *= -1
                i += numb
            else:
                i += 1

    return registers['b']