diff options
author | Thomas Voss <thomasvoss@live.com> | 2021-12-01 19:15:48 +0100 |
---|---|---|
committer | Thomas Voss <thomasvoss@live.com> | 2021-12-01 19:15:48 +0100 |
commit | 9a4ea19ae955c86312c62098830a0f0e2994196d (patch) | |
tree | 4735be125fc4e1038c310dc724efcafa2339453a /2015/19/puzzle-1.py | |
parent | 394df58d6da6928a6a3ebae31362342deca74b48 (diff) |
Add day 19 solutions
Diffstat (limited to '2015/19/puzzle-1.py')
-rwxr-xr-x | 2015/19/puzzle-1.py | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/2015/19/puzzle-1.py b/2015/19/puzzle-1.py new file mode 100755 index 0000000..8527ca0 --- /dev/null +++ b/2015/19/puzzle-1.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 + +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 + + 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) + + print(len(unique_molecules)) + +if __name__ == "__main__": + main() |