Skip to content

Instantly share code, notes, and snippets.

@nagat01
Last active August 29, 2015 14:12
Show Gist options
  • Select an option

  • Save nagat01/e157ca6f245b4f0fa4f9 to your computer and use it in GitHub Desktop.

Select an option

Save nagat01/e157ca6f245b4f0fa4f9 to your computer and use it in GitHub Desktop.
// 結果
// 100000000回試行しました
// 自分は生き、他に0人が生きた回数は27902回で確率は0.027902%でした
// 自分は生き、他に1人が生きた回数は6924回で確率は0.006924%でした
// 自分は生き、他に2人が生きた回数は848回で確率は0.000848%でした
// 自分は生き、他に3人が生きた回数は87回で確率は0.000087%でした
// 自分は生き、他に4人が生きた回数は4回で確率は0.000004%でした
// 自分は生き、他に5人が生きた回数は0回で確率は0.000000%でした
// 自分は生き、他に6人が生きた回数は1回で確率は0.000001%でした
// 自分は生き、他に7人が生きた回数は0回で確率は0.000000%でした
// 自分は生き、他に8人が生きた回数は0回で確率は0.000000%でした
// 自分は生き、他に9人が生きた回数は0回で確率は0.000000%でした
// 自分は死に、他に0人が生きた回数は77877012回で確率は77.877012%でした
// 自分は死に、他に1人が生きた回数は19451022回で確率は19.451022%でした
// 自分は死に、他に2人が生きた回数は2419916回で確率は2.419916%でした
// 自分は死に、他に3人が生きた回数は202401回で確率は0.202401%でした
// 自分は死に、他に4人が生きた回数は13148回で確率は0.013148%でした
// 自分は死に、他に5人が生きた回数は691回で確率は0.000691%でした
// 自分は死に、他に6人が生きた回数は43回で確率は0.000043%でした
// 自分は死に、他に7人が生きた回数は2回で確率は0.000002%でした
// 自分は死に、他に8人が生きた回数は0回で確率は0.000000%でした
// 自分は死に、他に9人が生きた回数は0回で確率は0.000000%でした
// かかった時間は1301.203899.2秒でした
open System
let random = Random()
let simulateOnce () =
let mutable population = 140000000
let mutable limit = 50000
let mutable me_alived = false
let mutable others_alived = 0
for x in 0..699 do
let probability = double limit / double population
let isAlive = random.NextDouble() <= probability
population <- population - 1
if isAlive then
limit <- limit - 1
if x = 0 then
me_alived <- true
else
others_alived <- others_alived + 1
me_alived, others_alived
let simulateMany n =
let before = DateTime.Now
let me_alived_cases = Array.zeroCreate 10
let me_died_cases = Array.zeroCreate 10
for x in 0..n do
let me_alived, others_alived = simulateOnce()
if others_alived < 10 then
if me_alived then
me_alived_cases.[others_alived] <-
me_alived_cases.[others_alived] + 1
else
me_died_cases.[others_alived] <-
me_died_cases.[others_alived] + 1
printfn "%d回試行しました" n
for x in 0..9 do
printfn "自分は生き、他に%d人が生きた回数は%d回で確率は%f%%でした"
x me_alived_cases.[x] (double me_alived_cases.[x] / double n * 100.0)
printfn "自分は死に、他に%d人が生きた回数は%d回で確率は%f%%でした"
x me_died_cases.[x] (double me_died_cases.[x] / double n * 100.0)
printfn "かかった時間は%f.2秒でした" (DateTime.Now - before).TotalSeconds
simulateMany 100000000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment