Quellcode durchsuchen

Solve 2021 day 14

Taddeus Kroes vor 4 Jahren
Ursprung
Commit
9a4d764a1e
2 geänderte Dateien mit 133 neuen und 0 gelöschten Zeilen
  1. 31 0
      2021/14_polymer.py
  2. 102 0
      2021/input/14

+ 31 - 0
2021/14_polymer.py

@@ -0,0 +1,31 @@
+#!/usr/bin/env python3
+import sys
+from collections import Counter
+
+def parse(f):
+    yield next(f).rstrip()
+    next(f)
+    yield dict(line.rstrip().split(' -> ') for line in f)
+
+def grow(polymer, rules, steps):
+    elements = Counter(polymer)
+    pairs = Counter(polymer[i:i + 2] for i in range(len(polymer) - 1))
+
+    for step in range(steps):
+        new = Counter()
+        for pair, num in pairs.items():
+            if pair in rules:
+                a, b = pair
+                c = rules[pair]
+                new[a + c] += num
+                new[c + b] += num
+                elements[c] += num
+            else:
+                new[pair] = num
+        pairs = new
+
+    return max(elements.values()) - min(elements.values())
+
+template, rules = parse(sys.stdin)
+print(grow(template, rules, 10))
+print(grow(template, rules, 40))

+ 102 - 0
2021/input/14

@@ -0,0 +1,102 @@
+OOVSKSPKPPPNNFFBCNOV
+
+BC -> C
+PP -> O
+SK -> K
+KH -> N
+OK -> S
+PC -> O
+VP -> K
+CF -> K
+HC -> H
+FV -> V
+PB -> P
+NK -> H
+CK -> F
+FH -> H
+SV -> B
+NH -> C
+CP -> S
+HP -> O
+HS -> O
+BK -> B
+KC -> P
+VV -> B
+OF -> O
+KP -> V
+FO -> V
+FK -> V
+VH -> K
+KB -> P
+KF -> H
+SH -> S
+HF -> O
+BB -> F
+FC -> O
+SO -> S
+BS -> O
+HH -> C
+BO -> S
+CO -> F
+VC -> V
+KS -> N
+OC -> N
+FP -> P
+HN -> B
+HV -> V
+HO -> P
+KO -> C
+SF -> H
+NO -> N
+PS -> C
+BP -> K
+SC -> C
+NP -> C
+CH -> V
+KV -> B
+HK -> V
+OP -> V
+SP -> V
+NC -> V
+FF -> B
+CC -> V
+CS -> F
+SB -> C
+OS -> C
+FN -> O
+CV -> P
+OH -> H
+OO -> P
+PO -> F
+NS -> H
+VB -> K
+OV -> K
+PH -> H
+BH -> V
+SS -> B
+PK -> F
+VK -> O
+BN -> V
+VF -> O
+PF -> H
+VS -> K
+ON -> V
+BF -> F
+CN -> F
+VO -> B
+FS -> K
+OB -> B
+PN -> H
+NF -> O
+VN -> P
+BV -> S
+NV -> V
+FB -> V
+NB -> P
+CB -> B
+KK -> S
+NN -> F
+SN -> B
+HB -> P
+PV -> S
+KN -> S