90 lines
2.7 KiB
JavaScript
90 lines
2.7 KiB
JavaScript
var _ = require('lodash');
|
|
|
|
var hostTeamsFactory = function(teams){
|
|
var i = 0;
|
|
return function(){
|
|
var ret = teams[i];
|
|
i = i + 1;
|
|
if(i == teams.length){
|
|
i = 0;
|
|
teams = _.shuffle(teams);
|
|
}
|
|
return ret;
|
|
};
|
|
};
|
|
|
|
var getGuestTeams = function(hostTeams, teams){
|
|
return _.difference(hostTeams, teams);
|
|
};
|
|
|
|
var getLastTimeTwoTeamHasPlayedAgainst = function(history, team1, team2){
|
|
for(var i = 0; i < history.length; i++){
|
|
var nighGame = history[history.length - i - 1];
|
|
if(nighGame[team1] == team2 || nighGame[team2] == team1){
|
|
return i;
|
|
}
|
|
}
|
|
return -Infinity;
|
|
};
|
|
|
|
var initiateScheduleWithHostTeams = function(teams, numberOfNights, numberOfGamePerNight){
|
|
var hostTeams = hostTeamsFactory(teams);
|
|
return _.map(_.range(numberOfNights), function(){
|
|
var ret = {};
|
|
_.each(_.range(numberOfGamePerNight), function(){
|
|
ret[hostTeams()] = undefined;
|
|
});
|
|
return ret;
|
|
});
|
|
};
|
|
|
|
var getBestGuestTeam = function(hostTeam, previousSchedule, possibleGuests){
|
|
|
|
// TODO: FIX ME.
|
|
var presiouslyPlayed = _.map(possibleGuests, function(guestTeam){
|
|
return getLastTimeTwoTeamHasPlayedAgainst(previousSchedule, hostTeam, guestTeam);
|
|
});
|
|
var m = _.fromPairs(_.zip(presiouslyPlayed, possibleGuests));
|
|
console.log(hostTeam);
|
|
console.log(m);
|
|
console.log(m[_.min(presiouslyPlayed)]);
|
|
console.log('\n\n\n\n');
|
|
return m[_.min(presiouslyPlayed)];
|
|
|
|
};
|
|
|
|
var addGuestTeamToNight = function(night, previousSchedule, teams){
|
|
var hostTeams = _.keys(night);
|
|
var nightHistory = 12;
|
|
_.each(hostTeams, function(hostTeam){
|
|
var alreadyChoosenTeam = _.compact(_.values(night));
|
|
var prohibitedGuests = _.concat(hostTeams, alreadyChoosenTeam);
|
|
var possibleGuests = _.difference(teams, prohibitedGuests);
|
|
night[hostTeam] = getBestGuestTeam(hostTeam, previousSchedule, possibleGuests);
|
|
});
|
|
return night;
|
|
};
|
|
|
|
var addGuestTeams = function(schedule, teams){
|
|
return _.map(schedule, function(night, idx){
|
|
return addGuestTeamToNight(night, schedule.slice(0, idx), teams);
|
|
});
|
|
};
|
|
|
|
function createSchedule(teams, numberOfNights, numberOfGamePerNight){
|
|
var schedule = initiateScheduleWithHostTeams(teams, numberOfNights, numberOfGamePerNight);
|
|
return addGuestTeams(schedule, teams);
|
|
}
|
|
|
|
function main(){
|
|
var teams = ['jaune', 'vert', 'bleu', 'rouge', 'gris', 'orange'];
|
|
var numberOfNights = 10;
|
|
var numberOfGamePerNight = 3;
|
|
var schedule = createSchedule(teams, numberOfNights, numberOfGamePerNight);
|
|
_.each(schedule, function(night){
|
|
console.log(night, ',');
|
|
});
|
|
}
|
|
|
|
main();
|