Files
Advent-of-code/2024/6.1.ts
T
2024-12-06 10:26:15 +01:00

81 lines
1.3 KiB
TypeScript

import { open } from "node:fs/promises";
const file = await open("./2024/inputs/6");
const map: string[][] = []
for await (const line of file.readLines()) {
map.push(line.split(""))
}
type Vector2 = {
X: number,
Y: number
}
// 0: UP
// 1: RIGHT
// 2: DOWN
// 3: LEFT
const directions: Vector2[] = [{
X: 0,
Y: -1
},
{
X: 1,
Y: 0
},
{
X: 0,
Y: 1
},
{
X: -1,
Y: 0
}]
const height = map.length
const width = map[0].length
let d = 0
const startY = map.findIndex(l => l.includes("^"))
const startX = map[startY].indexOf("^")
const position: Vector2 = {
X: startX,
Y: startY
}
function getNextCoordinates(): Vector2 {
return {
X: position.X + directions[d].X,
Y: position.Y + directions[d].Y
}
}
function getTile({ X, Y }: Vector2) {
if (X < 0 || Y < 0 || X >= width || Y >= height) {
return null
}
return map[Y][X]
}
function rotate() {
d = (d + 1) % 4
}
function moveForward() {
Object.assign(position, getNextCoordinates())
}
while (getTile(getNextCoordinates())) {
const tile = getTile(getNextCoordinates())
if (tile == "#") {
rotate()
} else {
moveForward()
}
map[position.Y][position.X] = "X"
}
console.log(map.reduce((acc, l) => l.reduce((acc, t) => t == "X" ? acc + 1 : acc, 0) + acc, 0))