blob: 53488b5e57cb65a120b673eeb85d79eea460e518 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import fs from "fs";
// Quick implementation of _.chunks
function chunks<T>(data: Array<T>, chunkSize: number) {
return data.reduce((acc, value, index) => {
// Initialize a new chunk
if (index % chunkSize === 0) acc.push([]);
acc[acc.length - 1].push(value);
return acc;
}, [] as T[][]);
}
function parseNumbers(s: string) {
return chunks(s.split(""), 3).map((chunk) => Number(chunk.join("")));
}
const result = fs
.readFileSync("./input.txt")
.toString()
.split("\n")
.slice(0, -1)
.map((line) => {
const [_cardStr, dataStr] = line.split(": ");
const [winning, existing] = dataStr.split("| ").map(parseNumbers);
return { winning, existing };
})
.map((data) => data.existing.filter((x) => data.winning.includes(x)).length)
.reduce((acc, winCount) => acc + (winCount ? 2 ** (winCount - 1) : 0), 0);
console.log({ result });
|