This commit is contained in:
Stefan Harmuth 2021-12-14 06:43:48 +01:00
parent 1d3df3bdb8
commit 55e62174db
6 changed files with 389 additions and 0 deletions

47
day14.py Normal file
View File

@ -0,0 +1,47 @@
from tools.aoc import AOCDay
from typing import Any, Dict, List
def getInitialDicts(puzzle: List[str]) -> (Dict[str, int], Dict[str, int], Dict[str, str]):
polymer = puzzle[0]
inserts = {}
for p1 in puzzle[2:]:
pair, insert_char = p1.split(" -> ")
inserts[pair] = insert_char
pairs = {}
charcount = {}
for x in range(len(polymer) - 1):
pairs[polymer[x:x + 2]] = pairs.get(polymer[x:x + 2], 0) + 1
charcount[polymer[x]] = charcount.get(polymer[x], 0) + 1
charcount[polymer[-1]] = charcount.get(polymer[-1], 0) + 1
return pairs, charcount, inserts
def insert(pairs: Dict[str, int], charcount: Dict[str, int], inserts: Dict[str, str], count: int):
for _ in range(count):
new_pairs = {}
for p in pairs:
p1 = p[0] + inserts[p]
p2 = inserts[p] + p[1]
charcount[inserts[p]] = charcount.get(inserts[p], 0) + pairs[p]
new_pairs[p1] = new_pairs.get(p1, 0) + pairs[p]
new_pairs[p2] = new_pairs.get(p2, 0) + pairs[p]
pairs = new_pairs
class Day(AOCDay):
test_solutions_p1 = [1588, 3230]
test_solutions_p2 = [2188189693529, 3542388214529]
def part1(self) -> Any:
pairs, charcount, inserts = getInitialDicts(self.getInput())
insert(pairs, charcount, inserts, 10)
return max(charcount.values()) - min(charcount.values())
def part2(self) -> Any:
pairs, charcount, inserts = getInitialDicts(self.getInput())
insert(pairs, charcount, inserts, 40)
return max(charcount.values()) - min(charcount.values())

102
inputs/input14 Normal file
View File

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

18
inputs/test_input14_1_0 Normal file
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

102
inputs/test_input14_1_1 Normal file
View File

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

18
inputs/test_input14_2_0 Normal file
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

102
inputs/test_input14_2_1 Normal file
View File

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