diff options
Diffstat (limited to 'aoc_2023/day-05/part_1.ts')
-rw-r--r-- | aoc_2023/day-05/part_1.ts | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/aoc_2023/day-05/part_1.ts b/aoc_2023/day-05/part_1.ts new file mode 100644 index 0000000..bdbf05c --- /dev/null +++ b/aoc_2023/day-05/part_1.ts @@ -0,0 +1,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); +} |