javascript - 自调整随机列表

标签 javascript actionscript

我有一个 9 列乘 3 行的网格(因此每列有 3 个槽)。每列中至少有一个插槽必须被标记,并且最多可以标记 3 个。标记由 1、2 或 3 位数字表示。

总共必须始终有 15 个标记的插槽。为此,我尝试了以下方法:

var valueLeft = 15;
while (valueLeft > 0)
{
    var ranValue = utils.getRandomInt(1,3);
    console.log('slots remaining: ' + (valueLeft - ranValue));
    if (ranValue >= valueLeft)
    {
            ranValue = valueLeft;
    }
    valueList.push(ranValue);
    valueLeft -= ranValue;
}
console.log(valueList);

但这通常会给我一个内部元素少于 9 的数字数组。我可以看出我的逻辑有缺陷,但我正在竭尽全力想弄清楚如何让它始终给出一组 9 个元素,所有元素加起来都是 15。

例如,我可能最终得到的是: [2, 1, 1, 1, 1, 2, 3, 1, 2, 1]

例如当我需要的是: [2, 2, 1, 1, 1, 1, 3, 2, 2] 或者 [2, 2, 1, 2, 1, 1, 3, 2, 1]

等等。

任何建议表示赞赏。随意抨击我糟糕的逻辑:)

最佳答案

这个答案显示了与许多已经发布的答案类似的方法,但我觉得它们好像太复杂了。它可以非常简单:

function pad(list, size) {
    var total = list.length;
    while (total != size) {
        var i = utils.getRandomInt(0, 8);
        if (list[i] < 3) {
            list[i]++;
            total++;
        }
    }
    return list;
}

var valueList = pad(new Array(1,1,1,1,1,1,1,1,1), 15);

你不需要很多案例。就像许多其他人已经说过的那样——用 1 初始化数组。然后,简单地将 1 加到随机元素(其值已经不是 3)直到总数为 15。

关于javascript - 自调整随机列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8749372/

相关文章:

actionscript-3 - Flex/Actionscript通过分析audioBytesPerSecond判断NetStream是否有音频

javascript - 在 Pentaho CDE 上为检查组件设置不同的值和标签

javascript - 如何从 Angular js 中的指令调用 Controller 函数?

javascript - ARCGIS Javascript 需要选择 map 中的所有要素

JavaScript onClick函数触发ActionsScript3事件

android - Android 中的 webStageView 本地 HTML 路径

html - 将 SWF 文件链接到另一个 HTML

javascript - 为什么~0是-1?

javascript - 使用 Canvas 居中缩小

actionscript-3 - 阅读PDF,字符问题