编程岩石,纸张,剪刀的选择组合-Javascript

Programming Rock, Paper, Scissors choice combinations - Javascript

本文关键字:选择 组合 -Javascript 纸张 编程      更新时间:2023-09-26

如果已经创建了一个主题,请原谅我,但我已经找过了,似乎找不到。

我正试图弄清楚如何在X数量游戏的基础上,获得岩石剪刀选择的每一个可能组合的输出。

有多少可能的结果的方程式很简单-X^Y=结果。

(X的Y次方——其中X等于游戏数量,Y等于选择数量——等于可能的组合数量。)

比方说一个人玩三个游戏:石头、纸、剪刀。这是3^3 = 27

如果rock = 1scissors = 2paper = 3(我按这个顺序列出了它们,这样它就可以从左到右在哪个节拍上),那么结果是:111,112,113,121,122,123…等等…

但问题是,如何将其输出?对于3^3,我可以做一个外循环,有一个内循环,然后有一个内环。但我需要它是动态的,这样我就可以输入X表示游戏的数量,Y表示选择的数量,并让它返回所有可能的选择组合的数组。所以我想我可以为每列有一个循环(其中列等于游戏数量)。。我只是不确定我会怎么做。

我需要结果在一个数组中,这样我就可以稍后查找某些组合。

有人能帮我吗?

我真正需要的只是逻辑,所以伪代码就可以了。但一个扎实的剧本也很棒。

提前感谢!

我认为这个库解决了您的问题:https://github.com/dankogai/js-combinatorics(脚本:https://raw.githubusercontent.com/dankogai/js-combinatorics/master/combinatorics.js)
您将使用的功能是:

baseN = Combinatorics.baseN([1,2,3], 3);
console.log(baseN.toArray())

其中1、2、3是可能的选项,3是重复次数。这将提供一个由27种不同组合组成的数组,您可以实现这些组合。

var a = ['1', '2', '3', '4']
     combine(a,a);
function combine(srcArr, oldArr)    {
    var newArr = [];
    while(oldArr[0].length < srcArr.length)
    for(i=0; i<srcArr.length; i++)  {
    for(j=0; j<oldArr.length; j++)  {
        newArr.push(oldArr[j] + srcArr[i]); 
    }
    }
        combine(srcArr, newArr);
    } 
}

这是一个递归算法,由起始数组和相同的种子数组启动。在每次函数调用中,都会通过将起始数组的每个成员添加到种子数组的各个成员来创建一个新数组。新数组将成为下一个函数调用的种子数组。您可以通过在if