Day 14 (glamorized)
This commit is contained in:
@@ -1,32 +1,27 @@
|
||||
#!/usr/bin/env python3
|
||||
import re
|
||||
from collections import Counter
|
||||
from collections import Counter, defaultdict
|
||||
|
||||
lines = (x.strip() for x in open("input.txt"))
|
||||
first = next(lines)
|
||||
|
||||
combinations = Counter(first[a:a+2] for a in range(len(first)-1))
|
||||
replacements = dict()
|
||||
|
||||
next(lines)
|
||||
|
||||
combinations = Counter(first[a:a+2] for a in range(len(first)-1))
|
||||
replacements = defaultdict(list)
|
||||
|
||||
for line in lines:
|
||||
before, insert = re.match(r"([A-Z]{2}) -> ([A-Z])", line).groups()
|
||||
replacements[before] = (before[0]+insert, insert+before[1])
|
||||
(a, b), insert = re.match(r"([A-Z]{2}) -> ([A-Z])", line).groups()
|
||||
replacements[a+insert].append(a+b)
|
||||
replacements[insert+b].append(a+b)
|
||||
|
||||
for _ in range(10):
|
||||
nxt = {}
|
||||
for before, afters in replacements.items():
|
||||
for after in afters:
|
||||
add = combinations.get(before, 0) + nxt.get(after, 0)
|
||||
if add:
|
||||
nxt[after] = add
|
||||
combinations = nxt
|
||||
combinations = {
|
||||
k: sum_val for k, v in replacements.items() if (sum_val := sum(combinations.get(x, 0) for x in v)) > 0
|
||||
}
|
||||
|
||||
letters = {}
|
||||
letters = Counter(first[0] + first[-1])
|
||||
for key, cnt in combinations.items():
|
||||
letters[key[0]] = letters.get(key[0], 0) + cnt
|
||||
letters[key[1]] = letters.get(key[1], 0) + cnt
|
||||
|
||||
print(letters)
|
||||
print((max(*letters.values())+1) // 2 - (min(*letters.values())+1) // 2)
|
||||
print((max(letters.values()) - min(letters.values())) // 2)
|
||||
|
||||
@@ -1,34 +1,27 @@
|
||||
#!/usr/bin/env python3
|
||||
import re
|
||||
from collections import Counter
|
||||
from collections import Counter, defaultdict
|
||||
|
||||
lines = (x.strip() for x in open("input.txt"))
|
||||
first = next(lines)
|
||||
|
||||
combinations = Counter(first[a:a+2] for a in range(len(first)-1))
|
||||
replacements = dict()
|
||||
|
||||
next(lines)
|
||||
|
||||
combinations = Counter(first[a:a+2] for a in range(len(first)-1))
|
||||
replacements = defaultdict(list)
|
||||
|
||||
for line in lines:
|
||||
before, insert = re.match(r"([A-Z]{2}) -> ([A-Z])", line).groups()
|
||||
replacements[before] = (before[0]+insert, insert+before[1])
|
||||
print(combinations)
|
||||
(a, b), insert = re.match(r"([A-Z]{2}) -> ([A-Z])", line).groups()
|
||||
replacements[a+insert].append(a+b)
|
||||
replacements[insert+b].append(a+b)
|
||||
|
||||
for _ in range(40):
|
||||
nxt = {}
|
||||
for before, afters in replacements.items():
|
||||
for after in afters:
|
||||
add = combinations.get(before, 0) + nxt.get(after, 0)
|
||||
if add:
|
||||
nxt[after] = add
|
||||
combinations = nxt
|
||||
print(combinations)
|
||||
combinations = {
|
||||
k: sum_val for k, v in replacements.items() if (sum_val := sum(combinations.get(x, 0) for x in v)) > 0
|
||||
}
|
||||
|
||||
letters = {}
|
||||
letters = Counter(first[0] + first[-1])
|
||||
for key, cnt in combinations.items():
|
||||
letters[key[0]] = letters.get(key[0], 0) + cnt
|
||||
letters[key[1]] = letters.get(key[1], 0) + cnt
|
||||
|
||||
print(letters)
|
||||
print((max(*letters.values())+1) // 2 - (min(*letters.values())+1) // 2)
|
||||
print((max(letters.values()) - min(letters.values())) // 2)
|
||||
|
||||
Reference in New Issue
Block a user