Files
rbx/x04-noisy-echo/duml.erl
T

20 lines
423 B
Erlang

-module(duml).
-export([shuffle/1]).
shuffle([]) ->
[];
shuffle([X]) ->
[X];
shuffle(Items) ->
N = rand:uniform(length(Items)),
{Nth, Rest} = inverse_nth(N, Items),
[Nth | shuffle(Rest)].
inverse_nth(N, Items) ->
inverse_nth([], N, Items).
inverse_nth(Stk, 1, [X | Rest]) ->
{X, lists:reverse(Stk, Rest)};
inverse_nth(Stk, N, [X | Rest]) when N > 1 ->
inverse_nth([X | Stk], N-1, Rest).