StyleInCode

RSS

 

Day 6 - Advent of Code 2025

6 December 2025

Working solutions for the day 6 puzzles.

Part One

""" day_06_01.py """

# usage: python3 day_06_01.py

from math import prod


def get(filename):
    """ contents of filename """
    with open(filename, 'r', encoding='utf-8') as infile:
        data = infile.read()

    return data


def test(data, given_solution):
    """ testing """
    assert solve(data) == given_solution


def solve(data):
    """ solve the puzzle """
    worksheet = {(r, c): col for r, row in enumerate(data.splitlines())
                 for c, col in enumerate(row.split())}
    worksheet = {(c, r): col for (r, c), col in worksheet.items()}

    problems = max(worksheet.keys())[0] + 1
    numbers = max(worksheet.keys(), key=lambda x: x[1])[1]

    answers = []
    for p in range(problems):
        args = [int(worksheet[(p, n)]) for n in range(numbers)]
        if worksheet[(p, numbers)] == '+':
            answers.append(sum(args))
        else:
            answers.append(prod(args))

    return sum(answers)


if __name__ == '__main__':
    test(get('example01'), 4277556)

    puzzle = get('input')
    solution = solve(puzzle)

    print(solution)

Part Two

""" day_06_02.py """

# usage: python3 day_06_02.py

from math import prod


def get(filename):
    """ contents of filename """
    with open(filename, 'r', encoding='utf-8') as infile:
        data = infile.read()

    return data


def test(data, given_solution):
    """ testing """
    assert solve(data) == given_solution


def parse(column):
    """ operation and number """
    match column[-1]:
        case '+':
            op = sum
        case '*':
            op = prod
        case _:
            op = None

    return op, int(column) if op is None else int(column[:-1])


def solve(data):
    """ solve the puzzle """
    worksheet = {}
    _ = [worksheet.setdefault(c, []).append(col) for row in data.splitlines()
         for c, col in enumerate(row)]

    problem = 0
    operations = {}
    for _, line in worksheet.items():
        text = ''.join(line).strip()
        if text == '':
            problem += 1
            continue

        func, number = parse(text)

        args = operations.setdefault(problem, (func, [number]))[1]
        if func is None:
            args.append(number)

    return sum(func(args) for _, (func, args) in operations.items())


if __name__ == '__main__':
    test(get('example01'), 3263827)

    puzzle = get('input')
    solution = solve(puzzle)

    print(solution)

Categories

Links