From d6f8ecf700e9a8a897ecad3616b9e79bc92ddbb4 Mon Sep 17 00:00:00 2001 From: Joscha Date: Sun, 4 Dec 2022 14:19:23 +0100 Subject: [PATCH] [py] Solve 2022_03 --- py/aoc/__init__.py | 3 ++- py/aoc/y2022/d03.py | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 py/aoc/y2022/d03.py diff --git a/py/aoc/__init__.py b/py/aoc/__init__.py index ed5f640..81bde3e 100644 --- a/py/aoc/__init__.py +++ b/py/aoc/__init__.py @@ -2,11 +2,12 @@ import sys import argparse from pathlib import Path -from .y2022 import d01, d02, d04 +from .y2022 import d01, d02, d03, d04 DAYS = { "2022_01": y2022.d01.solve, "2022_02": y2022.d02.solve, + "2022_03": y2022.d03.solve, "2022_04": y2022.d04.solve, } diff --git a/py/aoc/y2022/d03.py b/py/aoc/y2022/d03.py new file mode 100644 index 0000000..dd22bec --- /dev/null +++ b/py/aoc/y2022/d03.py @@ -0,0 +1,23 @@ +def priority(item): + return ord(item.lower()) - ord("a") + 1 + item.isupper() * 26 + + +def chunks(things, n): + return (things[i : i + n] for i in range(0, len(things), n)) + + +def solve(inputstr): + rucksacks = inputstr.splitlines() + + part1 = 0 + for rucksack in rucksacks: + half = len(rucksack) // 2 + common = set(rucksack[:half]) & set(rucksack[half:]) + part1 += priority(common.pop()) + print(f"Part 1: {part1}") + + part2 = 0 + for r1, r2, r3 in chunks(rucksacks, 3): + common = set(r1) & set(r2) & set(r3) + part2 += priority(common.pop()) + print(f"Part 2: {part2}")