From 81945a973d7391f427d7f6a145594731ce42f6b8 Mon Sep 17 00:00:00 2001 From: Joscha Date: Sun, 4 Dec 2022 14:34:09 +0100 Subject: [PATCH] [py] Port 2021_14 --- py/2021/input_14.txt => inputs/2021_14 | 0 py/aoc/__init__.py | 2 ++ py/{2021/14.py => aoc/y2021/d14.py} | 27 +++++++------------ .../2021_14 | 0 4 files changed, 12 insertions(+), 17 deletions(-) rename py/2021/input_14.txt => inputs/2021_14 (100%) rename py/{2021/14.py => aoc/y2021/d14.py} (60%) rename py/2021/input_14_example.txt => sample_inputs/2021_14 (100%) diff --git a/py/2021/input_14.txt b/inputs/2021_14 similarity index 100% rename from py/2021/input_14.txt rename to inputs/2021_14 diff --git a/py/aoc/__init__.py b/py/aoc/__init__.py index a135343..2518868 100644 --- a/py/aoc/__init__.py +++ b/py/aoc/__init__.py @@ -2,9 +2,11 @@ import sys import argparse from pathlib import Path +from .y2021 import d14 from .y2022 import d01, d02, d03, d04 DAYS = { + "2021_14": y2021.d14.solve, "2022_01": y2022.d01.solve, "2022_02": y2022.d02.solve, "2022_03": y2022.d03.solve, diff --git a/py/2021/14.py b/py/aoc/y2021/d14.py similarity index 60% rename from py/2021/14.py rename to py/aoc/y2021/d14.py index 62ddce5..a7fed68 100644 --- a/py/2021/14.py +++ b/py/aoc/y2021/d14.py @@ -1,7 +1,7 @@ -import argparse from pathlib import Path from collections import Counter + def step(pairs, rules): result = Counter() for pair, amount in pairs.items(): @@ -13,6 +13,7 @@ def step(pairs, rules): result[pair] += amount return result + def count_chars(template, pairs): chars = Counter() for pair, amount in pairs.items(): @@ -20,20 +21,15 @@ def count_chars(template, pairs): chars[template[-1]] += 1 return chars -def main(): - parser = argparse.ArgumentParser() - parser.add_argument("file", type=Path) - args = parser.parse_args() - with open(args.file) as f: - template = next(f).strip() - next(f) - rules = {} - for line in f: - pair, char = line.strip().split(" -> ") - rules[pair] = (pair[0] + char, char + pair[1]) +def solve(inputstr): + template, rest = inputstr.split("\n\n", maxsplit=1) + rules = {} + for line in rest.splitlines(): + pair, char = line.split(" -> ") + rules[pair] = (pair[0] + char, char + pair[1]) - pairs = Counter(template[i:i+2] for i in range(len(template) - 1)) + pairs = Counter(template[i : i + 2] for i in range(len(template) - 1)) for i in range(10): pairs = step(pairs, rules) @@ -41,11 +37,8 @@ def main(): chars = count_chars(template, pairs).most_common() print(f"Part 1: {chars[0][1] - chars[-1][1]}") - for i in range(30): # 40 steps total + for i in range(30): # 40 steps total pairs = step(pairs, rules) chars = count_chars(template, pairs).most_common() print(f"Part 2: {chars[0][1] - chars[-1][1]}") - -if __name__ == "__main__": - main() diff --git a/py/2021/input_14_example.txt b/sample_inputs/2021_14 similarity index 100% rename from py/2021/input_14_example.txt rename to sample_inputs/2021_14