summaryrefslogtreecommitdiff
path: root/aoc_2023/day-04/part_1.ts
diff options
context:
space:
mode:
authorElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-12-03 22:22:47 -0700
committerElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-12-03 22:22:47 -0700
commit97095a87955191f273d068889e8e62266472121b (patch)
treed262176f71a65f43f102baf13bf0e83098c69505 /aoc_2023/day-04/part_1.ts
parent33c0bad9e3724fb939dc5fb069e14613d86fa4be (diff)
downloadaoc-97095a87955191f273d068889e8e62266472121b.tar.gz
aoc-97095a87955191f273d068889e8e62266472121b.zip
day 04
Diffstat (limited to 'aoc_2023/day-04/part_1.ts')
-rw-r--r--aoc_2023/day-04/part_1.ts48
1 files changed, 48 insertions, 0 deletions
diff --git a/aoc_2023/day-04/part_1.ts b/aoc_2023/day-04/part_1.ts
new file mode 100644
index 0000000..a026c5e
--- /dev/null
+++ b/aoc_2023/day-04/part_1.ts
@@ -0,0 +1,48 @@
+export const main = async (lines: string[]): Promise<number | string> => {
+ let sum = 0;
+
+ for (const line of lines) {
+ const [cardS, numbersS] = line.split(" | ");
+ const cardNums = cardS
+ .split(":")
+ .at(1)!
+ .split(" ")
+ .filter((x) => x)
+ .map((x) => x.trim())
+ .map((x) => parseInt(x));
+ const winners = numbersS
+ .split(" ")
+ .filter((x) => x)
+ .map((x) => x.trim())
+ .map((x) => parseInt(x));
+
+ console.log(cardNums, winners);
+
+ const winnerSet = new Set<number>(winners);
+ const wins = cardNums.reduce(
+ (acc, x) => acc + (winnerSet.has(x) ? 1 : 0),
+ 0
+ );
+ if (wins > 0) sum += Math.pow(2, wins - 1);
+ }
+
+ return sum;
+};
+
+//
+
+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);
+}