Skip to content

Commit d7fe790

Browse files
committed
2022 day 13
1 parent 4eb1e54 commit d7fe790

File tree

2 files changed

+509
-0
lines changed

2 files changed

+509
-0
lines changed

2022/day13/distress.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
const pairs = require("fs").readFileSync(`./input.txt`, "utf-8").split("\n\n"),
2+
num = Number.isFinite,
3+
compare = (l, r) => {
4+
if (num(l) && num(r)) {
5+
if (l < r) return 1;
6+
if (l > r) return -1;
7+
} else if (num(l)) return compare([l], r);
8+
else if (num(r)) return compare(l, [r]);
9+
else {
10+
if (l === undefined) return 1;
11+
else if (r === undefined) return -1;
12+
13+
for (let i = 0; i < Math.max(l.length, r.length); i++) {
14+
let comp = compare(l[i], r[i], i);
15+
if (comp !== 0) return comp;
16+
}
17+
18+
if (l.length < r.length) return 1;
19+
if (l.length > r.length) return -1;
20+
}
21+
22+
return 0;
23+
};
24+
25+
let inOrder = 0;
26+
27+
for (let j = 0; j < pairs.length; j++) {
28+
let pair = pairs[j].split("\n");
29+
30+
let packet1 = JSON.parse(pair[0]),
31+
packet2 = JSON.parse(pair[1]),
32+
maxlen = Math.max(packet1.length, packet2.length);
33+
34+
if (maxlen < 1) inOrder += j + 1;
35+
36+
for (let i = 0; i < maxlen; i++) {
37+
let left = packet1[i],
38+
right = packet2[i],
39+
ordered = compare(left, right);
40+
41+
if (ordered > 0) inOrder += j + 1;
42+
if (ordered !== 0) break;
43+
if (i === maxlen - 1) inOrder += j + 1;
44+
}
45+
}
46+
47+
console.log(`Sum of indices of pairs in order: ${inOrder}`); // Part 1
48+
49+
// Part 2
50+
const packets = pairs.flatMap((p) => p.split("\n")).concat(["[[2]]", "[[6]]"]);
51+
52+
let divider1 = 1,
53+
divider2 = 1;
54+
55+
for (let i = 0; i < packets.length; i++) {
56+
if (compare(JSON.parse(packets[i]), [[2]]) === 1) divider1++;
57+
if (compare(JSON.parse(packets[i]), [[6]]) === 1) divider2++;
58+
}
59+
60+
console.log(`Decoder key: ${divider1 * divider2}`);

0 commit comments

Comments
 (0)