@m_seki の

I like ruby tooから引っ越し

コインを投げ直せる場合の確率

(効果を間違ってたので、値が知りたいだけの人は一番下へ。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。