Advertisement
Guest User

Untitled

a guest
Mar 18th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. import datetime
  2.  
  3.  
  4. class Meeting:
  5. def __init__(self, count, names, time, duration, day):
  6. self.count = count
  7. self.time = time
  8. self.names = names
  9. self.day = int(day)
  10. self.hours, self.minutes = time.split(':')
  11. self.duration = int(duration)
  12.  
  13. TIME_TEMP = '01/01/2018'
  14. time = datetime.datetime.strptime(TIME_TEMP, '%m/%d/%Y')
  15.  
  16. self.start_time = time + datetime.timedelta(days=int(day), hours=int(self.hours), minutes=int(self.minutes))
  17. self.end_time = self.start_time + datetime.timedelta(minutes=self.duration)
  18.  
  19. def is_on_meeting(self, name):
  20. for n in self.names:
  21. if n == name:
  22. return True
  23. return False
  24.  
  25. def get_times(self):
  26. return {
  27. 'start': self.start_time,
  28. 'end': self.end_time
  29. }
  30.  
  31.  
  32. class MeetingSystem:
  33. def __init__(self):
  34. self.meetings = []
  35.  
  36. def appoint(self, request):
  37. meeting = Meeting(day=request[0], time=request[1], duration=request[2],
  38. count=request[3], names=request[4:])
  39.  
  40. cross = self.check_meeting_on_fail(meeting)
  41. if cross:
  42. print('FAIL')
  43. print(' '.join(cross))
  44. else:
  45. print('OK')
  46. self.meetings.append(meeting)
  47.  
  48. def check_meeting_on_fail(self, meeting):
  49. for m in self.meetings:
  50. if self.check_meetings_on_cross(m, meeting):
  51. cross = self.check_users_on_cross(m, meeting)
  52. if len(cross) > 0:
  53. return cross
  54. return False
  55.  
  56. def check_users_on_cross(self, m1, m2):
  57. res = []
  58. for n1 in m1.names:
  59. if n1 in m2.names:
  60. res.append(n1)
  61. return res
  62.  
  63. def check_meetings_on_cross(self, m1, m2):
  64. t1 = 0
  65. t2 = 0
  66. if m1.get_times()['start'] < m2.get_times()['start']:
  67. t1 = m1
  68. t2 = m2
  69. elif m1.get_times()['start'] > m2.get_times()['start']:
  70. t2 = m1
  71. t1 = m2
  72. else:
  73. return True
  74.  
  75. t = t2.get_times()['end'] - t1.get_times()['start']
  76. return t < (t1.get_times()['end'] - t1.get_times()['start']) + (t2.get_times()['end'] - t2.get_times()['start'])
  77.  
  78. def print_meetings(self, day, name):
  79. meetings = list(filter(lambda x: x.day == int(day), self.meetings))
  80. is_empty = True
  81. for m in meetings:
  82. if name in m.names:
  83. print(m.time, m.duration, ' '.join(m.names))
  84. is_empty = False
  85. break
  86. if is_empty:
  87. print()
  88.  
  89.  
  90. count_of_requests = int(input())
  91. meeting_system = MeetingSystem()
  92. for _ in range(count_of_requests):
  93. request_string = input().split()
  94. if request_string[0] == 'APPOINT':
  95. meeting_system.appoint(request_string[1:])
  96. else:
  97. meeting_system.print_meetings(*request_string[1:])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement