From 6136c92fd67cde041321b45654612d00e6b66edc Mon Sep 17 00:00:00 2001 From: Pascal Lais Date: Tue, 14 Dec 2021 10:56:18 +0100 Subject: [PATCH] Update day 14 solution Use collections.counter instead of collections.defaultdict --- day-14/day-14.py | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/day-14/day-14.py b/day-14/day-14.py index a02aac3..e3cc76d 100644 --- a/day-14/day-14.py +++ b/day-14/day-14.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 from pathlib import Path -from collections import defaultdict +from collections import Counter def solve(input, part, num_cycles): @@ -8,23 +8,16 @@ def solve(input, part, num_cycles): template = input[0].strip() rules = {k: v for line in input[2:] for k, v in [line.strip().split(' -> ')]} - counts = defaultdict(int) - for i in range(len(template) - 1): - counts[template[i: i + 2]] += 1 + counts = Counter([template[i: i + 2] for i in range(len(template - 1))]) + char_counts = Counter(template) for _ in range(num_cycles): for k, c in counts.copy().items(): if k in rules: counts[k] -= c counts[k[0] + rules[k]] += c counts[rules[k] + k[1]] += c - char_counts = defaultdict(int) - for k in counts: - char_counts[k[0]] += counts[k] - char_counts[k[1]] += counts[k] - char_counts[template[0]] += 1 - char_counts[template[-1]] += 1 - counts = [char_counts[k] // 2 for k in char_counts] - result = max(counts) - min(counts) + char_counts[rules[k]] += 1 + result = char_counts.most_common(1)[1] - char_counts.most_common()[-1][1] print("Part", part, "result:", result)