aboutsummaryrefslogtreecommitdiff
path: root/2015/19/puzzle-1.py
diff options
context:
space:
mode:
authorThomas Voss <thomasvoss@live.com> 2021-12-01 19:15:48 +0100
committerThomas Voss <thomasvoss@live.com> 2021-12-01 19:15:48 +0100
commit9a4ea19ae955c86312c62098830a0f0e2994196d (patch)
tree4735be125fc4e1038c310dc724efcafa2339453a /2015/19/puzzle-1.py
parent394df58d6da6928a6a3ebae31362342deca74b48 (diff)
Add day 19 solutions
Diffstat (limited to '2015/19/puzzle-1.py')
-rwxr-xr-x2015/19/puzzle-1.py30
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()