Day 14 (minified)

This commit is contained in:
Sebastian Seedorf
2021-12-15 13:00:55 +01:00
parent de0a250ed9
commit c7bc2439a6
3 changed files with 10 additions and 9 deletions

View File

@@ -16,9 +16,8 @@ combinations = Counter(first[a:a+2] for a in range(len(first)-1))
for _ in range(10): for _ in range(10):
combinations = {k: sum_val for k, v in repl.items() if (sum_val := sum(combinations.get(x, 0) for x in v)) > 0} combinations = {k: sum_val for k, v in repl.items() if (sum_val := sum(combinations.get(x, 0) for x in v)) > 0}
letters = ((l, cnt) for key, cnt in combinations.items() for l in key) letters = ((key[0], cnt) for key, cnt in combinations.items())
letters = {k: sum(map(itemgetter(1), v)) for k, v in groupby(sorted(letters), itemgetter(0))} letters = {k: sum(map(itemgetter(1), v)) for k, v in groupby(sorted(letters), itemgetter(0))}
letters[first[0]] += 1
letters[first[-1]] += 1 letters[first[-1]] += 1
print((max(letters.values()) - min(letters.values())) // 2) print(max(letters.values()) - min(letters.values()))

4
day14/part2.min.py Normal file
View File

@@ -0,0 +1,4 @@
#!/usr/bin/env python3
import collections as o;import itertools as i;l=[x.strip() for x in open("input.txt")];f=l[0];r=[(k,[*(x[1]for x in v)])for k,v in i.groupby(sorted(v for x in l[2:]for v in[(x[0]+x[-1],x[:2]),(x[-1]+x[1],x[:2])]),lambda x:x[0])];c=o.Counter(f[i:i+2]for i in range(len(f)-1))
for _ in range(40):c={k:sum_val for k,v in r if(sum_val:=sum(c.get(x,0)for x in v))>0}
e={k:sum(x[1]for x in v)for k,v in i.groupby(sorted([*c.items(),(f[-1],1)]),lambda x:x[0][0])};print(max(e.values())-min(e.values()))

View File

@@ -9,16 +9,14 @@ first = next(lines)
next(lines) next(lines)
repl = (re.match(r"([A-Z]{2}) -> ([A-Z])", line).groups() for line in lines) repl = (re.match(r"([A-Z]{2}) -> ([A-Z])", line).groups() for line in lines)
repl = (v for (a, b), insert in repl for v in [(a + insert, a + b), (insert + b, a + b)]) repl = (v for (a, b), m in repl for v in [(a+m, a+b), (m+b, a+b)])
repl = {k: list(map(itemgetter(1), v)) for k, v in groupby(sorted(repl), itemgetter(0))} repl = {k: list(map(itemgetter(1), v)) for k, v in groupby(sorted(repl), itemgetter(0))}
combinations = Counter(first[a:a+2] for a in range(len(first)-1)) combinations = Counter(first[i:i+2] for i in range(len(first)-1))
for _ in range(40): for _ in range(40):
combinations = {k: sum_val for k, v in repl.items() if (sum_val := sum(combinations.get(x, 0) for x in v)) > 0} combinations = {k: sum_val for k, v in repl.items() if (sum_val := sum(combinations.get(x, 0) for x in v)) > 0}
letters = ((l, cnt) for key, cnt in combinations.items() for l in key) letters = {k: sum(map(itemgetter(1), v)) for k, v in groupby(sorted(combinations.items()), lambda x: x[0][0])}
letters = {k: sum(map(itemgetter(1), v)) for k, v in groupby(sorted(letters), itemgetter(0))}
letters[first[0]] += 1
letters[first[-1]] += 1 letters[first[-1]] += 1
print((max(letters.values()) - min(letters.values())) // 2) print(max(letters.values()) - min(letters.values()))