n人中m人が当選するくじ
Posted feedbacks - Erlang
長さNのリストをシャッフルして、先頭からM個を取り出します。
1> c(n_m).
{ok,n_m}
2> n_m:n_m(10, 3).
[3,1,9]
3> n_m:n_m(10, 3).
[1,6,7]
1 2 3 4 5 6 7 8 9 10 | -module(n_m).
-export([n_m/2]).
shuffle(List, 0) -> List;
shuffle(List, N) ->
R = lists:nth(random:uniform(length(List)), List),
L = [R | [X || X <- List, X =/= R]],
shuffle(L, N - 1).
n_m(N, M) -> lists:sublist(shuffle(lists:seq(1, N), N), M).
|



にしお
#3360()
Rating0/0=0.00
[ reply ]