diff --git a/2025/d06/ex1/ex1.py b/2025/d06/ex1/ex1.py new file mode 100755 index 0000000..93ca683 --- /dev/null +++ b/2025/d06/ex1/ex1.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python + +import enum +import functools +import operator +import sys + + +class Op(enum.StrEnum): + ADD = "+" + MUL = "*" + + +def solve(input: list[str]) -> int: + def parse(input: list[str]) -> tuple[list[list[int]], list[Op]]: + raw_nums, raw_ops = input[:-1], input[-1] + matrix = [[int(n) for n in line.split()] for line in raw_nums] + ops = [Op(c) for c in raw_ops.split()] + return matrix, ops + + def transpose(matrix: list[list[int]]) -> list[list[int]]: + return list(map(list, zip(*matrix, strict=True))) + + def apply(op: Op, nums: list[int]) -> int: + f = { + Op.ADD: operator.add, + Op.MUL: operator.mul, + }[op] + return functools.reduce(f, nums) + + matrix, ops = parse(input) + return sum(apply(op, nums) for op, nums in zip(ops, transpose(matrix), strict=True)) + + +def main() -> None: + input = sys.stdin.read().splitlines() + print(solve(input)) + + +if __name__ == "__main__": + main()