Gruppenbildung
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Javascript</language>
<run id="611f4cf1e8ba0">
var Names = ["Franz","Susi","Max","Moritz","Egon","Lisa","Lara","Boris","Tamara","Kathrin","Tom","Daniel","Hans"];
var Groups = 5; // how many equally sized groups we like to have
// build a set of Objects for each Name so we can attach other attributes to the names later
var NameObjects = [];
for(var i=0; i < Names.length; i++){
var n = {Name:Names[i]};
NameObjects.push(n);
}
// we can have different functions to separate Names
var hasLetterAtIndex = function(param){
var list = [];
for(var i=0; i < Names.length; i++){
if(Names[i].length >= param.position)
if(Names[i].toLowerCase()[param.position] == param.character) list.push(Names[i]);
}
return Names;
}
// now we can try all separateFunctions in all possible combinations and find the "best" combination
// of function and param to separate the names in equal sized groups
function generateSeparateFunctions(){
var chars = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"];
var maxLength = 0;
var params = [];
for(var i=0; i < Names.length; i++) maxLength = Math.max(maxLength, Names[i].length);
for(var i=0; i < maxLength; i++){
for(var c=0; c < chars.length; c++){
var p = {character:chars[c],position:i};
params.push(p);
}
}
return [{f:hasLetterAtIndex, params:params}];
}
var separateFunctions = generateSeparateFunctions();
var separatedGroups = [];
for(var f=0; f < separateFunctions.length; f++){
for(var p=0; p < separateFunctions[f].params.length; p++){
var nameList = separateFunctions[f].f(separateFunctions[f].params[p]);
var sg = {Names:nameList, f:separateFunctions[f].f, params:separateFunctions[f].params};
separatedGroups.push(sg);
}
}
console.log("We created "+separatedGroups.length+" groups of names.");
function findBestGroups(){
var GroupObjects = [];
for(var i=0; i < Groups; i++) {
var g = {};
GroupObjects.push(g);
}
var rec = function(p, len, rest, arr){
if(len == 0) return arr;
var lc = JSON.parse(JSON.stringify(rest));
var e = lc.splice(p,1);
arr.push(e);
for(var i=0; i < lc.length; i++){
rec(i, len-1, lc, arr.slice(0));
}
};
var all = rec(0,Groups,separatedGroups,[]);
console.log("We created "+all.length+" combinations of groups.");
}
findBestGroups();
// for each group we want a function to select n/Groups names from Names list without duplicates
</run>