Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import datetime
- class Meeting:
- def __init__(self, count, names, time, duration, day):
- self.count = count
- self.time = time
- self.names = names
- self.day = int(day)
- self.hours, self.minutes = time.split(':')
- self.duration = int(duration)
- TIME_TEMP = '01/01/2018'
- time = datetime.datetime.strptime(TIME_TEMP, '%m/%d/%Y')
- self.start_time = time + datetime.timedelta(days=int(day), hours=int(self.hours), minutes=int(self.minutes))
- self.end_time = self.start_time + datetime.timedelta(minutes=self.duration)
- def is_on_meeting(self, name):
- for n in self.names:
- if n == name:
- return True
- return False
- def get_times(self):
- return {
- 'start': self.start_time,
- 'end': self.end_time
- }
- class MeetingSystem:
- def __init__(self):
- self.meetings = []
- def appoint(self, request):
- meeting = Meeting(day=request[0], time=request[1], duration=request[2],
- count=request[3], names=request[4:])
- cross = self.check_meeting_on_fail(meeting)
- if cross:
- print('FAIL')
- print(' '.join(cross))
- else:
- print('OK')
- self.meetings.append(meeting)
- def check_meeting_on_fail(self, meeting):
- for m in self.meetings:
- if self.check_meetings_on_cross(m, meeting):
- cross = self.check_users_on_cross(m, meeting)
- if len(cross) > 0:
- return cross
- return False
- def check_users_on_cross(self, m1, m2):
- res = []
- for n1 in m1.names:
- if n1 in m2.names:
- res.append(n1)
- return res
- def check_meetings_on_cross(self, m1, m2):
- t1 = 0
- t2 = 0
- if m1.get_times()['start'] < m2.get_times()['start']:
- t1 = m1
- t2 = m2
- elif m1.get_times()['start'] > m2.get_times()['start']:
- t2 = m1
- t1 = m2
- else:
- return True
- t = t2.get_times()['end'] - t1.get_times()['start']
- return t < (t1.get_times()['end'] - t1.get_times()['start']) + (t2.get_times()['end'] - t2.get_times()['start'])
- def print_meetings(self, day, name):
- meetings = list(filter(lambda x: x.day == int(day), self.meetings))
- is_empty = True
- for m in meetings:
- if name in m.names:
- print(m.time, m.duration, ' '.join(m.names))
- is_empty = False
- break
- if is_empty:
- print()
- count_of_requests = int(input())
- meeting_system = MeetingSystem()
- for _ in range(count_of_requests):
- request_string = input().split()
- if request_string[0] == 'APPOINT':
- meeting_system.appoint(request_string[1:])
- else:
- meeting_system.print_meetings(*request_string[1:])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement