day14
This commit is contained in:
parent
1d3df3bdb8
commit
55e62174db
47
day14.py
Normal file
47
day14.py
Normal 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
102
inputs/input14
Normal 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
18
inputs/test_input14_1_0
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
|
||||
102
inputs/test_input14_1_1
Normal file
102
inputs/test_input14_1_1
Normal 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
18
inputs/test_input14_2_0
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
|
||||
102
inputs/test_input14_2_1
Normal file
102
inputs/test_input14_2_1
Normal 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
|
||||
Loading…
Reference in New Issue
Block a user