summaryrefslogtreecommitdiff
path: root/day-4/script.ts
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 });