Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
24
Task/Perfect-shuffle/Elixir/perfect-shuffle.elixir
Normal file
24
Task/Perfect-shuffle/Elixir/perfect-shuffle.elixir
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
defmodule Perfect do
|
||||
def shuffle(n) do
|
||||
start = Enum.to_list(1..n)
|
||||
m = div(n, 2)
|
||||
shuffle(start, magic_shuffle(start, m), m, 1)
|
||||
end
|
||||
|
||||
defp shuffle(start, start, _, step), do: step
|
||||
defp shuffle(start, deck, m, step) do
|
||||
shuffle(start, magic_shuffle(deck, m), m, step+1)
|
||||
end
|
||||
|
||||
defp magic_shuffle(deck, len) do
|
||||
{left, right} = Enum.split(deck, len)
|
||||
Enum.zip(left, right)
|
||||
|> Enum.map(&Tuple.to_list/1)
|
||||
|> List.flatten
|
||||
end
|
||||
end
|
||||
|
||||
Enum.each([8, 24, 52, 100, 1020, 1024, 10000], fn n ->
|
||||
step = Perfect.shuffle(n)
|
||||
IO.puts "#{n} : #{step}"
|
||||
end)
|
||||
Loading…
Add table
Add a link
Reference in a new issue