mirror of
https://github.com/peter-tanner/advent-of-code-2023.git
synced 2024-11-30 14:00:16 +08:00
Day 2 solutions 😊😊😊
This commit is contained in:
parent
1080d8a2c5
commit
60cbaac7df
41
day_2/parser.ts
Normal file
41
day_2/parser.ts
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
export interface Turn {
|
||||||
|
red: number;
|
||||||
|
green: number;
|
||||||
|
blue: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Game {
|
||||||
|
id: number;
|
||||||
|
turns: Turn[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export const parse_file = (input: string) => {
|
||||||
|
return input.split("\n").map((line) => {
|
||||||
|
const game: Game = { id: -1, turns: [] };
|
||||||
|
const parts = line.replace(/^Game /, "").split(":");
|
||||||
|
game.id = parseInt(parts[0]);
|
||||||
|
const turns = parts[1].split(";");
|
||||||
|
turns.map((turn) => {
|
||||||
|
const turn_struct: Turn = { red: 0, green: 0, blue: 0 };
|
||||||
|
turn
|
||||||
|
.trim()
|
||||||
|
.split(",")
|
||||||
|
.forEach((part) => {
|
||||||
|
const value = parseInt(part.trim().split(" ")[0]);
|
||||||
|
switch (part.trim().split(" ")[1]) {
|
||||||
|
case "red":
|
||||||
|
turn_struct.red = value;
|
||||||
|
break;
|
||||||
|
case "green":
|
||||||
|
turn_struct.green = value;
|
||||||
|
break;
|
||||||
|
case "blue":
|
||||||
|
turn_struct.blue = value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
game.turns.push(turn_struct);
|
||||||
|
});
|
||||||
|
return game;
|
||||||
|
});
|
||||||
|
};
|
23
day_2/part_1.ts
Normal file
23
day_2/part_1.ts
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
import * as fs from "fs";
|
||||||
|
import { Game, Turn, parse_file } from "./parser";
|
||||||
|
|
||||||
|
const MAX_CUBES: Turn = { red: 12, green: 13, blue: 14 };
|
||||||
|
|
||||||
|
const input = fs.readFileSync("input", "utf8");
|
||||||
|
|
||||||
|
const sum_possible_games = parse_file(input)
|
||||||
|
.map((game) =>
|
||||||
|
game.turns.reduce(
|
||||||
|
(valid, turn) =>
|
||||||
|
valid &&
|
||||||
|
turn.blue <= MAX_CUBES.blue &&
|
||||||
|
turn.red <= MAX_CUBES.red &&
|
||||||
|
turn.green <= MAX_CUBES.green,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
? game.id
|
||||||
|
: 0
|
||||||
|
)
|
||||||
|
.reduce((sum, game_id) => sum + game_id, 0);
|
||||||
|
|
||||||
|
console.log(sum_possible_games);
|
22
day_2/part_2.ts
Normal file
22
day_2/part_2.ts
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
import * as fs from "fs";
|
||||||
|
import { Game, Turn, parse_file } from "./parser";
|
||||||
|
|
||||||
|
const input = fs.readFileSync("input", "utf8");
|
||||||
|
|
||||||
|
const total_power = parse_file(input)
|
||||||
|
.map((game) => {
|
||||||
|
const min_cubes = game.turns.reduce(
|
||||||
|
(min_cubes, turn) => {
|
||||||
|
return {
|
||||||
|
blue: Math.max(turn.blue, min_cubes.blue),
|
||||||
|
red: Math.max(turn.red, min_cubes.red),
|
||||||
|
green: Math.max(turn.green, min_cubes.green),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
{ red: 0, blue: 0, green: 0 }
|
||||||
|
);
|
||||||
|
return min_cubes.blue * min_cubes.green * min_cubes.red;
|
||||||
|
})
|
||||||
|
.reduce((total_power, game_power) => total_power + game_power, 0);
|
||||||
|
|
||||||
|
console.log(total_power);
|
Loading…
Reference in New Issue
Block a user