找到最接近当前正在进行的组合

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;