summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2019-08-19 01:15:23 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2019-08-19 01:15:23 +0200
commit78f689ceed7819943b85e6c63e1c96396ca0e386 (patch)
tree4d98756fa463b30e4c3c3c00dc52ab57570880f4 /src/balancer/blc_distribution.erl
parent7a1686695e70b68b2d4ad49c0f5bc967fa6d1013 (diff)
Adds naive collection generator.
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
+ ).