summaryrefslogtreecommitdiff
path: root/aoc_2023/day-05/part_1.ts
blob: bdbf05ca01726a8f5a2540205ab2b498fa78dd2d (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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
export const main = async (lines: string[]): Promise<number | string> => {
  const maps: number[][][] = [];

  const seeds = lines[0]
    .split(":")
    .at(1)!
    .split(" ")
    .filter((x) => x)
    .map((x) => parseInt(x));

  for (const line of lines.slice(1, lines.length)) {
    if (!line) continue;

    if (line.includes("to")) {
      maps.push([]);
      continue;
    }
    console.log(maps);

    const currMap = maps.at(-1);
    const [dest, source, range] = line.split(" ").map((x) => parseInt(x));
    if (currMap) {
      currMap.push([dest, source, range]);
    }
  }

  let min = Math.pow(2, 32);
  for (const seed of seeds) {
    const location = maps.reduce((acc, map) => {
      const [dest, source, _range] = map.find(
        ([_dest, source, range]) => acc - source < range && acc - source >= 0
      ) ?? [acc, acc];
      return acc - source + dest;
    }, seed);
    min = Math.min(min, location);
  }
  return min;
};

//

const isrun = process.argv.length > 1 && process.argv[1] === import.meta.path;
if (isrun) {
  const file = Bun.file("./problem.txt");
  const text = await file.text();
  const lines = text.split("\n").filter((x) => x && x.length);

  console.log("=== COMPUTATION ===\n");

  const answer = await main(lines);

  console.log("\n=== /COMPUTATION ===\n");

  console.log("=== ANSWER TO P1 ===");
  console.log(answer);
}