From 7f84b2cd0e386e4804e3d95e2a42543b96a705bb Mon Sep 17 00:00:00 2001 From: Alberto Quiles Boix Date: Thu, 25 Jul 2024 15:03:59 +0200 Subject: [PATCH] fix #13 --- src/main.ts | 1 + src/sandbox.ts | 26 +++++++++++++++----------- src/utils/grid.utils.ts | 25 ++++++++++++++++++++++++- 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/main.ts b/src/main.ts index 3eac7ef..8e11f1e 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,2 +1,3 @@ export * from "./objects/grid.ts"; export * from "./finders/finder.enum.ts"; +export { transpose } from "./utils/grid.utils.ts"; diff --git a/src/sandbox.ts b/src/sandbox.ts index 3432201..3b173ae 100644 --- a/src/sandbox.ts +++ b/src/sandbox.ts @@ -1,21 +1,25 @@ import { Grid } from "./objects/grid.ts"; import { FinderEnum } from "./finders/finder.enum.ts"; -import { drawLayout } from "./utils/grid.utils.ts"; +import { drawLayout, transpose } from "./utils/grid.utils.ts"; -const layout = [ - [1, 1, 1, 1, null], - [1, null, null, 1, 1, 1, 1], - [1, null, 1, 1, 1], - [1, null, 1, 1, 1, 1, 1, 1], - [1, null, 1, 1, 1, 1, 1, 1], -] as number[][]; +const original = [ + [0, 0, 0, 2, 0, 0, 0, 0, 0], + [0, 0, 1, 1, 1, 1, 0, 1, 1], + [0, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 1, 1, 1, 1, 1, 1, 1, 1], + [2, 1, 1, 1, 1, 1], + [0, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 1, 1, 1, 1, 1, 1, 0, 1, 1], +]; + +const layout = transpose(original); // (original); const grid = new Grid(layout); -const start = { x: 6, y: 3 }; -const end = { x: 6, y: 1 }; +const start = { x: 2, y: 6 }; +const end = { x: 5, y: 9 }; console.log(start, "->", end); const path = grid.findPath(start, end, 1, FinderEnum.JUMP_POINT); console.log(path); -drawLayout(layout, path); +drawLayout(layout, path, start, end); diff --git a/src/utils/grid.utils.ts b/src/utils/grid.utils.ts index 282702e..003a531 100644 --- a/src/utils/grid.utils.ts +++ b/src/utils/grid.utils.ts @@ -15,13 +15,36 @@ export const makeSquare = (layout: number[][]): number[][] => { return squareLayout; }; -export const drawLayout = (layout: number[][], path: PointInterface[]) => { +export const drawLayout = ( + layout: number[][], + path: PointInterface[], + start?: PointInterface, + end?: PointInterface, +) => { const map: any[] = layout.map((row) => row.map((cell) => (cell ? "." : "#"))); path.forEach((point) => { map[point.y][point.x] = "P"; }); + if (start) map[start.y][start.x] = "S"; + if (end) map[end.y][end.x] = "X"; + const mapString = map.map((row) => row.join(" ")).join("\n"); console.log(mapString); }; + +export const transpose = (matrix: number[][]) => { + const maxCols = Math.max(...matrix.map((row) => row.length)); + const transposed: number[][] = Array.from({ length: maxCols }, () => + Array(matrix.length).fill(null), + ); + + for (let i = 0; i < matrix.length; i++) { + for (let j = 0; j < matrix[i].length; j++) { + transposed[j][i] = matrix[i][j]; + } + } + + return transposed; +};