Frans Bergman 3 vuotta sitten
vanhempi
commit
534bb5871c
3 muutettua tiedostoa jossa 163 lisäystä ja 0 poistoa
  1. 102 0
      14.input
  2. 43 0
      14.py
  3. 18 0
      14.small.input

+ 102 - 0
14.input

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

+ 43 - 0
14.py

@@ -0,0 +1,43 @@
+from util import get_input
+from more_itertools import sliding_window as sw
+from more_itertools import flatten
+from itertools import product
+
+input = get_input("14.input")
+
+template = input[0]
+
+rules = {a: b for [a, b] in [line.split(" -> ") for line in input[2:]]}
+
+all_pairs = list(product(list(set(flatten([c for c in rules.values()]))), repeat=2))
+all_pairs = [a + b for (a, b) in all_pairs]
+
+def step(pairs, rules, counts):
+    next = {k: 0 for k in all_pairs}
+    for (k, v) in pairs.items():
+        if k in rules:
+            [a, c] = k
+            b = rules[k]
+            next[a + b] += v
+            next[b + c] += v
+            counts[b] += v
+        else:
+            next[k] += v
+    return next
+
+def run(template, rules, steps):
+    pairs = {k: 0 for k in all_pairs}
+    for [a, b] in sw(template, 2):
+        pairs[a + b] += 1
+
+    counts = {k: 0 for k in set(rules.values())}
+    for c in template:
+        counts[c] += 1
+
+    for _ in range(steps):
+        pairs = step(pairs, rules, counts)
+
+    return max(counts.values()) - min(counts.values())
+
+print("Part 1:", run(template, rules, 10))
+print("Part 2:", run(template, rules, 40))

+ 18 - 0
14.small.input

@@ -0,0 +1,18 @@
+NNCB
+
+CH -> B
+HH -> N
+CB -> H
+NH -> C
+HB -> C
+HC -> B
+HN -> C
+NN -> C
+BH -> H
+NC -> B
+NB -> B
+BN -> B
+BB -> N
+BC -> B
+CC -> N
+CN -> C