mirror of
https://github.com/Baipyrus/AoC-23.git
synced 2024-12-25 11:31:46 +00:00
try constrain directions
This commit is contained in:
parent
2e6ace81b7
commit
e6d4a79975
@ -14,8 +14,17 @@ const input = readFileSync("input.txt")
|
|||||||
g: 0,
|
g: 0,
|
||||||
h: 0,
|
h: 0,
|
||||||
p: null,
|
p: null,
|
||||||
|
d: null
|
||||||
})));
|
})));
|
||||||
const man_dist = (a, b) => Math.abs(b.x - a.x) + Math.abs(b.y - a.y);
|
const man_dist = (a, b) => Math.abs(b.x - a.x) + Math.abs(b.y - a.y);
|
||||||
|
const get_dir = (e) => {
|
||||||
|
const { d } = e;
|
||||||
|
if (!d) return e.c;
|
||||||
|
if (d.x === 1 && d.y === 0) return ">";
|
||||||
|
if (d.x === 0 && d.y === 1) return "v";
|
||||||
|
if (d.x === -1 && d.y === 0) return "<";
|
||||||
|
if (d.x === 0 && d.y === -1) return "^";
|
||||||
|
};
|
||||||
|
|
||||||
const start = input[0][0];
|
const start = input[0][0];
|
||||||
const end = input.slice(-1)[0].slice(-1)[0];
|
const end = input.slice(-1)[0].slice(-1)[0];
|
||||||
@ -46,17 +55,23 @@ while (open.length > 0) {
|
|||||||
const next = input[ny][nx];
|
const next = input[ny][nx];
|
||||||
if (!next || closed.includes(next)) continue;
|
if (!next || closed.includes(next)) continue;
|
||||||
|
|
||||||
|
const dir_check = current.d?.x === i && current.d?.y === j;
|
||||||
|
const direction = { x: i, y: j, c: dir_check ? (current?.c ?? 0) + 1 : 1 };
|
||||||
|
if (direction.c > 3) continue;
|
||||||
|
|
||||||
const nd = current.g + next.c;
|
const nd = current.g + next.c;
|
||||||
if (open.includes(next)) {
|
if (open.includes(next)) {
|
||||||
if (nd < next.g) {
|
if (nd < next.g) {
|
||||||
next.g = nd;
|
next.g = nd;
|
||||||
next.p = current;
|
next.p = current;
|
||||||
|
next.d = direction;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
next.g = nd;
|
next.g = nd;
|
||||||
next.p = current;
|
next.p = current;
|
||||||
|
next.d = direction;
|
||||||
next.h = man_dist(next, end);
|
next.h = man_dist(next, end);
|
||||||
open.push(next);
|
open.push(next);
|
||||||
}
|
}
|
||||||
@ -74,7 +89,7 @@ console.log(
|
|||||||
.map(a => a
|
.map(a => a
|
||||||
.map(b => shortest
|
.map(b => shortest
|
||||||
.includes(b) ?
|
.includes(b) ?
|
||||||
"*" : b.c
|
get_dir(b) : b.c
|
||||||
).join("")
|
).join("")
|
||||||
).join("\n")
|
).join("\n")
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user