Last active
December 10, 2017 02:44
-
-
Save arran4/e9074c4d2c22aef89705d86b1f3c42a0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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