Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
23
Task/Monty-Hall-problem/Elixir/monty-hall-problem.elixir
Normal file
23
Task/Monty-Hall-problem/Elixir/monty-hall-problem.elixir
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
defmodule MontyHall do
|
||||
def simulate(n) do
|
||||
{stay, switch} = simulate(n, 0, 0)
|
||||
:io.format "Staying wins ~w times (~.3f%)~n", [stay, 100 * stay / n]
|
||||
:io.format "Switching wins ~w times (~.3f%)~n", [switch, 100 * switch / n]
|
||||
end
|
||||
|
||||
defp simulate(0, stay, switch), do: {stay, switch}
|
||||
defp simulate(n, stay, switch) do
|
||||
doors = Enum.shuffle([:goat, :goat, :car])
|
||||
guess = :rand.uniform(3) - 1
|
||||
[choice] = [0,1,2] -- [guess, shown(doors, guess)]
|
||||
if Enum.at(doors, choice) == :car, do: simulate(n-1, stay, switch+1),
|
||||
else: simulate(n-1, stay+1, switch)
|
||||
end
|
||||
|
||||
defp shown(doors, guess) do
|
||||
[i, j] = Enum.shuffle([0,1,2] -- [guess])
|
||||
if Enum.at(doors, i) == :goat, do: i, else: j
|
||||
end
|
||||
end
|
||||
|
||||
MontyHall.simulate(10000)
|
||||
Loading…
Add table
Add a link
Reference in a new issue