This repository has been archived on 2026-05-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2024-12-12 01:18:43 +01:00

58 lines
1.5 KiB
TypeScript

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;
}