Skip to content

Commit b45e64a

Browse files
committed
Solution for day 14 (2021)
1 parent 4c9cddd commit b45e64a

File tree

3 files changed

+165
-0
lines changed

3 files changed

+165
-0
lines changed

2021/14/index.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
const fs = require('fs')
2+
3+
const start = +new Date()
4+
fs.readFile(`${__dirname}/input.txt`, (_e, data) => {
5+
const { polymerTemplate, pairInsertionRules } = processInput(data.toString())
6+
console.log('Part 1', run(polymerTemplate, pairInsertionRules, 10))
7+
console.log('Part 2', run(polymerTemplate, pairInsertionRules, 40))
8+
console.log('Time:', new Date() - start, 'ms')
9+
})
10+
11+
function processInput(input) {
12+
const [polymerTemplate, rulesInput] = input.split('\n\n')
13+
const pairInsertionRules = new Map(rulesInput.split('\n').map(rule => rule.split(' -> ')))
14+
return { polymerTemplate, pairInsertionRules }
15+
}
16+
17+
function run(polymerTemplate, pairInsertionRules, iterations) {
18+
const pairs = {}
19+
const chars = {}
20+
for (let p = 0; p < polymerTemplate.length; p++) {
21+
chars[polymerTemplate[p]] = (chars[polymerTemplate[p]] || 0) + 1
22+
if (polymerTemplate[p + 1]) {
23+
const pair = polymerTemplate[p] + polymerTemplate[p + 1]
24+
pairs[pair] = (pairs[pair] || 0) + 1
25+
}
26+
}
27+
for (let i = 0; i < iterations; i++) {
28+
const currentPairs = Object.entries(pairs)
29+
for (let p in pairs) {
30+
pairs[p] = 0
31+
}
32+
currentPairs.forEach(([pair, tally]) => {
33+
const rule = pairInsertionRules.get(pair)
34+
if (rule) {
35+
const pair1 = pair[0] + rule
36+
const pair2 = rule + pair[1]
37+
chars[rule] = (chars[rule] || 0) + tally
38+
pairs[pair1] = (pairs[pair1] || 0) + tally
39+
pairs[pair2] = (pairs[pair2] || 0) + tally
40+
}
41+
})
42+
}
43+
const values = Object.values(chars).sort((a, b) => a - b)
44+
return values[values.length - 1] - values[0]
45+
}

2021/14/input.txt

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
SCSCSKKVVBKVFKSCCSOV
2+
3+
CP -> C
4+
SF -> S
5+
BH -> F
6+
SS -> N
7+
KB -> N
8+
NO -> N
9+
BP -> F
10+
NK -> P
11+
VP -> H
12+
OF -> O
13+
VH -> O
14+
FV -> F
15+
OP -> V
16+
FP -> B
17+
VB -> B
18+
OK -> S
19+
BS -> B
20+
SK -> P
21+
VV -> H
22+
PC -> S
23+
HV -> K
24+
PS -> N
25+
VS -> O
26+
HF -> B
27+
SV -> C
28+
HP -> O
29+
NF -> V
30+
HB -> F
31+
VO -> B
32+
VN -> N
33+
ON -> H
34+
KV -> K
35+
OV -> F
36+
HO -> H
37+
NB -> K
38+
CB -> F
39+
FF -> H
40+
NH -> F
41+
SN -> N
42+
PO -> O
43+
PH -> C
44+
HH -> P
45+
KF -> N
46+
OH -> N
47+
KS -> O
48+
FH -> H
49+
CC -> F
50+
CK -> N
51+
FC -> F
52+
CF -> H
53+
HN -> B
54+
OC -> F
55+
OB -> K
56+
FO -> P
57+
KP -> N
58+
NC -> P
59+
PN -> O
60+
PV -> B
61+
CO -> C
62+
CS -> P
63+
PP -> V
64+
FN -> B
65+
PK -> C
66+
VK -> S
67+
HS -> P
68+
OS -> N
69+
NP -> K
70+
SB -> F
71+
OO -> F
72+
CV -> V
73+
BB -> O
74+
SH -> O
75+
NV -> N
76+
BN -> C
77+
KN -> H
78+
KC -> C
79+
BK -> O
80+
KO -> S
81+
VC -> N
82+
KK -> P
83+
BO -> V
84+
BC -> V
85+
BV -> H
86+
SC -> N
87+
NN -> C
88+
CH -> H
89+
SO -> P
90+
HC -> F
91+
FS -> P
92+
VF -> S
93+
BF -> S
94+
PF -> O
95+
SP -> H
96+
FK -> N
97+
NS -> C
98+
PB -> S
99+
HK -> C
100+
CN -> B
101+
FB -> O
102+
KH -> O

2021/14/test.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
NNCB
2+
3+
CH -> B
4+
HH -> N
5+
CB -> H
6+
NH -> C
7+
HB -> C
8+
HC -> B
9+
HN -> C
10+
NN -> C
11+
BH -> H
12+
NC -> B
13+
NB -> B
14+
BN -> B
15+
BB -> N
16+
BC -> B
17+
CC -> N
18+
CN -> C

0 commit comments

Comments
 (0)