aboutsummaryrefslogtreecommitdiff
path: root/2021/14/puzzles.py
diff options
context:
space:
mode:
Diffstat (limited to '2021/14/puzzles.py')
-rw-r--r--2021/14/puzzles.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/2021/14/puzzles.py b/2021/14/puzzles.py
new file mode 100644
index 0000000..e162ffe
--- /dev/null
+++ b/2021/14/puzzles.py
@@ -0,0 +1,37 @@
+#!/usr/bin/env python3
+
+from collections import Counter
+
+
+def main() -> None:
+ with open("input", "r", encoding="utf-8") as f:
+ formula = f.readline().strip()
+ f.readline()
+
+ data: dict[str, str] = {}
+ for line in f.readlines():
+ x, y = line.strip().split(" -> ")
+ data[(x[0], x[1])] = y
+
+ pairs = Counter(zip(formula, formula[1:]))
+
+ for _ in range(LOOPS):
+ new: Counter[str] = Counter()
+ for pair in pairs:
+ new[(pair[0], data[pair])] += pairs[pair]
+ new[(data[pair], pair[1])] += pairs[pair]
+ pairs = new
+
+ # Ran out of memory, lol
+ # chars = Counter(flatten(map(lambda p: (p[0],) * pairs[p], pairs)))
+
+ chars: Counter[str] = Counter()
+ for pair in pairs:
+ chars[pair[0]] += pairs[pair]
+ chars[formula[-1]] += 1
+
+ print(chars.most_common()[0][1] - chars.most_common()[-1][1])
+
+
+if __name__ == "__main__":
+ main()