Advertisement
tiberiup

Planificare evenimente

Dec 9th, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.42 KB | None | 0 0
  1.  
  2.  
  3. class Nod:
  4. def __init__(self, numarStare, parinte, eveniment, indiceEveniment, sala):
  5. self.numarStare=numarStare
  6. self.parinte=parinte
  7. self.eveniment=eveniment
  8. self.indiceEveniment=indiceEveniment
  9. self.sala=sala
  10.  
  11. def potPlanifica(self, eveniment, sala):
  12. if eveniment.tip!=sala.tip or eveniment.participanti>sala.locuri:
  13. return False
  14.  
  15. nodCurent=self
  16. while nodCurent.parinte!=None:
  17. if sala==nodCurent.sala and eveniment.interval.suprapuneCu(nodCurent.eveniment.interval):
  18. return False
  19. nodCurent=nodCurent.parinte
  20.  
  21. return True
  22.  
  23.  
  24. class Sala:
  25. def __init__(self, numar, locuri, tip):
  26. self.numar=numar
  27. self.locuri=locuri
  28. self.tip=tip
  29.  
  30. class Interval:
  31. def __init__(self, oraInceput, minuteInceput, oraSfarsit, minuteSfarsit):
  32. self.oraInceput=oraInceput
  33. self.minuteInceput=minuteInceput
  34. self.oraSfarsit=oraSfarsit
  35. self.minuteSfarsit=minuteSfarsit
  36.  
  37. def suprapuneCu(self, interval):
  38. m1=self.oraInceput*60+self.minuteInceput
  39. m2=self.oraSfarsit*60+self.minuteSfarsit
  40. m3=interval.oraInceput*60+interval.minuteInceput
  41.  
  42. if m1<=m3 and m3<=m2:
  43. return True
  44. return False
  45.  
  46. class Eveniment:
  47. def __init__(self, interval, participanti, tip):
  48. self.interval=interval
  49. self.participanti=participanti
  50. self.tip=tip
  51.  
  52. def initializareDate():
  53. sali=[]
  54. sali.append(Sala(1, 21, "Videoconferinta"))
  55. sali.append(Sala(2, 34, "Videoconferinta"))
  56. sali.append(Sala(3, 15, "Videoconferinta"))
  57. sali.append(Sala(4, 50, "Scena"))
  58. sali.append(Sala(5, 24, "Scena"))
  59. sali.append(Sala(6, 35, "Scena"))
  60. sali.append(Sala(7, 14, "Masa rotunda"))
  61. sali.append(Sala(8, 25, "Masa rotunda"))
  62. sali.append(Sala(9, 18, "Masa rotunda"))
  63. sali.append(Sala(10, 24, "Videoconferinta"))
  64.  
  65. evenimente=[]
  66. evenimente.append(Eveniment(Interval(12,40,13,20), 24, "Videoconferinta"))
  67. evenimente.append(Eveniment(Interval(12,40,13,20), 15, "Videoconferinta"))
  68. evenimente.append(Eveniment(Interval(14,40,15,20), 20, "Masa rotunda"))
  69. evenimente.append(Eveniment(Interval(12,40,13,20), 15, "Masa rotunda"))
  70. evenimente.append(Eveniment(Interval(9,50,11,40), 18, "Videoconferinta"))
  71. evenimente.append(Eveniment(Interval(8,40,9,40), 8, "Videoconferinta"))
  72. evenimente.append(Eveniment(Interval(12,40,13,20), 30, "Videoconferinta"))
  73. evenimente.append(Eveniment(Interval(8,40,9,40), 11, "Masa rotunda"))
  74. evenimente.append(Eveniment(Interval(12,40,13,20), 25, "Masa rotunda"))
  75. evenimente.append(Eveniment(Interval(12,40,13,20), 40, "Scena"))
  76. evenimente.append(Eveniment(Interval(9,40,10,20), 15, "Scena"))
  77. evenimente.append(Eveniment(Interval(10,40,13,20), 20, "Scena"))
  78. evenimente.append(Eveniment(Interval(14,20,14,50), 15, "Masa rotunda"))
  79. evenimente.append(Eveniment(Interval(9,40,10,20), 17, "Masa rotunda"))
  80. evenimente.append(Eveniment(Interval(12,40,13,20), 34, "Scena"))
  81. evenimente.append(Eveniment(Interval(10,40,12,30), 27, "Scena"))
  82. evenimente.append(Eveniment(Interval(10,40,12,30), 27, "Videoconferinta"))
  83.  
  84. return sali, evenimente
  85.  
  86. def gasitSolutie(nod, numarEvenimente):
  87. return nod.indiceEveniment==numarEvenimente
  88.  
  89. def afisareSolutie(nod):
  90. nodCurent=nod
  91. while nodCurent.parinte!=None:
  92. print ("Evenimentul {} va avea loc in sala {}.".format(nodCurent.indiceEveniment+1, nodCurent.sala.numar))
  93. nodCurent=nodCurent.parinte
  94.  
  95.  
  96. def Cautare():
  97. frontiera=[]
  98. teritoriu=[]
  99.  
  100. sali, evenimente=initializareDate()
  101.  
  102. frontiera.append(Nod(1, None, None, -1, None))
  103.  
  104. while True:
  105. if len(frontiera)==0:
  106. print("Insucces")
  107. return 0
  108.  
  109. nodCurent=frontiera.pop()
  110. teritoriu.append(nodCurent)
  111. evenimentCurent=evenimente[nodCurent.indiceEveniment+1]
  112.  
  113. for sala in sali:
  114. if nodCurent.potPlanifica(evenimentCurent,sala):
  115. nod=Nod(len(frontiera)+len(teritoriu)+1,nodCurent,evenimentCurent,nodCurent.indiceEveniment+1,sala)
  116.  
  117. if gasitSolutie(nod,len(evenimente)-1):
  118. print("Succes")
  119. afisareSolutie(nod)
  120. return 1
  121.  
  122. frontiera.append(nod)
  123.  
  124. Cautare()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement