Use collections.counter instead of collections.defaultdict
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from collections import defaultdict
|
from collections import Counter
|
||||||
|
|
||||||
|
|
||||||
def solve(input, part, num_cycles):
|
def solve(input, part, num_cycles):
|
||||||
@@ -8,23 +8,16 @@ def solve(input, part, num_cycles):
|
|||||||
template = input[0].strip()
|
template = input[0].strip()
|
||||||
rules = {k: v
|
rules = {k: v
|
||||||
for line in input[2:] for k, v in [line.strip().split(' -> ')]}
|
for line in input[2:] for k, v in [line.strip().split(' -> ')]}
|
||||||
counts = defaultdict(int)
|
counts = Counter([template[i: i + 2] for i in range(len(template - 1))])
|
||||||
for i in range(len(template) - 1):
|
char_counts = Counter(template)
|
||||||
counts[template[i: i + 2]] += 1
|
|
||||||
for _ in range(num_cycles):
|
for _ in range(num_cycles):
|
||||||
for k, c in counts.copy().items():
|
for k, c in counts.copy().items():
|
||||||
if k in rules:
|
if k in rules:
|
||||||
counts[k] -= c
|
counts[k] -= c
|
||||||
counts[k[0] + rules[k]] += c
|
counts[k[0] + rules[k]] += c
|
||||||
counts[rules[k] + k[1]] += c
|
counts[rules[k] + k[1]] += c
|
||||||
char_counts = defaultdict(int)
|
char_counts[rules[k]] += 1
|
||||||
for k in counts:
|
result = char_counts.most_common(1)[1] - char_counts.most_common()[-1][1]
|
||||||
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)
|
|
||||||
print("Part", part, "result:", result)
|
print("Part", part, "result:", result)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user