--- /dev/null
+// Constants
+let MIN_DISTANCE = 80;
+let MAX_PER_GROUP = 3;
+let NB_USERS = 10;
+
+// Utils
+let rand = function(min, max) {
+ min = Math.ceil(min);
+ max = Math.floor(max);
+ return Math.floor(Math.random() * (max - min + 1)) + min;
+};
+
+// Test Data
+let users = [];
+for(let i = 1; i <= NB_USERS; i++) {
+ let user = {};
+ user.id = rand(0,99999);
+ user.X = rand(0, 60);
+ user.Y = rand(0, 60);
+ users.push(user);
+}
+
+// Compute distance between each user
+let computeDistance = function(users) {
+ let i = 0;
+ let distances = [];
+
+ users.forEach(function(user1, key1) {
+ users.forEach(function(user2, key2) {
+ if(key1 !== key2 && key1 < key2) {
+ let distanceObj = {};
+ distanceObj.distance = Math.sqrt(Math.pow(user2.X - user1.X, 2) + Math.pow(user2.Y - user1.Y, 2));
+ distanceObj.first = user1;
+ distanceObj.second = user2;
+
+ distances[i] = distanceObj;
+ i++;
+ }
+ });
+ });
+
+ return distances;
+};
+
+// Organise groups
+let createGroups = function(distances) {
+ let i = 0;
+ let groups = [];
+ let alreadyInGroup = [];
+
+ for(let j = 0; j < distances.length; j++) {
+ let dist = distances[i];
+ if(dist.distance <= MIN_DISTANCE) {
+ if(typeof groups[i] === 'undefined') {
+ groups[i] = [];
+ }
+
+ if(groups[i].indexOf(dist.first) && typeof alreadyInGroup[dist.first.id] === 'undefined') {
+ groups[i].push(dist.first);
+ alreadyInGroup [dist.first.id] = true;
+ }
+
+ if(groups[i].length === MAX_PER_GROUP) {
+ i++; // on créé un nouveau groupe
+ if(i > (NB_USERS / MAX_PER_GROUP)) {
+ console.log('There is no room left for user ID : ' + dist.second.id + ' !');
+ break;
+ }
+ continue;
+ }
+
+ if(groups[i].indexOf(dist.second) && typeof alreadyInGroup[dist.second.id] === 'undefined') {
+ groups[i].push(dist.second);
+ alreadyInGroup [dist.second.id] = true;
+ }
+ }
+ }
+
+ return groups;
+};
+
+let distances = computeDistance(users);
+let groups = createGroups(distances);
+// TODO : Créer une méthode pour checker la distance entre les membres du groupes pour savoir s'il faut les dissoudre ou non
+
+console.log(distances);
+console.log(groups);
+