(効果を間違ってたので、値が知りたいだけの人は一番下へ。Rubyでパズル解きたい人はこのまま読んでね。)
コイントスしてウラだったら、一度だけやり直せるとしたらどうなるんだっけ。
「コインを1回投げウラなら、このワザは失敗。」のケース。これを言い換えると、2回投げて2回ともウラなら失敗だよね?
○○ 成功 ← 一投目で決まってるので 二投目はない。
○× 成功 ← 一投目で決まってるので 二投目はない。
×○ 成功
×× 失敗
というわけで3/4で75%くらい。
def coin [true, false][rand(2)] end def coin_with_retry coin || coin end succ = 0 10000.times do succ += 1 if coin_with_retry end p succ
だいたいあってそう。
「コインを2回投げ、1回でもウラなら、このワザは失敗。」のケースはどうするんだろ。
○○○ 成功 ← 二投目で決まってるので 三投目はない。
○○× 成功 ← 二投目で決まってるので 三投目はない。
○×○ 成功
○×× 失敗
×○○ 成功
×○× 失敗
××○ 失敗
××× 失敗
お。4/8で50%?
def coin [true, false][rand(2)] end def coin_with_retry2 coin ? (coin || coin) : coin && coin end succ = 0 10000.times do succ += 1 if coin_with_retry2 end p succ
なんかもっとうまく書けないのかな。再帰的な構造してそうだけど...。ちがうか、N+1投げてNになればいいのか?失敗をもっと早く知れるけど、まあいいや。
def coin [true, false][rand(2)] end def coin_with_retry(n, m=n) sum = 0 (n + 1).times do sum += 1 if coin return true if sum == m end false end succ = 0 10000.times do succ += 1 if coin_with_retry(2) end p succ
(追記)しょうりのほしの効果を勘違いしてた!!
気に入らなかったら、一回もどるじゃなくて、全部やり直す!だったので暗算できた..
一回の成功の確率がpなら
p + (1 - p) * p
しぼりとるは1/2なので3/4。Vブラストは1/4なので7/16。いのちがけで生き残るのは3/4なので15/16。