summaryrefslogtreecommitdiff
path: root/aoc_2023/day-02/part_1.ts
diff options
context:
space:
mode:
authorElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-12-01 22:25:51 -0700
committerElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-12-01 22:25:51 -0700
commitf76bfc2d781c0d9b27b8862682fbd51c6fb55af9 (patch)
treed4ca40cdb0ea7a411de1688993662db3add04420 /aoc_2023/day-02/part_1.ts
parent4959d7df0195657bd787b60dedf8b0935f9733e6 (diff)
downloadaoc-f76bfc2d781c0d9b27b8862682fbd51c6fb55af9.tar.gz
aoc-f76bfc2d781c0d9b27b8862682fbd51c6fb55af9.zip
day 2
Diffstat (limited to 'aoc_2023/day-02/part_1.ts')
-rw-r--r--aoc_2023/day-02/part_1.ts50
1 files changed, 50 insertions, 0 deletions
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<number | string> => {
+ const colors = new Map<string, number>([
+ ["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<number>();
+
+ 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);
+}