2016-02-01 21 views
0

我需要做一個符合結果一定概率的投幣。例如,一個硬幣出來首腦67%的機會,走出尾的83%的機會,等等翻轉如何在Ruby中編寫不公平或有偏見的硬幣翻轉?

我設法得到的結果,我後填充在100 truefalse數組等價分配,然後隨機選取一個項目。什麼是更優雅的方式去做呢?

+0

詢問時,我們期望以下兩種情況之一:您的代碼演示問題的最小示例,或您搜索的地方列表以及解釋爲什麼這些無法幫助您解決問題的解釋。閱讀「[問]」和「[mcve]」。你的問題使得它看起來像你希望我們編寫解決問題的代碼,這不是Stack Overflow的目的。相反,我們通過糾正錯誤來幫助您解決問題。請告訴我們你的代碼。 –

+0

我正在尋找一種不同的方法,而不是解決問題的方法,因爲我已經有了能夠有效解決問題的代碼,如上所述,但我並不滿意。什麼會是一個更合適的地方來要求這樣的事情? –

+0

[codereview.se]在您有工作代碼並且想知道它是否可以寫得更好時非常有用。你所問的問題在那裏不合適,就像它在SO上有問題一樣,因爲你不清楚你是如何編寫代碼的。討論代碼並不像提供證明它所需的最小代碼那樣有用或有效。 –

回答

3

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

當max是一個Integer [大於或等於1],返回蘭特一個隨機整數大於或等於零且小於最大..

所以:

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

在理論上這樣的可以是「精確」等的陣列分發方法。

+0

當然,我應該想到這一點!謝謝! –

5
rand < 0.67 
rand < 0.83 

會給true用的分別爲67%和83%,概率 - 因爲均勻選擇的隨機數x0 <= x < 1(諸如通過Kernel#rand返回)將有可能在段0 <= x < 0.67降落67%。

+0

我將不得不接受另一位海報的答案,因爲他先給出了基本相同的答案,但確實非常優雅!我現在感到很蠢。 –

+1

不完全相同:您可以使用此方法執行任意概率(例如'rand <0.12834')。 – Amadan

+0

第二種情況應該是「rand <0.17」嗎? –