Skip to content

Commit 47e5ee3

Browse files
author
Mia von Steinkirch
committed
some ex
1 parent 9b4c8df commit 47e5ee3

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/bin/python
2+
3+
"""
4+
Build a calendar.
5+
6+
A meeting is stored as a tuple of integers (start_time, end_time).
7+
These integers represent the number of 30-minute blocks past 9:00am.
8+
9+
For example:
10+
11+
(2, 3)# Meeting from 10:00-10:30 am
12+
(6, 9)# Meeting from 12:00-1:30 pm
13+
14+
Write a function merge_ranges() that takes a list of multiple meeting time ranges and returns a list of condensed ranges.
15+
16+
For example, given:
17+
18+
[(0, 1), (3, 5), (4, 8), (10, 12), (9, 10)]
19+
20+
your function would return:
21+
22+
[(0, 1), (3, 8), (9, 12)]
23+
24+
Do not assume the meetings are in order. The meeting times are coming from multiple teams.
25+
26+
Write a solution that's efficient even when we can't put a nice upper bound on the numbers representing our time ranges.
27+
Here we've simplified our times down to the number of 30-minute slots past 9:00 am.
28+
But we want the function to work even for very large numbers, like Unix timestamps.
29+
In any case, the spirit of the challenge is to merge meetings where start_time and end_time don't have an upper bound.
30+
"""
31+
32+
def merge_ranges(meetings):
33+
34+
sorted_meetings = sorted(meetings)
35+
merged_meetings = [sorted_meetings[0]]
36+
37+
for current_meeting_start, current_meeting_ending in sorted_meetings[1:]:
38+
last_merged_meeting_start, last_merged_meeting_end = merged_meetings[-1]
39+
40+
if (current_meeting_start <= last_merged_meeting_end):
41+
merged_meetings[-1] = (last_merged_meeting_start, max(last_merged_meeting_end, current_meeting_ending))
42+
else:
43+
merged_meetings.append((current_meeting_start, current_meeting_ending))
44+
45+
return merged_meetings
46+
47+
if __name__ == '__main__':
48+
49+
meetings = [(0, 1), (3, 5), (4, 8), (10, 12), (9, 10)]
50+
print(merge_ranges(meetings))
51+
print("Should return {}".format([(0, 1), (3, 8), (9, 12)]))
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/bin/python
2+
3+
import math
4+
import os
5+
import random
6+
import re
7+
import sys
8+
9+
# Complete the 'largestRepackaged' function below.
10+
#
11+
# The function is expected to return a LONG_INTEGER.
12+
# The function accepts INTEGER_ARRAY arrivingPackets as parameter.
13+
#
14+
15+
def largestRepackaged(arrivingPackets):
16+
17+
packet_size = arrivingPackets[0]
18+
packets = arrivingPackets[1:]
19+
largest_packet = 0
20+
remaining = 0
21+
22+
for packet in packets:
23+
print packet
24+
if remaining:
25+
packet += remaining
26+
remaining = 0
27+
28+
if packet % 2 != 0:
29+
remaining = packet % 2
30+
packet -= remaining
31+
32+
if packet > largest_packet:
33+
largest_packet = packet
34+
35+
return largest_packet
36+
37+
38+
if __name__ == '__main__':
39+
arrivingPackets= [5, 1, 2, 4, 7, 5]
40+
41+
print(largestRepackaged(arrivingPackets))

0 commit comments

Comments
 (0)