diff --git a/adventofcode/2025/day6/day6.py b/adventofcode/2025/day6/day6.py new file mode 100644 index 0000000..edcf766 --- /dev/null +++ b/adventofcode/2025/day6/day6.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 +import fileinput +import re +from functools import reduce +from operator import mul + + +def calc(stack, operator): + if operator == "+": + return sum(int(x) for x in stack) + elif operator == "*": + return reduce(mul, map(int, stack)) + else: + raise NotImplementedError(operator) + + +def part1(inp): + lines = [re.split(r"\s+", x.strip()) for x in inp] + total = 0 + for col in zip(*lines): + operands, operator = col[:-1], col[-1] + result = calc([int(x) for x in operands], operator) + total += result + print("Part 1: ", total) + + +def part2(lines): + total = 0 + max_len = max(len(x) for x in lines) + numbers = [] + operator = None + for i in range(max_len - 1, -1, -1): + digits = [] + for line in lines: + if i >= len(line): + continue + ch = line[i] + if ch in "*+": + operator = ch + break + elif ch != " ": + digits.append(ch) + + if digits: + numbers.append(int("".join(digits))) + + if operator is not None: + total += calc(numbers, operator) + numbers = [] + operator = None + + print("Part 2: ", total) + + +if __name__ == "__main__": + lines = [x.rstrip() for x in fileinput.input()] + part1(lines) + part2(lines)