summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/balancer/blc_distribution.erl')
-rw-r--r--src/balancer/blc_distribution.erl59
1 files changed, 59 insertions, 0 deletions
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
+ ).