[py] Solve 2021_14
This commit is contained in:
parent
1dfb00952c
commit
2376d7a492
3 changed files with 171 additions and 0 deletions
51
py/2021/14.py
Normal file
51
py/2021/14.py
Normal 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
102
py/2021/input_14.txt
Normal 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
|
||||||
18
py/2021/input_14_example.txt
Normal file
18
py/2021/input_14_example.txt
Normal 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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue