我正在制作一款游戏,我需要制作一些游戏。每个部分是一个由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都会有所帮助。
感谢任何帮助。谢谢!
答案 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)
)
}