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>