blob: 71dc021ae9ebcb275a5a21ff289aa0d7263d8826 [file] [log] [blame]
Samuel Shuertfab8b242023-12-02 10:45:16 -05001import { readFileSync } from 'fs'
2
3interface Game {
4 id: number,
5 red: number,
6 blue: number,
7 green: number
8}
9
10const input: string[] | Game[] = readFileSync('./input.txt').toString().split('\n');
11
12function getCubes(string: string, color?: 'red' | 'green' | 'blue'): number {
13 let regexp: RegExp;
14 switch (color) {
15 case 'red': {
16 regexp = /(\d+) red/g;
17 break;
18 }
19 case 'green': {
20 regexp = /(\d+) green/g;
21 break;
22 }
23 case 'blue': {
24 regexp = /(\d+) blue/g;
25 break;
26 }
27 default: {
28 regexp = /Game (\d+):/g;
29 break;
30 }
31 }
32 const matches = string.matchAll(regexp)
33 let max = 0;
34 for (const match of matches) {
35 if(parseInt(match[1]) > max) max = parseInt(match[1])
36 }
37
38 return max
39
40}
41
42const formatted = input.map(game => {
43
44 const id = getCubes(game)
45 const red = getCubes(game, 'red')
46 const blue = getCubes(game, 'blue')
47 const green = getCubes(game, 'green')
48
49 return {
50 id,
51 red,
52 green,
53 blue
54 } as Game
55})
56
57const maxes = {
58 red: 12,
59 green: 13,
60 blue: 14
61};
62
63// Part One
64((games: Game[]) => {
65 let sum = 0;
66 for(const game of games) {
67 if(
68 game.red <= maxes.red &&
69 game.blue <= maxes.blue &&
70 game.green <= maxes.green
71 ) sum += game.id
72 }
73 console.log(sum)
74})(formatted);
75
76//Part Two
77((games: Game[]) => {
78 let sum = 0;
79 for(const game of games) {
80 sum += game.red * game.green * game.blue
81 }
82 console.log(sum)
83})(formatted);