From c7bc2439a6d6cc9e82b7f8b15b0d97b43bd11278 Mon Sep 17 00:00:00 2001 From: Sebastian Seedorf Date: Wed, 15 Dec 2021 13:00:55 +0100 Subject: [PATCH] Day 14 (minified) --- day14/part1.py | 5 ++--- day14/part2.min.py | 4 ++++ day14/part2.py | 10 ++++------ 3 files changed, 10 insertions(+), 9 deletions(-) create mode 100644 day14/part2.min.py diff --git a/day14/part1.py b/day14/part1.py index 0f70d77..b8377eb 100644 --- a/day14/part1.py +++ b/day14/part1.py @@ -16,9 +16,8 @@ combinations = Counter(first[a:a+2] for a in range(len(first)-1)) 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} -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[first[0]] += 1 letters[first[-1]] += 1 -print((max(letters.values()) - min(letters.values())) // 2) +print(max(letters.values()) - min(letters.values())) diff --git a/day14/part2.min.py b/day14/part2.min.py new file mode 100644 index 0000000..6c66818 --- /dev/null +++ b/day14/part2.min.py @@ -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())) diff --git a/day14/part2.py b/day14/part2.py index f79f5f7..2cca34d 100644 --- a/day14/part2.py +++ b/day14/part2.py @@ -9,16 +9,14 @@ first = next(lines) next(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))} -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): 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(letters), itemgetter(0))} -letters[first[0]] += 1 +letters = {k: sum(map(itemgetter(1), v)) for k, v in groupby(sorted(combinations.items()), lambda x: x[0][0])} letters[first[-1]] += 1 -print((max(letters.values()) - min(letters.values())) // 2) +print(max(letters.values()) - min(letters.values()))