Skip to content

Commit 701ab1c

Browse files
committed
refactor
1 parent 4db8ae2 commit 701ab1c

File tree

1 file changed

+12
-13
lines changed

1 file changed

+12
-13
lines changed

src/2024/day16.js

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ function parse(input) {
77
return { map, start: { x, y, direction: "right" }, end: { x: ex, y: ey } };
88
}
99

10-
function getNeighbors(current, map) {
10+
function getNeighbors(map, current) {
1111
const opposite = { up: "down", down: "up", left: "right", right: "left" };
1212
let neighbors = [
1313
{ x: current.x - 1, y: current.y, direction: "left" },
@@ -25,22 +25,22 @@ function getNeighbors(current, map) {
2525
return neighbors;
2626
}
2727

28-
function solve(input) {
28+
export function solve(input) {
29+
const key = p => `${p.x},${p.y},${p.direction}`;
2930
let { map, start, end } = parse(input);
3031
let curr = { ...start, score: 0, path: new Set([`${start.x},${start.y}`]) };
3132
let queue = [curr];
32-
let visited = new Map();
33-
let results = [{ score: Infinity }];
34-
const key = p => `${p.x},${p.y},${p.direction}`;
35-
visited.set(key(curr), curr);
33+
let visited = new Map([[key(curr), curr]]);
34+
let score = Infinity;
35+
let tiles;
3636
while (queue.length > 0) {
3737
curr = queue.shift();
3838
if (curr.x === end.x && curr.y === end.y) {
39-
if (curr.score < results[0].score) results = [curr];
40-
if (curr.score === results[0].score) results.push(curr);
39+
if (curr.score < score) tiles = curr.path.size;
40+
score = Math.min(score, curr.score);
4141
continue;
4242
}
43-
getNeighbors(curr, map).forEach(n => {
43+
getNeighbors(map, curr).forEach(n => {
4444
const prev = visited.get(key(n));
4545
if (!prev || prev.score > n.score) {
4646
queue.push(n);
@@ -50,14 +50,13 @@ function solve(input) {
5050
}
5151
});
5252
}
53-
return results;
53+
return { score, tiles };
5454
}
5555

5656
export function part1(input) {
57-
return solve(input)[0].score;
57+
return solve(input).score;
5858
}
5959

6060
export function part2(input) {
61-
const results = solve(input).map(result => result.path);
62-
return results.reduce((acc, next) => acc.union(next)).size;
61+
return solve(input).tiles;
6362
}

0 commit comments

Comments
 (0)