From 75a8595e4d11af5cb650844978c87348e0fa42fa Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Thu, 2 Dec 2021 08:52:32 +0100 Subject: Use python3.10 pattern matching --- 2015/19/puzzle-1.py | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) (limited to '2015/19/puzzle-1.py') diff --git a/2015/19/puzzle-1.py b/2015/19/puzzle-1.py index 8527ca0..b694c8b 100755 --- a/2015/19/puzzle-1.py +++ b/2015/19/puzzle-1.py @@ -2,29 +2,30 @@ import re + def main() -> None: replacements: dict[str, str] = {} with open("input", "r", encoding="utf-8") as f: for line in f.readlines(): - line = line.strip() - if line != "": - parts = line.split(" => ") - if len(parts) == 2: - while parts[0] in replacements: - parts[0] += "_" - replacements[parts[0]] = parts[1] - else: - molecule = line + match line.strip().split(" => "): + case [before, after]: + while before in replacements: + before += "_" + replacements[before] = after + case [mol]: + molecule = mol unique_molecules: set[str] = set() for pattern in replacements: - trim_pattern = pattern.replace("_", "") - for match in re.finditer(trim_pattern, molecule): - before = molecule[:match.start()] - after = molecule[match.start():].replace(trim_pattern, replacements[pattern], 1) - unique_molecules.add(before + after) - + trim_pattern = pattern.rstrip("_") + unique_molecules.update( + molecule[: match.start()] + + molecule[match.start() :].replace(trim_pattern, replacements[pattern], 1) + for match in re.finditer(trim_pattern, molecule) + ) + print(len(unique_molecules)) + if __name__ == "__main__": main() -- cgit v1.2.3