ruby - 在 2 个或多个范围之间随机选择

标签 ruby random

我正在尝试制作一个随机数生成器,它将在 3 到 4 位数字范围之间选择更“均匀”的数字。如果我这样做:

result = rand(100..9999)

我很清楚,在大多数情况下,都会选择 4 位数的号码。我想给 3 位数字更多的被选中的机会,所以我这样做了:

rand_3_digit_num = (100..999)
rand_4_digit_num = (1000..9999)

rand([rand_3_digit_num, rand_4_digit_num].sample)

还有其他方法可以做到这一点吗?我的目标是让 3 位数字比普通兰特有更大的被选中的机会。如果我引入 5 位或 6 位数字,这个问题会变得更糟,3 位或 4 位数字被选中的机会很快就会减少。

最佳答案

暴力解决方案:

list = (100..999).to_a*10 + (1000..9999).to_a
=> [100, ..., 9999]
list.size
=> 18000
list.count { |e| e < 1000 }
=> 9000
list.count { |e| 999 < e && e < 10000 }
=> 9000

现在 list.sample 应该给出相同的 3 位数和 4 位数概率。

关于ruby - 在 2 个或多个范围之间随机选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41086485/

相关文章:

ruby-on-rails - 如何在特定位置后将字符串分成两部分

Python:random.random()植入哪里?

java - 在游戏中随机生成物体

c# - 如何在 C# - Visual Studio 中随机填充复选框

javascript - 生成 1 到 100 之间的唯一随机数

用于删除字符串中元音的 Ruby 代码

sql - 来自 ActiveRecord::Base.connection.execute(sql) - PostgreSQL 的结果

javascript - 当我用 "text_field_tag"(ruby on rails) 写入输入时如何使用 onkeyup() 方法

ruby-on-rails - 为什么我可以使用 irb 的 RMagick 而不是 rails 控制台?

c# - 为单元测试哈希表数据类型生成随机值