|
% Share a list between N. |
|
share(List, N) when N > 0 -> |
|
L = (length(List) + N - 1) div N, |
|
lists:reverse(share(List, N, L, [])). |
|
|
|
share([], _N = 0, _L, Acc) -> |
|
Acc; |
|
share([], N, L, Acc) -> |
|
share([], N - 1, L, [[] | Acc]); |
|
share(List, N, L, Acc) when L =< length(List) -> |
|
{Take, Rest} = lists:split(L, List), |
|
share(Rest, N - 1, L, [Take | Acc]); |
|
share(List, N, L, Acc) -> |
|
share([], N - 1, L, [List | Acc]). |
|
|
|
-ifdef(TEST). |
|
share_test() -> |
|
?assertEqual([[1, 2]], share([1, 2], 1)), |
|
?assertEqual([[1], [2]], share([1, 2], 2)), |
|
?assertEqual([[1], [2], []], share([1, 2], 3)), |
|
?assertEqual([[1], [2], [], []], share([1, 2], 4)), |
|
?assertEqual([[1, 2, 3]], share([1, 2, 3], 1)), |
|
?assertEqual([[1, 2], [3]], share([1, 2, 3], 2)), |
|
?assertEqual([[1], [2], [3]], share([1, 2, 3], 3)), |
|
ok. |
|
-endif. |