blob: 71dc021ae9ebcb275a5a21ff289aa0d7263d8826 [file] [log] [blame]
import { readFileSync } from 'fs'
interface Game {
id: number,
red: number,
blue: number,
green: number
}
const input: string[] | Game[] = readFileSync('./input.txt').toString().split('\n');
function getCubes(string: string, color?: 'red' | 'green' | 'blue'): number {
let regexp: RegExp;
switch (color) {
case 'red': {
regexp = /(\d+) red/g;
break;
}
case 'green': {
regexp = /(\d+) green/g;
break;
}
case 'blue': {
regexp = /(\d+) blue/g;
break;
}
default: {
regexp = /Game (\d+):/g;
break;
}
}
const matches = string.matchAll(regexp)
let max = 0;
for (const match of matches) {
if(parseInt(match[1]) > max) max = parseInt(match[1])
}
return max
}
const formatted = input.map(game => {
const id = getCubes(game)
const red = getCubes(game, 'red')
const blue = getCubes(game, 'blue')
const green = getCubes(game, 'green')
return {
id,
red,
green,
blue
} as Game
})
const maxes = {
red: 12,
green: 13,
blue: 14
};
// Part One
((games: Game[]) => {
let sum = 0;
for(const game of games) {
if(
game.red <= maxes.red &&
game.blue <= maxes.blue &&
game.green <= maxes.green
) sum += game.id
}
console.log(sum)
})(formatted);
//Part Two
((games: Game[]) => {
let sum = 0;
for(const game of games) {
sum += game.red * game.green * game.blue
}
console.log(sum)
})(formatted);