Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.55 KB | None | 0 0
  1. from heapq import merge
  2. def getFreeTimes(calender1, dayRange1, calender2, dayRange2, meetingLength):
  3.     # We want to go through the calender values and note whether they are starts or end
  4.     calenders, dayRanges = [calender1, calender2], [dayRange1, dayRange2]
  5.     calTup = []
  6.     for i, cal in enumerate(calenders):
  7.         c = []
  8.         for slot in cal:
  9.             c.append((slot[0],'Start'))
  10.             c.append((slot[1],'End'))
  11.         c.append((dayRanges[i][1], 'Start'))
  12.         calTup.append(c)
  13.  
  14.     # now we sort all these, since the two list are already sorted we can use
  15.     # heapq.merge which is O(n)
  16.     sortedMarks = list(merge(calTup[0], calTup[1]))
  17.  
  18.     # Iterate over sorted list, starts add to total and ends minus from total
  19.     # When the total is at 0 both the calanders are free
  20.     total, ans, lastEnd = 0, [], max(dayRange1[0], dayRange2[0])
  21.     for i in range(len(sortedMarks)):
  22.         if sortedMarks[i][1]=='Start':
  23.             if total==0 and (sortedMarks[i][0]-lastEnd)>=meetingLength:
  24.                 ans.append([lastEnd, sortedMarks[i][0]])
  25.             total += 1
  26.         else:
  27.             total -= 1
  28.             if total==0:
  29.                 lastEnd = sortedMarks[i][0]
  30.     return ans
  31.    
  32.  
  33. calender1 = [[9, 10.5],[12, 13],[16, 18]]
  34. dayRange1 = [9, 20]
  35.  
  36. calender2 = [[10, 11.5],[12.5, 14.5],[14.5,15],[16, 17]]
  37. dayRange2 = [10, 18.5]
  38.  
  39. meetingLength = .5
  40.  
  41. expAns = [[11.5, 12], [15, 16], [18, 18.5]]
  42. ans = getFreeTimes(calender1, dayRange1, calender2, dayRange2, meetingLength)
  43.  
  44. print(ans)
  45. print(ans==expAns)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement