mirror of
https://github.com/ad044/lainTSX.git
synced 2024-10-22 23:19:06 +00:00
more node algo fixes ???
This commit is contained in:
parent
2f399799e6
commit
a1bb6260ae
1 changed files with 39 additions and 23 deletions
|
@ -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: {
|
||||||
|
|
Loading…
Reference in a new issue