Initial commit
This commit is contained in:
commit
f242d2b0df
420 changed files with 62521 additions and 0 deletions
57
2023/day02/day02.ts
Normal file
57
2023/day02/day02.ts
Normal file
|
@ -0,0 +1,57 @@
|
|||
// const input: string = await Bun.file("input").text();
|
||||
import { readFileSync } from "node:fs";
|
||||
const input: string = readFileSync("input", "utf8");
|
||||
|
||||
type Reveal = {
|
||||
red: number;
|
||||
green: number;
|
||||
blue: number;
|
||||
};
|
||||
|
||||
type Game = { id: number; reveals: Reveal[] };
|
||||
|
||||
function parse_reveal(reveal_str: string): Reveal {
|
||||
let r = { red: 0, green: 0, blue: 0 };
|
||||
reveal_str
|
||||
.split(", ")
|
||||
.map((s) => (r[s.split(" ")[1]] = Number(s.split(" ")[0])));
|
||||
return r;
|
||||
}
|
||||
|
||||
function parse_game(game_str: string): Game {
|
||||
let [game, reveals] = game_str.split(": ");
|
||||
let game_id = Number(game.split(" ")[1]);
|
||||
let r = reveals.split("; ").map(parse_reveal);
|
||||
return { id: game_id, reveals: r };
|
||||
}
|
||||
|
||||
let games = input
|
||||
.split("\n")
|
||||
.filter((s) => s.length > 0)
|
||||
.map(parse_game);
|
||||
|
||||
let part1 = (games: Game[]): number =>
|
||||
games
|
||||
.filter((g) =>
|
||||
g.reveals.every((r) => r.red <= 12 && r.green <= 13 && r.blue <= 14),
|
||||
)
|
||||
.map((g) => g.id)
|
||||
.reduce((a, b) => a + b);
|
||||
|
||||
let part2 = (games: Game[]): number =>
|
||||
games
|
||||
.map((g) =>
|
||||
g.reveals.reduce(
|
||||
(o, r) => ({
|
||||
red: Math.max(o.red, r.red),
|
||||
green: Math.max(o.green, r.green),
|
||||
blue: Math.max(o.blue, r.blue),
|
||||
}),
|
||||
{ red: 0, green: 0, blue: 0 },
|
||||
),
|
||||
)
|
||||
.map((r) => r.red * r.green * r.blue)
|
||||
.reduce((a, b) => a + b);
|
||||
|
||||
console.log(part1(games));
|
||||
console.log(part2(games));
|
Loading…
Add table
Add a link
Reference in a new issue