在javascript中查找所有组合

时间:2012-01-01 17:14:51

标签: javascript combinations

我正在制作一款游戏,我需要制作一些游戏。每个部分是一个由4个数字组成的数组(每个数字代表该部分的一个属性),范围从0到2。我需要生成所有组合才能获得所有游戏内容。

所以我需要[1,0,2,0],[2,0,0,1],[0,0,0,0],[1,0,1,0]等。< / p>

[a,b,c,d]应该有81个组合,其中每个变量都是0-2。

我使用的是javascript,但任何psudocode都会有所帮助。

感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分:3)

如果是家庭作业,请将其标记为。

var BASE = 3, LEN = 4, LIMIT = Math.round(Math.pow(BASE, LEN));
var c = [];
for (var i = 0; i < LIMIT; ++i) {
  var item = [];
  for (var j = 0, k = i; j < LEN; ++j, k = Math.floor(k/BASE)) {
    item.push(k % BASE);
  }
  c.push(item);
}

这是一个更棘手的解决方案,但更好地展示了它背后的数学,希望如此:

var BASE = 3, LEN = 4;
var powers = [];
for (var i = 0, LIMIT = 1; i < LEN; ++i, LIMIT *= BASE) {
  powers.push(LIMIT);
}
var c = [];
for (i = 0; i < LIMIT; ++i) {
  c.push(powers.map(function(basePower) {
    return Math.floor(i/basePower) % BASE;
  }));
}

答案 1 :(得分:3)

var arr=[];
for (var str,i=0;i<81;i++) {
  str = i.toString(3);
  arr.push(("000"+str).slice(-4)); // Hmm, I thought slice returned an array.
}

以下是考虑到@katspaugh和@herby

的评论的更新
var arr=[];
for (var str,i=81;i<162;i++) {
  str = i.toString(3);
  arr.push((str).slice(-4).split('').map(Number));
}

答案 2 :(得分:1)

var BASE = 3, COMB_LEN = 4

var max = parseInt(new Array(COMB_LEN + 1).join(BASE - 1), BASE),
    comb = new Array(COMB_LEN + 1).join(0).split('').map(Number)

var combinations = [], i, n
for (i = 0; i <= max; i++) {
    n = i.toString(BASE).split('').map(Number)
    combinations.push(
        comb.slice(0, COMB_LEN - n.length).concat(n)
    )
}