Files
website/data/createshedule.js
T

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();