import { LoadInput } from "../common.ts"; import { ParseGameStrings, type Game, type Set } from "./2_common.ts"; const test = [ "Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green", "Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue", "Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red", "Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red", "Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green", ]; const input = await LoadInput(2); const parsedGames = ParseGameStrings(input); /** * The target amount of each colored cube in a games bag * * As reported by the elf, only games with the maximum amount of each * color of cube specified here are valid */ const maxCubes: Set = { red: 12, green: 13, blue: 14, }; let sumOfValidIDs = 0; for (const game of parsedGames) { if (ValidateGames(game, maxCubes)) { sumOfValidIDs += game.ID; } } console.log(`The sum of valid game ID's is: ${sumOfValidIDs}`); /** * Validate whether a game was possible * * A game is only valid if none of the sets in the game played * contained more of than the target maximum for that color. * * @param {Game} gameToValidate A game to validate * @param {Set} targetMaximum The maximum of each color in a set required for a game to be valid */ function ValidateGames(gameToValidate: Game, targetMaximum: Set): boolean { for(const set of gameToValidate.Sets) { if (set.red > targetMaximum.red || set.green > targetMaximum.green || set.blue > targetMaximum.blue) { return false; } } return true; }