Case Studies
Schedule Gaps
Sequential records can be compared pair by pair to find gaps.
adjacent records
Keeping the previous end time makes each gap calculation explicit.
Schedule Gaps
schedule_gaps.py
Replay: real traced execution (multi-file project)
meetings = [
{"start": 9, "end": 10},
{"start": 12, "end": 13},
{"start": 15, "end": 16},
]
gap_limit = 2
large_gaps = 0
previous_end = meetings[0]["end"]
for meeting in meetings[1:]:
gap = meeting["start"] - previous_end
if gap >= gap_limit:
large_gaps += 1
previous_end = meeting["end"]
print("gaps=" + str(large_gaps))
meetings = [
{"start": 9, "end": 10},
{"start": 12, "end": 13},
{"start": 15, "end": 16},
]
gap_limit = 1
large_gaps = 0
previous_end = meetings[0]["end"]
for meeting in meetings[1:]:
gap = meeting["start"] - previous_end
if gap >= gap_limit:
large_gaps += 1
previous_end = meeting["end"]
print("gaps=" + str(large_gaps))
meetings ← [{'start': 9, 'end': 10}, {'start': 12, 'end': 13}, {'start': 15, 'end': 16}]
1meetings→ [{'start': 9, 'end': 10}, {'start': 12, 'end': 13}, {'start': 15, 'end': 16}] = [2 {"start": 9, "end": 10},3 {"start": 12, "end": 13},4 {"start": 15, "end": 16},5]67gap_limit→ 2 = 2 #@gap_limit=189large_gaps→ 0 = 010previous_end→ 10 = meetings[0]["end"]1011for meeting in meetings[1:]:gap ← 2
pass 1 of 210previous_end = meetings[0]["end"]11for meeting{'start': 12, 'end': 13} in meetings[1:][{'start': 12, 'end': 13}, {'start': 15, 'end': 16}]:12 gap→ 2 = meeting["start"]12 - previous_end1013 if gap >= gap_limit:large_gaps ← 1
pass 1 of 212gap = meeting["start"] - previous_end13if gap2 >= gap_limit2:14 large_gaps→ 1 += 115previous_end = meeting["end"]previous_end ← 13
14 large_gaps += 115previous_end→ 13 = meeting["end"]13gap ← 2
pass 2 of 210previous_end = meetings[0]["end"]11for meeting{'start': 15, 'end': 16} in meetings[1:][{'start': 12, 'end': 13}, {'start': 15, 'end': 16}]:12 gap→ 2 = meeting["start"]15 - previous_end1313 if gap >= gap_limit:large_gaps ← 2
pass 2 of 212gap = meeting["start"] - previous_end13if gap2 >= gap_limit2:14 large_gaps→ 2 += 115previous_end = meeting["end"]previous_end ← 16
14 large_gaps += 115previous_end→ 16 = meeting["end"]16print("gaps=" + str(large_gaps))
17print("gaps=" + str(large_gaps2))outputgaps=2
meetings ← [{'start': 9, 'end': 10}, {'start': 12, 'end': 13}, {'start': 15, 'end': 16}]
1meetings→ [{'start': 9, 'end': 10}, {'start': 12, 'end': 13}, {'start': 15, 'end': 16}] = [2 {"start": 9, "end": 10},3 {"start": 12, "end": 13},4 {"start": 15, "end": 16},5]67gap_limit→ 1 = 189large_gaps→ 0 = 010previous_end→ 10 = meetings[0]["end"]1011for meeting in meetings[1:]:gap ← 2
pass 1 of 210previous_end = meetings[0]["end"]11for meeting{'start': 12, 'end': 13} in meetings[1:][{'start': 12, 'end': 13}, {'start': 15, 'end': 16}]:12 gap→ 2 = meeting["start"]12 - previous_end1013 if gap >= gap_limit:large_gaps ← 1
pass 1 of 212gap = meeting["start"] - previous_end13if gap2 >= gap_limit1:14 large_gaps→ 1 += 115previous_end = meeting["end"]previous_end ← 13
14 large_gaps += 115previous_end→ 13 = meeting["end"]13gap ← 2
pass 2 of 210previous_end = meetings[0]["end"]11for meeting{'start': 15, 'end': 16} in meetings[1:][{'start': 12, 'end': 13}, {'start': 15, 'end': 16}]:12 gap→ 2 = meeting["start"]15 - previous_end1313 if gap >= gap_limit:large_gaps ← 2
pass 2 of 212gap = meeting["start"] - previous_end13if gap2 >= gap_limit1:14 large_gaps→ 2 += 115previous_end = meeting["end"]previous_end ← 16
14 large_gaps += 115previous_end→ 16 = meeting["end"]16print("gaps=" + str(large_gaps))
17print("gaps=" + str(large_gaps2))outputgaps=2