2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
25
Task/Knuths-algorithm-S/Elixir/knuths-algorithm-s.elixir
Normal file
25
Task/Knuths-algorithm-S/Elixir/knuths-algorithm-s.elixir
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
defmodule Knuth do
|
||||
def s_of_n_creator(n), do: {n, 1, []}
|
||||
|
||||
def s_of_n({n, i, ys}, x) do
|
||||
cond do
|
||||
i <= n -> {n, i+1, [x|ys]}
|
||||
|
||||
:rand.uniform(i) <= n ->
|
||||
{n, i+1, List.replace_at(ys, :rand.uniform(n)-1, x)}
|
||||
|
||||
true -> {n, i+1, ys}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
results = Enum.reduce(1..100000, %{}, fn _, freq ->
|
||||
{_, _, xs} = Enum.reduce(1..10, Knuth.s_of_n_creator(3), fn x, s ->
|
||||
Knuth.s_of_n(s, x)
|
||||
end)
|
||||
Enum.reduce(xs, freq, fn x, freq ->
|
||||
Map.put(freq, x, (freq[x] || 0) + 1)
|
||||
end)
|
||||
end)
|
||||
|
||||
IO.inspect results
|
||||
Loading…
Add table
Add a link
Reference in a new issue