2017-08-30 54 views
-1

我有9個用戶,我想組成團隊進行培訓。每個團隊最多應有3個用戶,每個用戶應在培訓結束時與每個用戶配對。集團15名員工分成3組

我使用expressjs

var express = require('express'); 
var _ = require('underscore'); 
var app = express(); 

app.get('/', function (req, res) { 

// Names 
var users = [ 
    {name: 'Parul Panchal'}, 
    {name: 'JJ Rademan'}, 
    {name: 'Mohamed Bassa'}, 
    {name: 'Naomi'}, 
    {name: 'Puella Lunsiswa'}, 
    {name: 'Pumla Kaleni'}, 
    {name: 'Jamie Gibbons'}, 
    {name: 'Charles'}, 
    {name: 'Mocheku Maseko'} 
]; 

var groups = []; 
var numberOfEmployees = 9, group = 3; 
var numberOfGroups = numberOfEmployees*group; 

for (var i = 0; i < numberOfGroups; i++) { 
    groups.push({group: []}); 
} 

groups.forEach(function (group) { 
    group.group.forEach(function(g){ 
     users.forEach(function (user) { 
      if(group.group.length < 3){ 
       g.push({name: user.name}); 
      } 
     }); 
    }); 
}); 

res.send(groups); 
}); 

app.listen(3000); 

響應: [{"group":[]},{"group":[]},{"group":[]},{"group":[]},{"group":[]}, {"group":[]},{"group":[]},{"group":[]},{"group":[]},{"group":[]}, {"group":[]},{"group":[]},{"group":[]},{"group":[]},{"group":[]}, {"group":[]},{"group":[]},{"group":[]},{"group":[]},{"group":[]}, {"group":[]},{"group":[]},{"group":[]},{"group":[]},{"group":[]}, {"group":[]},{"group":[]}]

+0

那麼你需要什麼幫助? – TheCog

+3

你的問題是什麼?我們不是代碼寫作服務 – ochi

+0

你是否擡頭看了握手問題? –

回答

0

這不是最佳的解決方案,但它應該工作。

function initpairrecord(){ 
    uu=users.map((a,i)=>(users.map((b,j)=>(i==j?1:0)))); 
} 
function pick_group_members(ui,picked,num){ 
    if(num <= 0) 
     return picked; 
    var paired = uu[ui]; 
    var topick = paired.findIndex((p,i)=>(p<=0&&!picked.includes(i))); 
    if(topick < 0 && num > 0){ 
     var cand = users.map((u,i)=>i) 
         .filter((u,i)=>(i!=ui&&!picked.includes(i))); 
     if(cand.length <= 0) 
      throw new Error('too few users'); 
     topick = cand.reduce((a,c)=>(paired[c] < paired[a] ? c : a)); 
    } 
    return pick_group_members(ui,picked.concat(topick),num-1); 
} 
function group_for_one_user(ui){ 
    var paired = uu[ui]; 
    var newgrouplist = []; 
    while(!paired.every((p)=>(p>0))){ 
     var newgroup = pick_group_members(ui,[ui],groupsize-1); 
     for(var i=0;i<newgroup.length; i++){ 
      for(var j=i+1;j<newgroup.length; j++){ 
       uu[newgroup[i]][newgroup[j]]++; 
       uu[newgroup[j]][newgroup[i]]++; 
      } 
     } 
     newgrouplist.push(newgroup); 
    } 
    return newgrouplist; 
} 
function group_user_index(){ 
    var groups = []; 
    for(var i=0; i < users.length; i ++){ 
     groups = groups.concat(group_for_one_user(i)); 
    } 
    return groups; 
} 
function findsolution(){ 
} 
function groupproblem(i_users,i_groupsize){ 
    users = i_users; 
    groupsize = i_groupsize; 
    initpairrecord(); 
    var groups = group_user_index(); 
    return groups.map((g)=>(
     {'group': g.map((i)=>({'name': users[i].name}))} 
    )); 
} 

given = [ 
    {name: 'Parul Panchal'}, 
    {name: 'JJ Rademan'}, 
    {name: 'Mohamed Bassa'}, 
    {name: 'Naomi'}, 
    {name: 'Puella Lunsiswa'}, 
    {name: 'Pumla Kaleni'}, 
    {name: 'Jamie Gibbons'}, 
    {name: 'Charles'}, 
    {name: 'Mocheku Maseko'} 
]; 
sol = groupproblem(given,3); 
console.log(sol); 
+0

感謝TCPN,它的工作原理很好 –