File size: 2,493 Bytes
aadd23b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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
def get_student_by_id(students, student_id):
    for student in students:
        if student.educmaster == student_id:
            return student
    return None

def calculer_moyennes(resultats):
    moyennes = {}
    for annee, matieres in resultats.items():
        if annee != "Baccalauréat":
            moyennes[annee] = {}
            for matiere, notes in matieres.items():
                moyenne = (notes["Semestre 1"] + notes["Semestre 2"]) / 2
                moyennes[annee][matiere] = moyenne
    return moyennes

def calculer_scores_selection(moyennes, coefficients, biais):
    scores = {}
    for annee, matieres in moyennes.items():
        scores[annee] = {}
        for matiere, moyenne in matieres.items():
            coef = coefficients.get_coefficient(matiere)
            score = (moyenne * coef) + moyenne + biais.get(matiere, 0)
            scores[annee][matiere] = score
    return scores

def selectionner_meilleures_matieres(scores):
    """
    Sélectionne les trois meilleures matières pour chaque année, y compris le Baccalauréat.

    :param scores: Les scores des matières par année.
    :return: Un dictionnaire des meilleures matières par année.
    """
    meilleures_matieres = {}
    for annee, matieres in scores.items():
        sorted_matieres = sorted(matieres.items(), key=lambda x: x[1], reverse=True)
        meilleures_matieres[annee] = [matiere for matiere, score in sorted_matieres[:3]]
    return meilleures_matieres

def compter_occurrences_meilleures_matieres(meilleures_matieres):
    occurrences = {}
    for annee, matieres in meilleures_matieres.items():
        for matiere in matieres:
            if matiere in occurrences:
                occurrences[matiere] += 1
            else:
                occurrences[matiere] = 1
    return occurrences

def selectionner_top_matieres(occurrences, biais):
    sorted_occurrences = sorted(occurrences.items(), key=lambda x: (x[1], biais.get(x[0], 0)), reverse=True)
    return [matiere for matiere, count in sorted_occurrences[:4]]

def proposer_filieres(top_matieres, filieres, serie):
    propositions = []
    for filiere in filieres:
        if filiere.serie == serie:
            count_best_matieres = sum(1 for matiere in top_matieres if matiere in filiere.matieres)
            propositions.append((filiere, count_best_matieres))

    propositions_triees = sorted(propositions, key=lambda x: x[1], reverse=True)
    return [filiere for filiere, count in propositions_triees]