This commit is contained in:
2023-12-17 10:55:43 +01:00
parent 0f65668287
commit 05b6ab149f
4 changed files with 152 additions and 7 deletions
+5 -3
View File
@@ -7,8 +7,10 @@
"args": [ "args": [
"--experimental-specifier-resolution=node", "--experimental-specifier-resolution=node",
"--trace-warnings", "--trace-warnings",
"--loader", // "--loader",
"ts-node/esm", // "ts-node/esm",
"--import",
"data:text/javascript,import { register } from 'node:module'; import { pathToFileURL } from 'node:url'; register('ts-node/esm', pathToFileURL('./'));",
"${file}" "${file}"
], ],
"skipFiles": [ "skipFiles": [
@@ -16,4 +18,4 @@
], ],
}, },
] ]
} }
+63 -4
View File
@@ -1,9 +1,68 @@
import { open } from 'node:fs/promises'; import { open } from 'node:fs/promises';
const file = await open('./inputs/16'); const path = './inputs/16'
let input = (await file.readFile()).toString().split('\n') const input = (await (await open(path)).readFile()).toString().split('\n').map(e => e.split(""))
const process = (await (await open(path)).readFile()).toString().split('\n').map(e => e.split("").map(e => [] as Coords[]))
function ray(position: { x: number, y: number }, direction: { x: number, y: number }) { type Coords = { x: number, y: number }
} function moveForward({ x, y }: Coords, direction: Coords) {
ray({ x: x + direction.x, y: y + direction.y }, direction)
}
function ray({ x, y }: Coords, direction: Coords) {
if (input[y] === undefined) {
return
}
const current = input[y][x]
if (current === undefined) {
return
}
if (process[y][x].find(e => e.x == direction.x && e.y == direction.y)) {
return
}
process[y][x].push(direction)
if (current === '\\') {
direction = { x: direction.y, y: direction.x }
moveForward({ x, y }, direction)
return
}
if (current === '/') {
direction = { x: -direction.y, y: -direction.x }
moveForward({ x, y }, direction)
return
}
if (current === '|') {
if (direction.x === 0) {
moveForward({ x, y }, direction)
return
}
moveForward({ x, y }, { x: 0, y: 1 })
moveForward({ x, y }, { x: 0, y: -1 })
return
}
if (current === '-') {
if (direction.y === 0) {
moveForward({ x, y }, direction)
return
}
moveForward({ x, y }, { x: 1, y: 0 })
moveForward({ x, y }, { x: -1, y: 0 })
return
}
moveForward({ x, y }, direction)
}
ray({ x: 0, y: 0 }, { x: 1, y: 0 })
console.log(process.flat(1).reduce((acc, e) => e.length > 0 ? acc + 1 : acc, 0))
+74
View File
@@ -0,0 +1,74 @@
import { open } from 'node:fs/promises';
const path = './inputs/16'
const file1 = (await open(path))
const file2 = (await open(path))
const input = (await file1.readFile()).toString().split('\n').map(e => e.split(""))
const process = (await file2.readFile()).toString().split('\n').map(e => e.split("").map(e => [] as Coords[]))
type Coords = { x: number, y: number }
function moveForward({ x, y }: Coords, direction: Coords) {
ray({ x: x + direction.x, y: y + direction.y }, direction)
}
function ray({ x, y }: Coords, direction: Coords) {
if (input[y] === undefined) {
return
}
const current = input[y][x]
if (current === undefined) {
return
}
if (process[y][x].find(e => e.x == direction.x && e.y == direction.y)) {
return
}
process[y][x].push(direction)
if (current === '\\') {
direction = { x: direction.y, y: direction.x }
moveForward({ x, y }, direction)
return
}
if (current === '/') {
direction = { x: -direction.y, y: -direction.x }
moveForward({ x, y }, direction)
return
}
if (current === '|') {
if (direction.x === 0) {
moveForward({ x, y }, direction)
return
}
moveForward({ x, y }, { x: 0, y: 1 })
moveForward({ x, y }, { x: 0, y: -1 })
return
}
if (current === '-') {
if (direction.y === 0) {
moveForward({ x, y }, direction)
return
}
moveForward({ x, y }, { x: 1, y: 0 })
moveForward({ x, y }, { x: -1, y: 0 })
return
}
moveForward({ x, y }, direction)
}
ray({ x: 0, y: 0 }, { x: 1, y: 0 })
console.log(process.flat(1).reduce((acc, e) => e.length > 0 ? acc + 1 : acc, 0))
await Promise.all([file1.close(), file2.close()])
+10
View File
@@ -0,0 +1,10 @@
.|...\....
|.-.\.....
.....|-...
........|.
..........
.........\
..../.\\..
.-.-/..|..
.|....-|.\
..//.|....