Javascript 如何获得垂直和对角对齐的数组元素?
所以,我这里有一个数组,我想做的是创建一个名为car的新数组,并保存“数组”中的元素,这些元素是垂直对齐的Javascript 如何获得垂直和对角对齐的数组元素?,javascript,arrays,algorithm,sorting,tic-tac-toe,Javascript,Arrays,Algorithm,Sorting,Tic Tac Toe,所以,我这里有一个数组,我想做的是创建一个名为car的新数组,并保存“数组”中的元素,这些元素是垂直对齐的([0,4,8,12],[1,5,9,13]…),以及对角对齐的([0,5,10,15],[1,6,11],[2,7],[3],[4,9,14]等等… 我怎么能这么做 let array = [ [ 0, 1, 2, 3 ], [ 4, 5, 6, 7 ], [ 8, 9, 10, 11 ], [ 12, 13, 14, 15 ] ] 实际上,对于您期望
([0,4,8,12],[1,5,9,13]…)
,以及对角对齐的([0,5,10,15],[1,6,11],[2,7],[3],[4,9,14]等等…
我怎么能这么做
let array = [
[ 0, 1, 2, 3 ],
[ 4, 5, 6, 7 ],
[ 8, 9, 10, 11 ],
[ 12, 13, 14, 15 ]
]
实际上,对于您期望的解决方案,我根本不会使用数组 要查看游戏板上的一系列引脚(例如Tic Tac Toe或Connect Four)是否水平、垂直或对角连接,只需使用简单代数: 在你看来,翻译电路板的方式是将每一行放在前一行的旁边,例如:
| 0 | 1 | 2 | 3 |
| 4 | 5 | 6 | 7 | => | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ...
...
你会注意到,董事会的头寸将变成普通指数
在本例中,索引1
和索引5
垂直连接,因为电路板的宽度为4
。因此,垂直连接引脚之间的距离始终是电路板的宽度(即,如果电路板的宽度为4
,则1
+4
=5
)
因此,确定管脚是垂直连接、水平连接还是对角连接的函数可以像下面这样简单(我在这里使用非常简单和详细的实现进行演示。如果您的数学知识更高,请随意优化*):
我将isDiagonallyConnected
函数的实现留给您进行实验
*例如,
isVerticallyConnected
函数的优化版本可以是:return Math.Abs(indexB-indexA)==\u boardWidth代码>应更新问题,以包括所需的行为、特定问题或错误,以及重现问题所需的最短代码。是否尝试将数字右对齐显示?如果是,考虑PADSTART()函数。“保存”应该做什么?是否保存到磁盘?是否以新的排序顺序保存到新数组car
?保存到…?您在这里一次问两个问题。调用切换二维数组(或矩阵,如果愿意)的行和列。请看:对角线是否为[0,5,10,11],[1,6,11,12],[2,7,8,13]
等。好吗?从另一个角度看,对角线是怎样的呢[0,7,10,14]
等等。?
const _boardWidth = 4;
function isHorizontallyConnected(indexA, indexB)
{
const rowA = Math.Floor(indexA / _boardWidth);
const rowB = Math.Floor(indexB / _boardWidth);
if (rowA === rowB && Math.Abs(indexB - indexA) === 1) return true;
return false;
}
function isVerticallyConnected(indexA, indexB)
{
const rowA = Math.Floor(indexA / _boardWidth);
const rowB = Math.Floor(indexB / _boardWidth);
const columnA = indexA % _boardWidth;
const columnB = indexB % _boardWidth;
if (columnA === columnB && Math.Abs(rowB - rowA) === 1) return true;
return false;
}
function isDiagonallyConnected(indexA, indexB)
{
...
}