编程摇滚,纸张,剪刀选择组合 - Javascript

时间:2014-10-06 19:17:25

标签: javascript

如果有关于此的主题已经创建,请原谅我,但我看上去似乎无法找到它。

我正在试图弄清楚如何根据X量游戏获得每种可能的摇滚剪刀组合的输出。

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

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

所以,让我们说一个人玩三个游戏的摇滚,纸张,剪刀。那是3^3 = 27

如果rock = 1scissors = 2paper = 3,(我按此顺序列出它们,以便它可以从左到右依次为哪个节拍),那么结果将是: 111, 112, 113, 121, 122, 123 ......等等......

但问题是,如何将其输出? 对于3 ^ 3,我可以做一个外循环,有一个内环,然后是一个内循环。 但是我需要它是动态的,所以我可以传递X代表游戏数量,Y代表选择数量,并让它返回所有可能的选择组合的数组。所以我认为每列可以有一个循环(列数等于游戏数量)。我不知道我是怎么做的。

我需要将结果放在一个数组中,以便稍后查找某些组合。

任何人都可以帮我解决这个问题吗?

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

提前致谢!

2 个答案:

答案 0 :(得分:1)

我认为这个库可以解决您的问题: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种不同组合的数组。

答案 1 :(得分:1)

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之前的行上插入代码行alert(newArr);来查看递归操作