找到最接近当前正在进行的组合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找到最接近当前正在进行的组合相关的知识,希望对你有一定的参考价值。
我目前正在使用vanilla javascript构建一个tic tac toe。然而,游戏“完成了”,但我试图增加难度。所以基本上我想要做的就是,在每个球员的动作中,根据他的动作获得最接近的可能获胜组合,并将计算机的标记放入缺失的获胜组合位置。
假设我有多维阵列和胜利组合
winningCombinations: [
[0, 1, 2],
[3, 4, 5],
[6, 7, 8],
[0, 4, 8],
[0, 3, 6],
[1, 4, 7],
[2, 4, 6],
[2, 5, 8]
]
玩家X开始他的动作。所以他的第一步是0,所以将球员的当前组合保存在阵列中。所以在第一步中当前的梳子是
currentPlayerCombintation: [0]
所以我想从获胜组合的阵列中返回[0,1,2],[0,4,8]和[0,3,6]。
然而,球员进行第二次移动,所以他的目标是4
currentPlayerCombination: [0,4]
现在我想要返回最接近的可能获胜组合,即[0,4,8]。
我尝试了很多东西,包括qazxsw poi,qazxsw poi,qazxsw poi但是无法实现我想要的东西。
我试过了
every()
但这没有按预期工作:(
您可以使用some()
并映射匹配项的计数,获取最大计数并过滤数组。
filter()
for(let i = 0; i < this.currentPlayerCombination.length ; i++)
this.winningCombinations.some((arr) =>
if(arr.includes(this.currentPlayerCombination[i]))
console.log(arr);
);
首先将Set
映射到一个数组数组,这些数组的数字只是尚未被选中的数字。然后,找到这些数组的最小长度,并且您可以识别最接近function getWinningPositions(pos)
var posS = new Set(pos),
temp = winningCombinations.map(a => [a, a.reduce((c, v) => c + posS.has(v), 0)]),
max = Math.max(...temp.map(( 1: c ) => c))
return temp
.filter(( 1: c ) => c === max)
.map(([a]) => a);
var winningCombinations = [[0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 4, 8], [0, 3, 6], [1, 4, 7], [2, 4, 6], [2, 5, 8]];
console.log(getWinningPositions([0]).map(a => a.join(' ')));
console.log(getWinningPositions([0, 4]).map(a => a.join(' ')));
console.log(getWinningPositions([0, 4, 5]).map(a => a.join(' ')));
的原始.as-console-wrapper max-height: 100% !important; top: 0;
:
winningCombinations
以上是关于找到最接近当前正在进行的组合的主要内容,如果未能解决你的问题,请参考以下文章