Skip to content

Instantly share code, notes, and snippets.

@arran4
Last active December 10, 2017 02:44
Show Gist options
  • Save arran4/e9074c4d2c22aef89705d86b1f3c42a0 to your computer and use it in GitHub Desktop.
Save arran4/e9074c4d2c22aef89705d86b1f3c42a0 to your computer and use it in GitHub Desktop.
function SelectMovie(movies, avail, movieprefs) {
var dateData = new Array();
var lenPeople = avail[0].length;
if (lenPeople != movieprefs[0].length) {
return "Error; length mismatch 1";
}
if (movies.length != movieprefs.length) {
return "Error; length mismatch 2";
}
for(var ai = 0; ai < avail.length; ai++) {
var calcLine = new Array();
for (var mi = 0; mi < movies.length; mi++) {
var heuristic = 0;
var consideredPeople = 0;
for (var pi = 0; pi < movieprefs[mi].length && pi < avail[ai].length; pi++) {
var code = movieprefs[mi][pi] + ':' + avail[ai][pi];
switch (code) {
case ":": heuristic += 0; consideredPeople += 0; break; // Not coming, not interested - no data. Neural.
case ":?": heuristic += 0.5; consideredPeople += 1; break; // Might come, not interested - no data. Neural.
case "?:?": heuristic += 0.5; consideredPeople += 1; break; // Might come, Might like - no data. Neural. - Who gives a fuck about these people.
case "y:": heuristic += 0.1; consideredPeople += 1; break; // Interested but can't make it - want to ensure that people get to see the movies they want
case "n:": heuristic += 0.55; consideredPeople += 1; break; // NOT Interested but can't make it - Positive!
case "n:?": heuristic += 0.40; consideredPeople += 1; break; // NOT Interested but might make it - This one is tricky a risk.
case "n:y": heuristic += -0.5; consideredPeople += 1; break; // NOT Interested but can make it - want to ensure that people get to see the movies they want
case ":y": heuristic += 0.25; consideredPeople += 1; break; // Can make it but not interested - they haven't said the DON'T want to see just they aren't interested
case "y:y": heuristic += 1.0; consideredPeople += 1; break; // Interested and can make it - best result
case "y:?": heuristic += 0.35; consideredPeople += 1; break; // Maybe can make it but interested - meh.
case "?:y": heuristic += 0.75; consideredPeople += 1; break; // maybe watch the movie but can make it - second best
default:
heuristic += 0.5;
Logger.log("Mismatched somewhere some how: " + code);
}
}
if (consideredPeople == 0) {
consideredPeople = 1;
}
var calcCell = new Array(movies[mi][0], heuristic / consideredPeople);
calcLine.push(calcCell);
}
calcLine.sort(function (i1,i2) { return i2[1] - i1[1]; });
dateData.push(calcLine);
}
var result = new Array();
var watched = new Object();
for (var day = 0; day < dateData.length; day++) {
var movie = "NO MOVIE!";
var weight = "!!!";
for (var mi = 0; mi < dateData[day].length; mi++) {
var m = dateData[day][mi][0];
if (watched[m]) {
continue;
}
var w = dateData[day][mi][1];
if (w < 0.5) {
break;
}
movie = m;
weight = w;
watched[m] = new Array(true, m, day);
break;
}
result.push(new Array(movie, weight));
}
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment