[英]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.