Another update from ingydotnet^djgoku
This commit is contained in:
parent
91df62d461
commit
948b86eafa
7604 changed files with 108452 additions and 22726 deletions
28
Task/Average-loop-length/Elixir/average-loop-length.elixir
Normal file
28
Task/Average-loop-length/Elixir/average-loop-length.elixir
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
defmodule RC do
|
||||
def factorial(0), do: 1
|
||||
def factorial(n), do: Enum.reduce(1..n, 1, &(&1 * &2))
|
||||
|
||||
def loop_length(n), do: loop_length(n, HashSet.new)
|
||||
|
||||
defp loop_length(n, set) do
|
||||
r = :random.uniform(n)
|
||||
if Set.member?(set, r), do: Set.size(set),
|
||||
else: loop_length(n, Set.put(set, r))
|
||||
end
|
||||
|
||||
def task(runs) do
|
||||
IO.puts " N average analytical (error) "
|
||||
IO.puts "=== ========= ========== ========="
|
||||
Enum.each(1..20, fn n ->
|
||||
sum_of_runs = Enum.reduce(1..runs, 0, fn _,sum -> sum + loop_length(n) end)
|
||||
avg = sum_of_runs / runs
|
||||
analytical = Enum.reduce(1..n, 0, fn i,sum ->
|
||||
sum + (factorial(n) / :math.pow(n, i) / factorial(n-i))
|
||||
end)
|
||||
:io.format "~3w ~9.4f ~9.4f (~6.2f%)~n", [n, avg, analytical, abs(avg/analytical - 1)*100]
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
runs = 100_000
|
||||
RC.task(runs)
|
||||
Loading…
Add table
Add a link
Reference in a new issue