Ruby チャネルボール確率計算

友達とM:tGというカードゲームについて懐古話をしていた際に、凶悪コンボ「チャネルボール」の失敗確率が気になりました。
チャネルボール とは
一般的な問題に直しますと、A・B・Cそれぞれ20枚ずつ入ったカードの山から7枚カードを引き、AABCが含まれている確率を調べるということになります。
以下、やっつけコード。

def channelBall
deck = []
20.times do
deck << "BlackLotus"
deck << "Fireball"
deck << "Channel"
end
deck.each_index do |i|
j = rand(deck.length)
deck[i], deck[j] = deck[j], deck[i]
end
hand = []
7.times do |i|
hand << deck[i]
end
hand
end
success_cnt = 0
fail_cnt = 0
success_hand = [ "BlackLotus", "BlackLotus", "Channel", "Fireball" ]
10000.times do
hand = channelBall
if (success_hand - hand).empty?
success_cnt += 1
else
fail_cnt += 1
end
end
p "Success Count #{success_cnt}"
p "Fail    Count #{fail_cnt}"

失敗確率は15%はぐらいみたいです。意外と多いのねぇ、という印象。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする