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
