diff options
Diffstat (limited to '2015/19/puzzle-1.py')
-rwxr-xr-x | 2015/19/puzzle-1.py | 31 |
1 files changed, 16 insertions, 15 deletions
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() |