From cab49b7af2282fdb96ab78c2894d5a56e0176ac8 Mon Sep 17 00:00:00 2001 From: Alix von Schirp Date: Thu, 12 Dec 2024 01:18:43 +0100 Subject: [PATCH] Day 4 --- Day 04/Part 1/index.ts | 58 ++++++++++++++++++++++++++++++++++++++++++ Day 04/Part 2/index.ts | 43 +++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 Day 04/Part 1/index.ts create mode 100644 Day 04/Part 2/index.ts diff --git a/Day 04/Part 1/index.ts b/Day 04/Part 1/index.ts new file mode 100644 index 0000000..bf039b6 --- /dev/null +++ b/Day 04/Part 1/index.ts @@ -0,0 +1,58 @@ +import fs from 'node:fs'; + +export default function runner(input: string) { + fs.readFile(`./${input}`, 'utf8', async (err, data) => { + if (err) throw err; + let count = 0; + let grid: string[][] = [] + + data.split("\n").forEach((value, index) => { + for (let i = 0; i < value.length; i++) { + if (grid[i] === undefined) grid[i] = [] + if (grid[i] === undefined) throw new Error(); + // @ts-ignore + grid[i][index] = value.charAt(i) + } + }) + + for (let x = 0; x < grid.length; x++) { + // @ts-ignore + for (let y = 0; y < grid[x].length; y++) { + const found = findWord(grid, x, y, "X") + count+=found; + } + } + + console.log(count) + }) +} + +function findWord(grid: string[][], x: number, y: number, char: string, dx: number = 0, dy: number = 0): number { + // @ts-ignore + if (x < 0 || x === grid.length || y < 0 || y === grid[x].length) { + return 0; + } + // @ts-ignore + if (grid[x][y] === char) { + switch (char) { + case 'X': + let found = 0; + for (let dX = -1; dX < 2; dX++) { + for (let dY = -1; dY < 2; dY++) { + if (dX === 0 && dY === 0) continue; + if (findWord(grid, x + dX, y + dY, 'M', dX, dY) != 0) found++; + } + } + return found; + case 'M': + return findWord(grid, x + dx, y + dy, 'A', dx, dy) + case 'A': + return findWord(grid, x + dx, y + dy, 'S', dx, dy) + case 'S': + return 1; + } + } else { + return 0; + } + return 0; +} \ No newline at end of file diff --git a/Day 04/Part 2/index.ts b/Day 04/Part 2/index.ts new file mode 100644 index 0000000..82e71ab --- /dev/null +++ b/Day 04/Part 2/index.ts @@ -0,0 +1,43 @@ +import fs from 'node:fs'; + +export default function runner(input: string) { + fs.readFile(`./${input}`, 'utf8', async (err, data) => { + if (err) throw err; + let count = 0; + let grid: string[][] = [] + + data.split("\n").forEach((value, index) => { + for (let i = 0; i < value.length; i++) { + if (grid[i] === undefined) grid[i] = [] + if (grid[i] === undefined) throw new Error(); + // @ts-ignore + grid[i][index] = value.charAt(i) + } + }) + + for (let x = 0; x < grid.length; x++) { + // @ts-ignore + for (let y = 0; y < grid[x].length; y++) { + const found = findWord(grid, x, y) + if (found) count++; + } + } + + console.log(count) + }) +} + +function findWord(grid: string[][], x: number, y: number): boolean { + // @ts-ignore + if (x < 1 || x === grid.length-1 || y < 1 || y === grid[x].length-1) { + return false; + } + + // @ts-ignore + return grid[x][y] === 'A' && ((grid[x-1][y-1] == "M" && grid[x+1][y+1] == 'S') || (grid[x-1][y-1] == "S" && grid[x+1][y+1] == 'M')) && ((grid[x+1][y-1] == "M" && grid[x-1][y+1] == 'S') || (grid[x+1][y-1] == "S" && grid[x-1][y+1] == 'M')) +} + + +// M . M +// . A . +// S . S \ No newline at end of file