【问题标题】:Get 3 random numbers with probabilities from a list js从列表js中获取3个具有概率的随机数
【发布时间】:2021-11-04 15:19:06
【问题描述】:

我正在尝试在列表中获取 3 个备用号码。一切都很好,但我尝试的是有机会出现相同的 3。

我计划根据一个人的投票数将此功能添加到 discord.js 命令中。

我目前正在这样做。

let cosmetics = ["item1", "item2", "etc..."......];

const items = []

for (var i=0; i<3; i++)
  items.push(cosmetics[Math.floor(Math.random() * cosmetics.length)])

这会随机返回 3 个项目。但是我如何控制所有 3 个都相同的概率呢? 顺便说一句……化妆品清单的数量超过 1500 件。这就是为什么我对概率感兴趣(2%、5%、10%、15%、20%、25%、30%)

【问题讨论】:

  • 我不明白你的概率。您是否试图控制您的代码生成双胞胎和三胞胎的机会?
  • 我根本不懂英语。我的想法是人们可以得到相同的结果。 (类似于赌场机器),他们可能是幸运的,因为他们出现了 3 个相同的结果,或者是半幸运的,因为他们出现了 3 个相同的 2 个。或者运气不好:完全不同。

标签: javascript node.js list random discord.js


【解决方案1】:

试试这样的:

function weightedRandom(prob) {
  let i, sum=0, r=Math.random();
  for (i in prob) {
    sum += prob[i];
    if (r <= sum) return i;
  }
}

let cosmetics = ["item1", "item2", "item3"];
let index = weightedRandom({0:0.6, 1:0.1, 2:0.1, 3:0.2});
console.log(cosmetics[index]);

【讨论】:

  • 这适用于短名单。我的清单有超过 4,000 项。我正在尝试随机选择 3 个,但有可能会重复 3 个
猜你喜欢
  • 2013-06-19
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
  • 2017-05-16
  • 2012-02-11
相关资源
最近更新 更多