2016-09-20 9 views
1

ゴールデンコインを反転させてN分率の頭を返すことを目標としています。コインフリッパーとN個の確率ヘッド

私はここで完全に困惑していません。

probability = 0.75 # chance of getting heads as decimal 
num_heads_cases = (100.to_f * probability).to_i 
cases = num_heads_cases.times.map { :heads }.concat(
    (100 - num_heads_cases).times.map { :tails } 
) 
is_flip_result_heads = cases.sample == :heads 

しかし、私は私が見渡せるんだいくつかのコアルビー/レールの方法がないのですかどうかを確認するためにここに掲示しています:私は、このようにそれを行うことができます。私は、次のメソッドのシグネチャに似たものを探しています:

def random_bool(probability_of_returning_true=0.5) 

これは、それがの重複としてマークされたの質問に似ていますが、重複はありません。その質問はに乱数を得る方法を尋ねますが、は、確率がのランダムなブール値を得る方法です。

"乱数"から "ランダムブール値"に移行する方法は明白なように思えるかもしれませんが、それは誰にとってもそうではありません。

+0

http://stackoverflow.com/questions/198460/how-to-get-a-random-number-in-rubyの可能性の重複 –

答えて

3
def rb(prob=0.5) 
    rand < prob 
end 

10.times.map { rb(0.8) } 
    #=> [true, true, false, false, true, false, true, true, true, true] 

100.times.reduce(0) { |t,_| t + (rb(0.8) ? 1 : 0) }/100.0 
    #=> 0.87 

1000.times.reduce(0) { |t,_| t + (rb(0.8) ? 1 : 0) }/1000.0 
    #=> 0.798 

10000.times.reduce(0) { |t,_| t + (rb(0.8) ? 1 : 0) }/10000.0 
    #=> 0.8003 
1
# prob : Probability (Float between 0 and 1) 
def flip_weighted_coin(prob) 
    (rand < prob) ? :heads : :tails 
end 
関連する問題