28 lines
774 B
Plaintext
28 lines
774 B
Plaintext
defmodule Probabilistic do
|
|
@tries 1000000
|
|
@probs [aleph: 1/5,
|
|
beth: 1/6,
|
|
gimel: 1/7,
|
|
daleth: 1/8,
|
|
he: 1/9,
|
|
waw: 1/10,
|
|
zayin: 1/11,
|
|
heth: 1759/27720]
|
|
|
|
def test do
|
|
trials = for _ <- 1..@tries, do: get_choice(@probs, :rand.uniform)
|
|
IO.puts "Item Expected Actual"
|
|
fmt = " ~-8s ~.6f ~.6f~n"
|
|
Enum.each(@probs, fn {glyph,expected} ->
|
|
actual = length(for ^glyph <- trials, do: glyph) / @tries
|
|
:io.format fmt, [glyph, expected, actual]
|
|
end)
|
|
end
|
|
|
|
defp get_choice([{glyph,_}], _), do: glyph
|
|
defp get_choice([{glyph,prob}|_], ran) when ran < prob, do: glyph
|
|
defp get_choice([{_,prob}|t], ran), do: get_choice(t, ran - prob)
|
|
end
|
|
|
|
Probabilistic.test
|