簡體   English   中英

查找JavaScript中的所有組合

[英]Finding all combinations in javascript

我正在創建一個游戲,我需要生成一些游戲作品。 每個片段都是一個由4個數字組成的數組(每個數字代表該片段的一個屬性),范圍為0-2。 我需要生成所有組合才能獲得所有游戲作品。

所以我需要[1、0、2、0],[2、0、0、1],[0、0、0、0],[1、0、1、0]等。

[a,b,c,d]總共應該有81個組合,其中每個變量的數字都是0-2。

我正在使用javascript,但任何偽代碼都會有所幫助。

任何幫助表示贊賞。 謝謝!

如果是作業,則將其標記為作業。

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;
  }));
}

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));
}
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)
    )
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM