From 78f689ceed7819943b85e6c63e1c96396ca0e386 Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Mon, 19 Aug 2019 01:15:23 +0200 Subject: Adds naive collection generator. --- src/balancer/blc_distribution.erl | 59 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/balancer/blc_distribution.erl (limited to 'src/balancer/blc_distribution.erl') diff --git a/src/balancer/blc_distribution.erl b/src/balancer/blc_distribution.erl new file mode 100644 index 0000000..2e8a141 --- /dev/null +++ b/src/balancer/blc_distribution.erl @@ -0,0 +1,59 @@ +-module(blc_distribution). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export +( + [ + generate/2 + ] +). +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec generate_internals + ( + non_neg_integer(), + list(list(0..100)), + list(0..100) + ) + -> list(list(0..100)). +generate_internals (0, CurrentResult, _Sequence) -> + CurrentResult; +generate_internals (N, CurrentResult, Sequence) -> + generate_internals + ( + (N - 1), + lists:filter + ( + fun (E) -> (lists:sum(E) =< 100) end, + shr_lists_util:product + ( + fun (L, E) -> + [E|L] + end, + CurrentResult, + Sequence + ) + ), + Sequence + ). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec generate (non_neg_integer(), 0..100) -> list(list(0..100)). +generate (0, _Step) -> []; +generate (Elements, Step) -> + Sequence = lists:seq(0, 100, Step), + generate_internals + ( + (Elements - 1), + lists:map(fun (E) -> [E] end, Sequence), + Sequence + ). -- cgit v1.2.3-70-g09d2