Advertisement
Pouknouki

Recuit simulé #2

Sep 23rd, 2016
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.46 KB | None | 0 0
  1. # -*- coding: cp1252 -*-
  2. class Eleve:
  3.     def __init__(self, Nom, Oraux):
  4.         self.Nom = Nom
  5.         self.Oraux = Oraux
  6.  
  7.     def estDisponible(self, Heure, OralType_):
  8.         if self.associe(OralType_):
  9.             return False
  10.         for Oral in self.Oraux:
  11.             if Oral.Heure <= Heure and Oral.HeureFin >= Heure:
  12.                 return False
  13.             elif Oral.Heure >= Heure and Heure + OralType_.Duree >= Oral.HeureFin:
  14.                 return False
  15.         return True
  16.  
  17.     def associe(self, OralType_):
  18.         return OralType_ in [o.OralType_ for o in self.Oraux]
  19.        
  20.     def Associer(self, Oral):
  21.         print(Oral.OralType_.Matiere + " " + str(Oral.Heure) + " " + self.Nom)
  22.         self.Oraux.append(Oral)
  23.  
  24. class Jury:
  25.     def __init__(self, Nom, OT, Oraux):
  26.         self.Nom = Nom
  27.         self.OralType_ = OT
  28.         self.Oraux = Oraux
  29.  
  30.     def Associer(self, Oral):
  31.         print(Oral.OralType_.Matiere + " " + str(Oral.Heure) + " " + self.Nom)
  32.         self.Oraux.append(Oral)
  33.  
  34.     def estDisponible(self, Heure):
  35.         for Oral in self.Oraux:
  36.             if Oral.Heure <= Heure and Oral.HeureFin >= Heure:
  37.                 return False
  38.             elif Oral.Heure >= Heure and Heure + self.OralType_.Duree >= Oral.HeureFin:
  39.                 return False
  40.         return True        
  41.  
  42. class OralType:
  43.     def __init__(self, Matiere, Duree):
  44.         self.Matiere = Matiere
  45.         self.Duree = Duree
  46.  
  47. class Oral:
  48.     def __init__(self, OT, Jury, Eleve, Heure):
  49.         self.OralType_ = OT
  50.         self.Jury = Jury
  51.         self.Eleve = Eleve
  52.         self.Heure = Heure
  53.         self.HeureFin = Heure + OT.Duree
  54.  
  55. def creerEmploiDuTemps(Jurys, Eleves):
  56.     for j in range(len(Jurys)):
  57.         print(Jurys[j].Nom)
  58.         heure = 0
  59.         while not Associes(Eleves, Jurys[j].OralType_):
  60.             AssociesDansCetteBoucle = 0
  61.             for e in range(len(Eleves)):
  62.                 #print(Eleves[e].Nom)
  63.                 if Eleves[e].estDisponible(heure, Jurys[j].OralType_):
  64.                     if Jurys[j].estDisponible(heure):
  65.                         #Création du nouvel objet oral
  66.                         newOral = Oral(Jurys[j].OralType_, Jurys[j], Eleves[e], heure)
  67.                         #Ajout de l'oral à l'élève en cours
  68.                         Eleves[e].Associer(newOral)
  69.                         #Ajout de l'oral au jury en cours
  70.                         Jurys[j].Associer(newOral)
  71.  
  72.                         #Modification des paramètres de recherche
  73.                         AssociesDansCetteBoucle += 1
  74.                         heure += Jurys[j].OralType_.Duree
  75.                         break #Sortie du for (élèves)
  76.             if AssociesDansCetteBoucle == 0:
  77.                 heure += 1
  78.  
  79. def Associes(Eleves, OralType_):
  80.     for E in Eleves:
  81.         if E.associe(OralType_) == False:
  82.             return False
  83.     return True
  84.  
  85. Epreuves = {"Français" : OralType("Français", 2), "Anglais" : OralType("Anglais", 3), "Maths" : OralType("Maths", 4), "Physique" : OralType("Physique", 4)}
  86. Jurys = [Jury("Gugger", Epreuves["Maths"], []), Jury("Demange", Epreuves["Anglais"], []), Jury("Dervieux", Epreuves["Physique"], []), Jury("Astier", Epreuves["Français"], [])]
  87. Eleves = [Eleve("Thomas", []), Eleve("Benjamin", []), Eleve("Matthis", [])]
  88.  
  89. creerEmploiDuTemps(Jurys, Eleves)
  90. for Eleve in Eleves:
  91.     print(Eleve.Nom)
  92.     print("\t" + str([o.OralType_.Matiere + " / " + str(o.Heure) for o in Eleve.Oraux]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement