Newer
Older
* Cette fonction selectionne les 3 meilleurs films d'une liste de film.
*
* @param {Movie[]} movies - Liste de film.
* @returns {Movie[]} - La liste des 3 films.
*/
function top3(movies) {
let highestNotes = [movies[0], movies[0], movies[0]];
for (let i = 1; i < movies.length; i++) {
if(movies[i].note >= highestNotes[0].note){
highestNotes[2] = highestNotes[1];
highestNotes[1] = highestNotes[0];
highestNotes[0] = movies[i];
}else if(movies[i].note >= highestNotes[1].note){
highestNotes[2] = highestNotes[1];
highestNotes[1] = movies[i];
}else if(movies[i].note >= highestNotes[2].note){
highestNotes[2] = movies[i];
}
}
return highestNotes;
}
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/**
* Cette fonction selectionne les 3 meilleurs films pour un utilisateur.
*
* @param {string} user_login - Login de l'utilisateur.
* @returns {Movie[]} - La liste des 3 films.
*/
function recommendationForUser(user_login) {
let person = get_user(user_login);
let fav_styles = []; //styles des films présents dans les films aimés par l'utilisateur
let fav_authors = []; //auteurs récurents dans les films aimés par l'utilisateur : moyenne (auteur * note du film)
let fav_actors = []; //acteurs récurents dans les films aimés par l'utilisateur : moyenne (acteur * note du film (* %temps écran))
//let fav_duration;
let seen = person.movies;
let authors = getAllAuthors(seen).slice(0,3);
for (let i = 0; i < authors.length; i++) {
fav_authors = authors[i][0]; //recuperer seulement l'auteur, pas le reste
}
}
/**
* trier une matrice par l'indice 1, puis par l'indice 2, puis par l'indice 0.
*
* @param {[string, Number, Number]} a - ligne d'une matrice
* @param {[string, Number, Number]} b - ligne d'une matrice
* @returns {Number} - 1 si a est plus grand, 0 si a=b, -1 si b est plus grand.
*/
function comparerLignes(a, b) {
// trier par le nombre d'apparition de l'auteur dans la liste de film vus (int)
if (a[1] < b[1]) return -1;
if (a[1] > b[1]) return 1;
// Si le nombre d'apparition est le même, trier par la moyenne de notes des films de l'auteur (float)
if (a[2] < b[2]) return -1;
if (a[2] > b[2]) return 1;
// Si la moyenne est la même, trier par le nom de l'auteur (string)
if (a[0] < b[0]) return -1;
if (a[0] > b[0]) return 1;
// Les lignes sont égales
alert("doublon d'auteur !!");
return 0;
}
/**
* renvoie une liste d'auteurs, avec leur nombre d'apparition dans la liste des films vus par un utilisateur, puis leur note moyenne
*
* @param {Movie[]} movies - Liste de film vus par un utilisateur.
* @param {string(Movie)} recupElement - Fonction qui recupere un element d'un film (pour generaliser allAutors à allElement).
* @returns {[[string, Number, Number]]} - La liste des auteurs.
*/
function getAllAuthors(movies, recupElement){
let authors = [[]];
//premier indice = couple auteur/nombre d'apparition/moyenne notes films, 2e indice: 0 auteur, 1 nbr apparition, 2 mpyenne films
for (let i = 0; i < seen.length; i++) {
let j = 0;
let found = false;
while(j < authors.length && !found){
if (authors[j][0] == seen[i].author) {
found = true;
authors[j][1] += 1;
authors[j][2] += seen[i].note;
}
j++;
}
if(!found){
authors.append([seen[i].author, 1, seen[i].note]);
}
}
for (let i = 0; i < authors.length; i++) {
authors[i][2] /= authors[i][1];
}
authors.sort(comparerLignes);
return authors;
}
function getAuthor(movie){
return movie.author;
}
function getActors(movie){
return movie.actors;
}
function getStyles(movie){
return movie.styles;
}