diff --git a/day 4/index.ts b/day 4/index.ts
new file mode 100644
index 0000000..8643cc2
--- /dev/null
+++ b/day 4/index.ts
@@ -0,0 +1,78 @@
+import { readFileSync } from "fs";
+
+const input = readFileSync('day 4/input.txt').toString().split('\n');
+
+interface Card {
+    id: number,
+    winningNums: number[],
+    cardNums: number[]
+}
+
+const cards: Card[] = [];
+
+for (const line of input) {
+    const id: number = parseInt(line.match(/Card\s+(\d+)/)![1])
+    const withoutCardId = line.split(': ')[1]
+    const unformattedWinNums = withoutCardId.split('|')[0].trim().replace(/\s+/g, ' ');
+    const unformattedCardNums = withoutCardId.split('|')[1].trim().replace(/\s+/g, ' ');
+    const winningNums = unformattedWinNums.split(' ').map(i => parseInt(i));
+    const cardNums = unformattedCardNums.split(' ').map(i => parseInt(i));
+
+    cards.push({
+        id,
+        winningNums,
+        cardNums
+    })
+}
+
+const findMatches = (card: Card): number[] => {
+    const matches: number[] = []
+    card.cardNums.forEach(num => {
+        card.winningNums.includes(num) ? matches.push(num) : void 0;
+    })
+
+    return matches
+}
+
+// Part 1
+(() => {
+    let sum = 0;
+    for(const card of cards) {
+    
+        const matches = findMatches(card);
+        if(!(matches.length > 0)) continue;
+        let mult: number = 0;
+        matches.forEach((i, idx) => {
+            idx === 0 ? mult = 1 : mult *= 2
+        })
+    
+        sum += mult ?? 0
+        
+    }
+    console.log(`(Part 1) Points: ${sum}`)
+})();
+
+// Part 2
+
+interface newCard extends Card {
+    copies: number
+}
+
+(() => {
+    const newCards: newCard[] = cards.map(card => {
+        return {...card, copies: 1}
+    });
+
+    for(let i = 0; i < newCards.length; i++) {
+        const card = newCards[i]
+        const matchCount = findMatches(card).length;
+        for(let j = matchCount; j > 0; j--) {
+            newCards[i+j].copies += (1 * card.copies);
+        }
+
+    }
+
+    console.log(`(Part 2) Total Scratchcards: ${newCards.reduce((acc, curr) => {
+        return acc + curr.copies;
+      }, 0)}`)
+})();
\ No newline at end of file
diff --git a/day 4/testdata.txt b/day 4/testdata.txt
new file mode 100644
index 0000000..71f208a
--- /dev/null
+++ b/day 4/testdata.txt
@@ -0,0 +1,6 @@
+Card 1: 41 48 83 86 17 | 83 86  6 31 17  9 48 53
+Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
+Card 3:  1 21 53 59 44 | 69 82 63 72 16 21 14  1
+Card 4: 41 92 73 84 69 | 59 84 76 51 58  5 54 83
+Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
+Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11
\ No newline at end of file
