more node algo fixes ???

This commit is contained in:
Solitai7e 2021-01-31 17:05:22 +00:00
parent 2f399799e6
commit a1bb6260ae

View file

@ -44,26 +44,35 @@ export const getVisibleNodesMatrix = (
function reorder<T>(array: T[], order: number[]): T[] function reorder<T>(array: T[], order: number[]): T[]
{ {
return order.map(i => array[i]); return order.map(i => array[i]);
}
function transpose<T>(matrix: T[][]): T[][]
{
return Object.keys(matrix[0])
.map(Number)
.map(
(c: number) => matrix.map(
(r: T[]) => r[c]));
} }
function RowPrecedence(rowIdx: number): number[] function RowPrecedence(rowIdx: number): number[]
{ {
switch (rowIdx) { switch (rowIdx) {
default: case 0: return [0, 1, 2]; default: case 0: return [0, 1, 2];
case 1: return [1, 0, 2]; case 1: return [1, 0, 2];
case 2: return [2, 1, 0]; case 2: return [2, 1, 0];
} }
}; };
function ColPrecedence(colIdx: number): number[] function ColPrecedence(colIdx: number): number[]
{ {
switch (colIdx) { switch (colIdx) {
default: case 0: return [0, 1, 2, 3]; default: case 0: return [0, 1, 2, 3];
case 1: return [1, 0, 2, 3]; case 1: return [1, 0, 2, 3];
case 2: return [2, 1, 3, 0]; case 2: return [2, 1, 3, 0];
case 3: return [3, 2, 1, 0]; case 3: return [3, 2, 1, 0];
} }
} }
function getNodesMatrixWithIndices function getNodesMatrixWithIndices
@ -96,9 +105,9 @@ function getNodesMatrixWithIndices
} }
interface NodeMatrixIndices { interface NodeMatrixIndices {
matrixIdx: number; matrixIdx: number;
rowIdx: number; rowIdx: number;
colIdx: number; colIdx: number;
} }
function findNode_current function findNode_current
@ -119,11 +128,15 @@ function findNode_current
); );
const filters: any = { const filters: any = {
left: () => reorder(nodes, RowPrecedence(rowIdx)) left: () => transpose(
.flatMap(r => r.slice(0, colIdx).reverse()), reorder(nodes, RowPrecedence(rowIdx))
.map(r => r.slice(0, colIdx).reverse())
).flat(),
right: () => reorder(nodes, RowPrecedence(rowIdx)) right: () => transpose(
.flatMap(r => r.slice(colIdx + 1)), reorder(nodes, RowPrecedence(rowIdx))
.map(r => r.slice(colIdx + 1))
).flat(),
up: () => nodes.slice(0, rowIdx).reverse() up: () => nodes.slice(0, rowIdx).reverse()
.flatMap(r => reorder(r, ColPrecedence(colIdx))), .flatMap(r => reorder(r, ColPrecedence(colIdx))),
@ -155,8 +168,9 @@ function findNode_next
gameProgress gameProgress
), ),
filter: (ns: any[]) => filter: (ns: any[]) => transpose(
reorder(ns, RowPrecedence(rowIdx)).flat() reorder(ns, RowPrecedence(rowIdx))
).flat()
}, },
right: { right: {
@ -167,8 +181,10 @@ function findNode_next
gameProgress gameProgress
), ),
filter: (ns: any[]) => reorder(ns, RowPrecedence(rowIdx)) filter: (ns: any[]) => transpose(
.flatMap(r => [...r].reverse()) reorder(ns, RowPrecedence(rowIdx))
.map(r => [...r].reverse())
).flat()
}, },
up: { up: {