From f76bfc2d781c0d9b27b8862682fbd51c6fb55af9 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Fri, 1 Dec 2023 22:25:51 -0700 Subject: day 2 --- aoc_2023/day-02/part_1.ts | 50 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 aoc_2023/day-02/part_1.ts (limited to 'aoc_2023/day-02/part_1.ts') diff --git a/aoc_2023/day-02/part_1.ts b/aoc_2023/day-02/part_1.ts new file mode 100644 index 0000000..dae0834 --- /dev/null +++ b/aoc_2023/day-02/part_1.ts @@ -0,0 +1,50 @@ +export const main = async (lines: string[]): Promise => { + const colors = new Map([ + ["red", 12], + ["green", 13], + ["blue", 14], + ]); + + const games = lines + .filter((x) => x) + .map((line) => line.split(":").at(-1) as string) + .map((line) => line.split(";").map((x) => x.trim())); + + const unplayableGames = new Set(); + + for (let i = 0; i < games.length; i++) { + const game = games[i]; + for (const play of game) { + const sets = play.split(",").map((x) => x.trim()); + for (const [num, color] of sets.map((s) => s.split(" "))) { + const totalColors = colors.get(color) ?? 0; + if (parseInt(num) > totalColors) { + unplayableGames.add(i + 1); + } + } + } + } + + const n = games.length; + const perfect = (n * (n + 1)) / 2; + + return perfect - Array.from(unplayableGames).reduce((acc, x) => acc + x, 0); +}; + +// + +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"); + + console.log("=== COMPUTATION ===\n"); + + const answer = await main(lines); + + console.log("\n=== /COMPUTATION ===\n"); + + console.log("=== ANSWER TO P1 ==="); + console.log(answer); +} -- cgit v1.2.3-70-g09d2