[py] Solve 2021_14

This commit is contained in:
Joscha 2021-12-23 23:35:11 +00:00
parent 1dfb00952c
commit 2376d7a492
3 changed files with 171 additions and 0 deletions

51
py/2021/14.py Normal file
View file

@ -0,0 +1,51 @@
import argparse
from pathlib import Path
from collections import Counter
def step(pairs, rules):
result = Counter()
for pair, amount in pairs.items():
if pair in rules:
a, b = rules[pair]
result[a] += amount
result[b] += amount
else:
result[pair] += amount
return result
def count_chars(template, pairs):
chars = Counter()
for pair, amount in pairs.items():
chars[pair[0]] += amount
chars[template[-1]] += 1
return chars
def main():
parser = argparse.ArgumentParser()
parser.add_argument("file", type=Path)
args = parser.parse_args()
with open(args.file) as f:
template = next(f).strip()
next(f)
rules = {}
for line in f:
pair, char = line.strip().split(" -> ")
rules[pair] = (pair[0] + char, char + pair[1])
pairs = Counter(template[i:i+2] for i in range(len(template) - 1))
for i in range(10):
pairs = step(pairs, rules)
chars = count_chars(template, pairs).most_common()
print(f"Part 1: {chars[0][1] - chars[-1][1]}")
for i in range(30): # 40 steps total
pairs = step(pairs, rules)
chars = count_chars(template, pairs).most_common()
print(f"Part 2: {chars[0][1] - chars[-1][1]}")
if __name__ == "__main__":
main()

102
py/2021/input_14.txt Normal file
View file

@ -0,0 +1,102 @@
BNSOSBBKPCSCPKPOPNNK
HH -> N
CO -> F
BC -> O
HN -> V
SV -> S
FS -> F
CV -> F
KN -> F
OP -> H
VN -> P
PF -> P
HP -> H
FK -> K
BS -> F
FP -> H
FN -> V
VV -> O
PS -> S
SK -> N
FF -> K
PK -> V
OF -> N
VP -> K
KB -> H
OV -> B
CH -> F
SF -> F
NH -> O
NC -> N
SP -> N
NN -> F
OK -> S
BB -> S
NK -> S
FH -> P
FC -> S
OB -> P
VS -> P
BF -> S
HC -> V
CK -> O
NP -> K
KV -> S
OS -> V
CF -> V
FB -> C
HO -> S
BV -> V
KS -> C
HB -> S
SO -> N
PH -> C
PN -> F
OC -> F
KO -> F
VF -> V
CS -> O
VK -> O
FV -> N
OO -> K
NS -> S
KK -> C
FO -> S
PV -> S
CN -> O
VC -> P
SS -> C
PO -> P
BN -> N
PB -> N
PC -> H
SH -> K
BH -> F
HK -> O
VB -> P
NV -> O
NB -> C
CP -> H
NO -> K
PP -> N
CC -> S
CB -> K
VH -> H
SC -> C
KC -> N
SB -> B
BP -> P
KP -> K
SN -> H
KF -> K
KH -> B
HV -> V
HS -> K
NF -> B
ON -> H
BO -> P
VO -> K
OH -> C
HF -> O
BK -> H

View file

@ -0,0 +1,18 @@
NNCB
CH -> B
HH -> N
CB -> H
NH -> C
HB -> C
HC -> B
HN -> C
NN -> C
BH -> H
NC -> B
NB -> B
BN -> B
BB -> N
BC -> B
CC -> N
CN -> C