From 75a8595e4d11af5cb650844978c87348e0fa42fa Mon Sep 17 00:00:00 2001
From: Thomas Voss <thomasvoss@live.com>
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')

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