Day 2 complete!
Change-Id: Id4e26fb1f393e7ad6af9f7f928ba126830cf37ab
Reviewed-on: https://git.clicks.codes/c/Coded/AoC2023/+/97
diff --git a/day 2/index.ts b/day 2/index.ts
new file mode 100644
index 0000000..71dc021
--- /dev/null
+++ b/day 2/index.ts
@@ -0,0 +1,83 @@
+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);
\ No newline at end of file