Guest User

Untitled

a guest
Nov 16th, 2018
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.90 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. from collections import namedtuple
  3.  
  4. Event = namedtuple('Event', 'type, time')
  5.  
  6.  
  7. def get_key(e: Event) -> int:
  8.     return e.time + 0.5 if e.type == 'out' else e.time
  9.  
  10.  
  11. def pref_sum(xs):
  12.     for i in range(1, len(xs)):
  13.         xs[i] += xs[i-1]
  14.     return xs
  15.  
  16.  
  17. def intervals_to_events(intervals):
  18.     events = []
  19.  
  20.     for in_time, out_time in intervals:
  21.         events.append(Event('in', in_time))
  22.         events.append(Event('out', out_time))
  23.  
  24.     return events
  25.  
  26.  
  27. def max_overlap(intervals) -> int:
  28.     events = intervals_to_events(intervals)
  29.     events.sort(key=get_key)
  30.     in_outs = list(map(lambda event: 1 if event.type == 'in' else -1, events))
  31.     pref_sum(in_outs)
  32.     return max(in_outs)
  33.  
  34.  
  35. def main():
  36.     _test()
  37.     print("ok")
  38.  
  39.  
  40. def _test():
  41.     assert max_overlap([(30, 75), (0, 50), (60, 150)]) == 2
  42.  
  43.  
  44. if __name__ == '__main__':
  45.     main()
Advertisement
Add Comment
Please, Sign In to add comment