summaryrefslogtreecommitdiff
path: root/aoc_2023/day-05/part_1.ts
diff options
context:
space:
mode:
authorElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-12-05 20:42:06 -0700
committerElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-12-05 20:42:06 -0700
commitc874f28eec621a0fe8c86a5e586ac34b43acca6e (patch)
treefacdacb5c19d74c06cea3e7faa01c921395f7135 /aoc_2023/day-05/part_1.ts
parent97095a87955191f273d068889e8e62266472121b (diff)
downloadaoc-c874f28eec621a0fe8c86a5e586ac34b43acca6e.tar.gz
aoc-c874f28eec621a0fe8c86a5e586ac34b43acca6e.zip
composition of piecewise functions (jesus)
Diffstat (limited to 'aoc_2023/day-05/part_1.ts')
-rw-r--r--aoc_2023/day-05/part_1.ts56
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);
+}