如何在Ruby中编写不公平或有偏见的硬币翻转?

问题描述:

我需要做一个符合结果一定概率的投币。例如,一个硬币出来首脑67%的机会,走出尾的83%的机会,等等翻转如何在Ruby中编写不公平或有偏见的硬币翻转?

我设法得到的结果,我后填充在100 truefalse数组等价分配,然后随机选取一个项目。什么是更优雅的方式去做呢?

+0

询问时,我们期望以下两种情况之一:您的代码演示问题的最小示例,或您搜索的地方列表以及解释为什么这些无法帮助您解决问题的解释。阅读“[问]”和“[mcve]”。你的问题使得它看起来像你希望我们编写解决问题的代码,这不是Stack Overflow的目的。相反,我们通过纠正错误来帮助您解决问题。请告诉我们你的代码。 –

+0

我正在寻找一种不同的方法,而不是解决问题的方法,因为我已经有了能够有效解决问题的代码,如上所述,但我并不满意。什么会是一个更合适的地方来要求这样的事情? –

+0

[codereview.se]在您有工作代码并且想知道它是否可以写得更好时非常有用。你所问的问题在那里不合适,就像它在SO上有问题一样,因为你不清楚你是如何编写代码的。讨论代码并不像提供证明它所需的最小代码那样有用或有效。 –

Random#rand(max)(和Kernel#rand(max)):

当max是一个Integer [大于或等于1],返回兰特一个随机整数大于或等于零且小于最大..

所以:

p = rand(100) 
return p < 83 # ie. true for heads 

在理论上这样的可以是“精确”等的阵列分发方法。

+0

当然,我应该想到这一点!谢谢! –

rand < 0.67 
rand < 0.83 

会给true用的分别为67%和83%,概率 - 因为均匀选择的随机数x0 <= x < 1(诸如通过Kernel#rand返回)将有可能在段0 <= x < 0.67降落67%。

+0

我将不得不接受另一位海报的答案,因为他先给出了基本相同的答案,但确实非常优雅!我现在感到很蠢。 –

+1

不完全相同:您可以使用此方法执行任意概率(例如'rand Amadan

+0

第二种情况应该是“rand