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

gap_limit
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))
  1. 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:]:
  2. gap ← 2

    pass 1 of 2
    10previous_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:
  3. large_gaps ← 1

    pass 1 of 2
    12gap = meeting["start"] - previous_end13if gap2 >= gap_limit2:14    large_gaps→ 1 += 115previous_end = meeting["end"]
  4. previous_end ← 13

    14    large_gaps += 115previous_end→ 13 = meeting["end"]13
  5. gap ← 2

    pass 2 of 2
    10previous_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:
  6. large_gaps ← 2

    pass 2 of 2
    12gap = meeting["start"] - previous_end13if gap2 >= gap_limit2:14    large_gaps→ 2 += 115previous_end = meeting["end"]
  7. previous_end ← 16

    14    large_gaps += 115previous_end→ 16 = meeting["end"]16
  8. print("gaps=" + str(large_gaps))

    17print("gaps=" + str(large_gaps2))
    outputgaps=2
  1. 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:]:
  2. gap ← 2

    pass 1 of 2
    10previous_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:
  3. large_gaps ← 1

    pass 1 of 2
    12gap = meeting["start"] - previous_end13if gap2 >= gap_limit1:14    large_gaps→ 1 += 115previous_end = meeting["end"]
  4. previous_end ← 13

    14    large_gaps += 115previous_end→ 13 = meeting["end"]13
  5. gap ← 2

    pass 2 of 2
    10previous_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:
  6. large_gaps ← 2

    pass 2 of 2
    12gap = meeting["start"] - previous_end13if gap2 >= gap_limit1:14    large_gaps→ 2 += 115previous_end = meeting["end"]
  7. previous_end ← 16

    14    large_gaps += 115previous_end→ 16 = meeting["end"]16
  8. print("gaps=" + str(large_gaps))

    17print("gaps=" + str(large_gaps2))
    outputgaps=2