From 92f17f30468f43e57d84871852b22cebc3e2ffac Mon Sep 17 00:00:00 2001 From: Holly McFarland Date: Sat, 6 Dec 2025 16:13:15 -0500 Subject: [PATCH] day 6 --- day-06/part-1.py | 22 ++++++++++++++++++++++ day-06/part-2.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 day-06/part-1.py create mode 100644 day-06/part-2.py diff --git a/day-06/part-1.py b/day-06/part-1.py new file mode 100644 index 0000000..132852f --- /dev/null +++ b/day-06/part-1.py @@ -0,0 +1,22 @@ +import aocd + +import operator +import functools + +def parse(data): + op_table = {'+': operator.add, '*': operator.mul} + + *nums, ops = (row.split() for row in data.strip().split('\n')) + + nums = zip(*(map(int, row) for row in nums)) # zip(*l) <- ancient trick for transposing l; learned it from golfing :3 + + ops = (op_table[op] for op in ops) + return zip(ops, nums) + +def main(data): + return sum(functools.reduce(f, nums) for f, nums in parse(data)) + +if __name__ == '__main__': + solution = main(aocd.get_data(day=6, year=2025)) + print(solution) + aocd.submit(solution, part='a', day=6, year=2025) \ No newline at end of file diff --git a/day-06/part-2.py b/day-06/part-2.py new file mode 100644 index 0000000..3050689 --- /dev/null +++ b/day-06/part-2.py @@ -0,0 +1,28 @@ +import aocd + +import operator +import functools + +def parse(data): + op_table = {'+': operator.add, '*': operator.mul} + + cols = zip(*data.strip('\n').split('\n')) + + problems = [[]] + for col in cols: + if any(c != ' ' for c in col): + # Not an empty line + problems[-1].append(col) + else: + # Empty line + problems.append([]) + + return ((op_table[p[0][-1]], [int(''.join(col[:-1])) for col in p]) for p in problems) + +def main(data): + return sum(functools.reduce(f, nums) for f, nums in parse(data)) + +if __name__ == '__main__': + solution = main(aocd.get_data(day=6, year=2025)) + print(solution) + aocd.submit(solution, part='b', day=6, year=2025) \ No newline at end of file