Last active
August 29, 2015 14:12
-
-
Save nagat01/e157ca6f245b4f0fa4f9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // 結果 | |
| // 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