FA-94501 / Exam timetabling constraints / Open access
Exam exactly 24 hours later counted in the same window · case 01
Exams at the same time on consecutive days count toward one day's load.
ROOT CAUSE
The window eviction test keeps a start exactly 1440 minutes earlier.
VERIFIED REPAIR
Evict starts at least 1440 minutes before the current start.
Unsuccessful approach: Adding an index guard does not change the inclusive boundary.
Case contract
sits [student, exam, start minute] (rows may repeat an exam). A student violates the limit if more than limit distinct exams start inside some half-open 24-hour window [t, t + 1440). Return [student, maximum count] for violators, by student.
Why this case matters
Maximum-exams-per-day rules are stated as rolling windows; calendar bucketing and inclusive windows both misreport.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(sits, limit):
by = {}
for st, ex, t in sits:
by.setdefault(st, {})[ex] = t
out = []
for st in sorted(by):
ts = sorted(by[st].values())
best = 0
j = 0
for i in range(len(ts)):
while ts[i] - ts[j] > 1440:
j += 1
best = max(best, i - j + 1)
if best > limit:
out.append([st, best])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: window half open 1',
[[['s1', 'ECON150', 3419], ['s1', 'BIO130', 540], ['s3', 'ECON150', 3601], ['s3', 'MATH101H', 4861],
['s1', 'MATH101', 4259], ['s4', 'ECON150', 600], ['s1', 'HIST140', 7139], ['s3', 'CHEM120', 540],
['s3', 'HIST140', 3421], ['s3', 'PHYS110', 1981], ['s1', 'CHEM120', 1980], ['s4', 'BIO130', 2040],
['s1', 'HIST140', 7139]],
1],
[['s1', 2], ['s3', 2]]),
('regression variant: window half open 2',
[[['s4', 'BIO130', 4920], ['s4', 'CHEM120', 2040], ['s4', 'MATH101H', 600], ['s4', 'HIST140', 6359],
['s4', 'PHYS110', 2040]],
2],
[]),
('partial repair guard 3',
[[['s4', 'PHYS110', 1800], ['s2', 'HIST140', 1860], ['s5', 'MATH101', 3240], ['s2', 'ECON150', 600],
['s5', 'HIST140', 3240], ['s2', 'CHEM120', 2160], ['s5', 'MATH101H', 1800], ['s5', 'CHEM120', 1800],
['s4', 'BIO130', 540], ['s2', 'BIO130', 3420], ['s5', 'BIO130', 540], ['s4', 'CHEM120', 3060],
['s4', 'CHEM120', 3060]],
1],
[['s2', 2], ['s4', 2], ['s5', 3]]),
('boundary control 4', [[['s1', 'A', 600], ['s1', 'A', 600], ['s1', 'B', 900]], 1], [['s1', 2]]),
('normal control 5',
[[['s5', 'ECON150', 2700], ['s5', 'PHYS110', 7019], ['s5', 'MATH101H', 5580], ['s5', 'BIO130', 540],
['s5', 'CHEM120', 1980], ['s5', 'ECON150', 2700]],
1],
[['s5', 2]]),
('normal control 6',
[[['s3', 'PHYS110', 600], ['s3', 'MATH101H', 2280], ['s3', 'HIST140', 1440], ['s3', 'MATH101', 5160]], 2],
[]),
('normal control 7',
[[['s4', 'PHYS110', 4920], ['s5', 'PHYS110', 2759], ['s4', 'MATH101', 600], ['s4', 'BIO130', 2041],
['s4', 'ECON150', 3480], ['s5', 'ECON150', 600], ['s5', 'MATH101H', 1320]],
1],
[['s4', 2], ['s5', 2]]),
('normal control 8',
[[['s3', 'MATH101H', 2159], ['s3', 'ECON150', 2879], ['s3', 'CHEM120', 540], ['s3', 'CHEM120', 540],
['s3', 'PHYS110', 720]],
2],
[])],
[('regression: window half open 1',
[[['s5', 'MATH101', 3481], ['s5', 'PHYS110', 600], ['s5', 'MATH101', 3481], ['s1', 'ECON150', 540],
['s5', 'BIO130', 2040], ['s1', 'BIO130', 1380], ['s5', 'MATH101H', 1860], ['s5', 'CHEM120', 600]],
3],
[]),
('regression variant: window half open 2',
[[['s1', 'HIST140', 7140], ['s4', 'PHYS110', 1981], ['s4', 'ECON150', 3421], ['s1', 'CHEM120', 1380],
['s4', 'HIST140', 540], ['s4', 'CHEM120', 3241], ['s1', 'PHYS110', 4260], ['s1', 'ECON150', 540]],
2],
[]),
('partial repair guard 3',
[[['s1', 'MATH101H', 3421], ['s1', 'ECON150', 1260], ['s1', 'BIO130', 1980], ['s1', 'CHEM120', 540],
['s1', 'ECON150', 1260]],
2],
[]),
('boundary control 4', [[['s1', 'A', 540], ['s1', 'B', 1979], ['s1', 'C', 1990]], 2], []),
('normal control 5',
[[['s2', 'MATH101', 4259], ['s2', 'ECON150', 540], ['s5', 'BIO130', 2760], ['s2', 'CHEM120', 1979],
['s2', 'BIO130', 5700], ['s5', 'CHEM120', 600], ['s5', 'MATH101H', 1320], ['s2', 'MATH101H', 2819]],
2],
[]),
('normal control 6',
[[['s2', 'MATH101H', 1980], ['s2', 'ECON150', 3240], ['s2', 'PHYS110', 3960], ['s2', 'MATH101', 4140],
['s2', 'BIO130', 540]],
3],
[]),
('normal control 7',
[[['s5', 'ECON150', 1380], ['s5', 'BIO130', 540], ['s2', 'MATH101', 5159], ['s5', 'PHYS110', 1680],
['s3', 'HIST140', 2761], ['s2', 'MATH101H', 1979], ['s3', 'ECON150', 3061], ['s2', 'HIST140', 540],
['s2', 'ECON150', 4859], ['s5', 'HIST140', 3120], ['s3', 'CHEM120', 1320], ['s2', 'PHYS110', 6598],
['s2', 'HIST140', 540], ['s3', 'BIO130', 600]],
1],
[['s2', 2], ['s3', 2], ['s5', 3]]),
('normal control 8',
[[['s5', 'CHEM120', 1020], ['s5', 'HIST140', 540], ['s5', 'MATH101', 840], ['s5', 'MATH101', 840]], 3],
[])],
[('regression: window half open 1',
[[['s3', 'PHYS110', 1980], ['s3', 'CHEM120', 540], ['s2', 'BIO130', 540], ['s3', 'MATH101', 720],
['s2', 'BIO130', 540], ['s2', 'MATH101H', 1800], ['s3', 'ECON150', 1980], ['s2', 'MATH101', 3240]],
2],
[['s3', 3]]),
('regression variant: window half open 2',
[[['s1', 'ECON150', 600], ['s1', 'ECON150', 600], ['s1', 'MATH101H', 2040], ['s1', 'MATH101', 1860],
['s1', 'HIST140', 4920]],
1],
[['s1', 2]]),
('partial repair guard 3',
[[['s4', 'ECON150', 900], ['s4', 'HIST140', 2521], ['s3', 'BIO130', 2760], ['s4', 'MATH101', 600],
['s4', 'MATH101H', 2341], ['s3', 'MATH101', 600], ['s3', 'HIST140', 2040], ['s4', 'ECON150', 900],
['s3', 'ECON150', 2040], ['s3', 'CHEM120', 1320], ['s4', 'PHYS110', 3961]],
2],
[['s3', 3]]),
('boundary control 4', [[['s1', 'A', 600], ['s1', 'B', 600], ['s1', 'C', 900]], 2], [['s1', 3]]),
('normal control 5',
[[['s3', 'HIST140', 2039], ['s3', 'BIO130', 600], ['s3', 'HIST140', 2039], ['s3', 'MATH101', 3299]], 2],
[]),
('normal control 6',
[[['s4', 'ECON150', 2400], ['s3', 'ECON150', 540], ['s4', 'CHEM120', 2400], ['s3', 'BIO130', 2160],
['s1', 'MATH101H', 540], ['s3', 'HIST140', 1980], ['s1', 'BIO130', 4260], ['s1', 'PHYS110', 3420],
['s4', 'MATH101', 540], ['s4', 'HIST140', 1560], ['s1', 'MATH101', 5100], ['s4', 'BIO130', 1260]],
3],
[['s4', 4]]),
('normal control 7',
[[['s4', 'PHYS110', 840], ['s3', 'PHYS110', 1800], ['s4', 'ECON150', 540], ['s4', 'ECON150', 540],
['s3', 'ECON150', 4680], ['s3', 'BIO130', 5520], ['s3', 'CHEM120', 540]],
2],
[]),
('normal control 8',
[[['s5', 'CHEM120', 780], ['s4', 'BIO130', 540], ['s4', 'ECON150', 1380], ['s1', 'MATH101', 600],
['s1', 'BIO130', 1440], ['s5', 'BIO130', 2219], ['s5', 'MATH101H', 600]],
3],
[])],
[('regression: window half open 1',
[[['s4', 'ECON150', 2040], ['s4', 'CHEM120', 1320], ['s4', 'MATH101', 600]], 2], []),
('regression variant: window half open 2',
[[['s3', 'HIST140', 1860], ['s5', 'MATH101H', 3241], ['s1', 'CHEM120', 4921], ['s3', 'BIO130', 4741],
['s5', 'CHEM120', 540], ['s1', 'BIO130', 2041], ['s3', 'PHYS110', 3300], ['s5', 'MATH101', 1981],
['s3', 'CHEM120', 600], ['s5', 'BIO130', 3421], ['s5', 'PHYS110', 3421], ['s3', 'MATH101', 1860],
['s1', 'MATH101H', 600]],
2],
[['s3', 3], ['s5', 3]]),
('partial repair guard 3',
[[['s3', 'MATH101H', 2820], ['s2', 'MATH101H', 3420], ['s3', 'BIO130', 2820], ['s2', 'PHYS110', 4140],
['s3', 'PHYS110', 540], ['s3', 'BIO130', 2820], ['s2', 'ECON150', 540], ['s3', 'ECON150', 1380]],
2],
[]),
('boundary control 4', [[['s1', 'A', 1300], ['s1', 'B', 1500], ['s1', 'C', 1600]], 2], [['s1', 3]]),
('normal control 5', [[['s4', 'PHYS110', 600], ['s4', 'BIO130', 1320]], 1], [['s4', 2]]),
('normal control 6', [[['s1', 'ECON150', 600], ['s1', 'ECON150', 600], ['s1', 'MATH101H', 3480]], 2], []),
('normal control 7',
[[['s1', 'MATH101', 600], ['s4', 'ECON150', 540], ['s1', 'HIST140', 2760], ['s1', 'BIO130', 1320],
['s4', 'HIST140', 540], ['s1', 'CHEM120', 4200], ['s4', 'MATH101H', 1560], ['s4', 'PHYS110', 840],
['s4', 'CHEM120', 840], ['s3', 'HIST140', 540], ['s3', 'MATH101H', 3240], ['s3', 'PHYS110', 1980],
['s3', 'BIO130', 1800], ['s1', 'ECON150', 3480]],
3],
[['s4', 5]]),
('normal control 8',
[[['s2', 'MATH101', 540], ['s5', 'ECON150', 780], ['s5', 'HIST140', 2219], ['s2', 'MATH101H', 4860],
['s1', 'ECON150', 540], ['s1', 'BIO130', 1980], ['s5', 'CHEM120', 2939], ['s2', 'MATH101H', 4860],
['s1', 'CHEM120', 4860], ['s5', 'MATH101H', 4380], ['s1', 'MATH101H', 3420], ['s2', 'PHYS110', 3420],
['s2', 'CHEM120', 5700], ['s5', 'PHYS110', 600]],
3],
[])],
[('regression: window half open 1',
[[['s3', 'BIO130', 540], ['s5', 'PHYS110', 1320], ['s4', 'BIO130', 1980], ['s3', 'PHYS110', 1380],
['s5', 'BIO130', 600], ['s4', 'ECON150', 540]],
1],
[['s3', 2], ['s5', 2]]),
('regression variant: window half open 2',
[[['s1', 'BIO130', 600], ['s1', 'MATH101', 1500], ['s3', 'MATH101', 6361], ['s3', 'CHEM120', 2040],
['s1', 'CHEM120', 1320], ['s1', 'BIO130', 600], ['s3', 'PHYS110', 3481], ['s3', 'BIO130', 600]],
1],
[['s1', 3]]),
('partial repair guard 3',
[[['s5', 'MATH101', 600], ['s2', 'CHEM120', 1980], ['s1', 'MATH101H', 1980], ['s5', 'PHYS110', 600],
['s2', 'ECON150', 1980], ['s1', 'BIO130', 540], ['s1', 'MATH101', 2700], ['s2', 'PHYS110', 540]],
2],
[]),
('boundary control 4', [[['s1', 'A', 540], ['s1', 'B', 1980], ['s1', 'C', 2000]], 2], []),
('normal control 5',
[[['s5', 'PHYS110', 6181], ['s5', 'MATH101', 600], ['s2', 'MATH101H', 540], ['s2', 'ECON150', 4680],
['s4', 'MATH101', 5099], ['s5', 'ECON150', 2041], ['s2', 'MATH101', 3420], ['s4', 'ECON150', 3660],
['s4', 'MATH101H', 6540], ['s5', 'BIO130', 4921], ['s4', 'PHYS110', 3480], ['s5', 'CHEM120', 2041],
['s4', 'CHEM120', 600], ['s2', 'HIST140', 6420], ['s2', 'CHEM120', 6120]],
3],
[]),
('normal control 6',
[[['s3', 'BIO130', 2040], ['s5', 'HIST140', 3480], ['s5', 'MATH101', 5279], ['s5', 'MATH101H', 600],
['s3', 'ECON150', 600], ['s5', 'BIO130', 4919], ['s3', 'HIST140', 1320], ['s5', 'PHYS110', 5099]],
2],
[['s5', 3]]),
('normal control 7',
[[['s1', 'CHEM120', 540], ['s4', 'PHYS110', 2100], ['s3', 'MATH101', 600], ['s3', 'CHEM120', 1320],
['s1', 'ECON150', 1979], ['s1', 'MATH101', 4980], ['s1', 'MATH101H', 4680], ['s1', 'PHYS110', 3239],
['s4', 'CHEM120', 1260], ['s4', 'HIST140', 540]],
2],
[]),
('normal control 8',
[[['s3', 'HIST140', 2039], ['s3', 'BIO130', 600], ['s3', 'HIST140', 2039], ['s3', 'MATH101', 3299]], 2],
[])]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: window half open 1 | [['s1', 2], ['s3', 3], ['s4', 2]] | [['s1', 2], ['s3', 2]] | Failed |
| regression variant: window half open 2 | [['s4', 3]] | [] | Failed |
| partial repair guard 3 | [['s2', 2], ['s4', 2], ['s5', 4]] | [['s2', 2], ['s4', 2], ['s5', 3]] | Failed |
| boundary control 4 | [['s1', 2]] | [['s1', 2]] | Passed |
| normal control 5 | [['s5', 2]] | [['s5', 2]] | Passed |
| normal control 6 | [] | [] | Passed |
| normal control 7 | [['s4', 2], ['s5', 2]] | [['s4', 2], ['s5', 2]] | Passed |
| normal control 8 | [] | [] | Passed |
SHA-256 / dd402a38e28fec6df8da51c88521a9811950b736a5301dba688649ec521ecc64
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(sits, limit):
by = {}
for st, ex, t in sits:
by.setdefault(st, {})[ex] = t
out = []
for st in sorted(by):
ts = sorted(by[st].values())
best = 0
j = 0
for i in range(len(ts)):
while j < i and ts[i] - ts[j] > 1440:
j += 1
best = max(best, i - j + 1)
if best > limit:
out.append([st, best])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: window half open 1',
[[['s1', 'ECON150', 3419], ['s1', 'BIO130', 540], ['s3', 'ECON150', 3601], ['s3', 'MATH101H', 4861],
['s1', 'MATH101', 4259], ['s4', 'ECON150', 600], ['s1', 'HIST140', 7139], ['s3', 'CHEM120', 540],
['s3', 'HIST140', 3421], ['s3', 'PHYS110', 1981], ['s1', 'CHEM120', 1980], ['s4', 'BIO130', 2040],
['s1', 'HIST140', 7139]],
1],
[['s1', 2], ['s3', 2]]),
('regression variant: window half open 2',
[[['s4', 'BIO130', 4920], ['s4', 'CHEM120', 2040], ['s4', 'MATH101H', 600], ['s4', 'HIST140', 6359],
['s4', 'PHYS110', 2040]],
2],
[]),
('partial repair guard 3',
[[['s4', 'PHYS110', 1800], ['s2', 'HIST140', 1860], ['s5', 'MATH101', 3240], ['s2', 'ECON150', 600],
['s5', 'HIST140', 3240], ['s2', 'CHEM120', 2160], ['s5', 'MATH101H', 1800], ['s5', 'CHEM120', 1800],
['s4', 'BIO130', 540], ['s2', 'BIO130', 3420], ['s5', 'BIO130', 540], ['s4', 'CHEM120', 3060],
['s4', 'CHEM120', 3060]],
1],
[['s2', 2], ['s4', 2], ['s5', 3]]),
('boundary control 4', [[['s1', 'A', 600], ['s1', 'A', 600], ['s1', 'B', 900]], 1], [['s1', 2]]),
('normal control 5',
[[['s5', 'ECON150', 2700], ['s5', 'PHYS110', 7019], ['s5', 'MATH101H', 5580], ['s5', 'BIO130', 540],
['s5', 'CHEM120', 1980], ['s5', 'ECON150', 2700]],
1],
[['s5', 2]]),
('normal control 6',
[[['s3', 'PHYS110', 600], ['s3', 'MATH101H', 2280], ['s3', 'HIST140', 1440], ['s3', 'MATH101', 5160]], 2],
[]),
('normal control 7',
[[['s4', 'PHYS110', 4920], ['s5', 'PHYS110', 2759], ['s4', 'MATH101', 600], ['s4', 'BIO130', 2041],
['s4', 'ECON150', 3480], ['s5', 'ECON150', 600], ['s5', 'MATH101H', 1320]],
1],
[['s4', 2], ['s5', 2]]),
('normal control 8',
[[['s3', 'MATH101H', 2159], ['s3', 'ECON150', 2879], ['s3', 'CHEM120', 540], ['s3', 'CHEM120', 540],
['s3', 'PHYS110', 720]],
2],
[])],
[('regression: window half open 1',
[[['s5', 'MATH101', 3481], ['s5', 'PHYS110', 600], ['s5', 'MATH101', 3481], ['s1', 'ECON150', 540],
['s5', 'BIO130', 2040], ['s1', 'BIO130', 1380], ['s5', 'MATH101H', 1860], ['s5', 'CHEM120', 600]],
3],
[]),
('regression variant: window half open 2',
[[['s1', 'HIST140', 7140], ['s4', 'PHYS110', 1981], ['s4', 'ECON150', 3421], ['s1', 'CHEM120', 1380],
['s4', 'HIST140', 540], ['s4', 'CHEM120', 3241], ['s1', 'PHYS110', 4260], ['s1', 'ECON150', 540]],
2],
[]),
('partial repair guard 3',
[[['s1', 'MATH101H', 3421], ['s1', 'ECON150', 1260], ['s1', 'BIO130', 1980], ['s1', 'CHEM120', 540],
['s1', 'ECON150', 1260]],
2],
[]),
('boundary control 4', [[['s1', 'A', 540], ['s1', 'B', 1979], ['s1', 'C', 1990]], 2], []),
('normal control 5',
[[['s2', 'MATH101', 4259], ['s2', 'ECON150', 540], ['s5', 'BIO130', 2760], ['s2', 'CHEM120', 1979],
['s2', 'BIO130', 5700], ['s5', 'CHEM120', 600], ['s5', 'MATH101H', 1320], ['s2', 'MATH101H', 2819]],
2],
[]),
('normal control 6',
[[['s2', 'MATH101H', 1980], ['s2', 'ECON150', 3240], ['s2', 'PHYS110', 3960], ['s2', 'MATH101', 4140],
['s2', 'BIO130', 540]],
3],
[]),
('normal control 7',
[[['s5', 'ECON150', 1380], ['s5', 'BIO130', 540], ['s2', 'MATH101', 5159], ['s5', 'PHYS110', 1680],
['s3', 'HIST140', 2761], ['s2', 'MATH101H', 1979], ['s3', 'ECON150', 3061], ['s2', 'HIST140', 540],
['s2', 'ECON150', 4859], ['s5', 'HIST140', 3120], ['s3', 'CHEM120', 1320], ['s2', 'PHYS110', 6598],
['s2', 'HIST140', 540], ['s3', 'BIO130', 600]],
1],
[['s2', 2], ['s3', 2], ['s5', 3]]),
('normal control 8',
[[['s5', 'CHEM120', 1020], ['s5', 'HIST140', 540], ['s5', 'MATH101', 840], ['s5', 'MATH101', 840]], 3],
[])],
[('regression: window half open 1',
[[['s3', 'PHYS110', 1980], ['s3', 'CHEM120', 540], ['s2', 'BIO130', 540], ['s3', 'MATH101', 720],
['s2', 'BIO130', 540], ['s2', 'MATH101H', 1800], ['s3', 'ECON150', 1980], ['s2', 'MATH101', 3240]],
2],
[['s3', 3]]),
('regression variant: window half open 2',
[[['s1', 'ECON150', 600], ['s1', 'ECON150', 600], ['s1', 'MATH101H', 2040], ['s1', 'MATH101', 1860],
['s1', 'HIST140', 4920]],
1],
[['s1', 2]]),
('partial repair guard 3',
[[['s4', 'ECON150', 900], ['s4', 'HIST140', 2521], ['s3', 'BIO130', 2760], ['s4', 'MATH101', 600],
['s4', 'MATH101H', 2341], ['s3', 'MATH101', 600], ['s3', 'HIST140', 2040], ['s4', 'ECON150', 900],
['s3', 'ECON150', 2040], ['s3', 'CHEM120', 1320], ['s4', 'PHYS110', 3961]],
2],
[['s3', 3]]),
('boundary control 4', [[['s1', 'A', 600], ['s1', 'B', 600], ['s1', 'C', 900]], 2], [['s1', 3]]),
('normal control 5',
[[['s3', 'HIST140', 2039], ['s3', 'BIO130', 600], ['s3', 'HIST140', 2039], ['s3', 'MATH101', 3299]], 2],
[]),
('normal control 6',
[[['s4', 'ECON150', 2400], ['s3', 'ECON150', 540], ['s4', 'CHEM120', 2400], ['s3', 'BIO130', 2160],
['s1', 'MATH101H', 540], ['s3', 'HIST140', 1980], ['s1', 'BIO130', 4260], ['s1', 'PHYS110', 3420],
['s4', 'MATH101', 540], ['s4', 'HIST140', 1560], ['s1', 'MATH101', 5100], ['s4', 'BIO130', 1260]],
3],
[['s4', 4]]),
('normal control 7',
[[['s4', 'PHYS110', 840], ['s3', 'PHYS110', 1800], ['s4', 'ECON150', 540], ['s4', 'ECON150', 540],
['s3', 'ECON150', 4680], ['s3', 'BIO130', 5520], ['s3', 'CHEM120', 540]],
2],
[]),
('normal control 8',
[[['s5', 'CHEM120', 780], ['s4', 'BIO130', 540], ['s4', 'ECON150', 1380], ['s1', 'MATH101', 600],
['s1', 'BIO130', 1440], ['s5', 'BIO130', 2219], ['s5', 'MATH101H', 600]],
3],
[])],
[('regression: window half open 1',
[[['s4', 'ECON150', 2040], ['s4', 'CHEM120', 1320], ['s4', 'MATH101', 600]], 2], []),
('regression variant: window half open 2',
[[['s3', 'HIST140', 1860], ['s5', 'MATH101H', 3241], ['s1', 'CHEM120', 4921], ['s3', 'BIO130', 4741],
['s5', 'CHEM120', 540], ['s1', 'BIO130', 2041], ['s3', 'PHYS110', 3300], ['s5', 'MATH101', 1981],
['s3', 'CHEM120', 600], ['s5', 'BIO130', 3421], ['s5', 'PHYS110', 3421], ['s3', 'MATH101', 1860],
['s1', 'MATH101H', 600]],
2],
[['s3', 3], ['s5', 3]]),
('partial repair guard 3',
[[['s3', 'MATH101H', 2820], ['s2', 'MATH101H', 3420], ['s3', 'BIO130', 2820], ['s2', 'PHYS110', 4140],
['s3', 'PHYS110', 540], ['s3', 'BIO130', 2820], ['s2', 'ECON150', 540], ['s3', 'ECON150', 1380]],
2],
[]),
('boundary control 4', [[['s1', 'A', 1300], ['s1', 'B', 1500], ['s1', 'C', 1600]], 2], [['s1', 3]]),
('normal control 5', [[['s4', 'PHYS110', 600], ['s4', 'BIO130', 1320]], 1], [['s4', 2]]),
('normal control 6', [[['s1', 'ECON150', 600], ['s1', 'ECON150', 600], ['s1', 'MATH101H', 3480]], 2], []),
('normal control 7',
[[['s1', 'MATH101', 600], ['s4', 'ECON150', 540], ['s1', 'HIST140', 2760], ['s1', 'BIO130', 1320],
['s4', 'HIST140', 540], ['s1', 'CHEM120', 4200], ['s4', 'MATH101H', 1560], ['s4', 'PHYS110', 840],
['s4', 'CHEM120', 840], ['s3', 'HIST140', 540], ['s3', 'MATH101H', 3240], ['s3', 'PHYS110', 1980],
['s3', 'BIO130', 1800], ['s1', 'ECON150', 3480]],
3],
[['s4', 5]]),
('normal control 8',
[[['s2', 'MATH101', 540], ['s5', 'ECON150', 780], ['s5', 'HIST140', 2219], ['s2', 'MATH101H', 4860],
['s1', 'ECON150', 540], ['s1', 'BIO130', 1980], ['s5', 'CHEM120', 2939], ['s2', 'MATH101H', 4860],
['s1', 'CHEM120', 4860], ['s5', 'MATH101H', 4380], ['s1', 'MATH101H', 3420], ['s2', 'PHYS110', 3420],
['s2', 'CHEM120', 5700], ['s5', 'PHYS110', 600]],
3],
[])],
[('regression: window half open 1',
[[['s3', 'BIO130', 540], ['s5', 'PHYS110', 1320], ['s4', 'BIO130', 1980], ['s3', 'PHYS110', 1380],
['s5', 'BIO130', 600], ['s4', 'ECON150', 540]],
1],
[['s3', 2], ['s5', 2]]),
('regression variant: window half open 2',
[[['s1', 'BIO130', 600], ['s1', 'MATH101', 1500], ['s3', 'MATH101', 6361], ['s3', 'CHEM120', 2040],
['s1', 'CHEM120', 1320], ['s1', 'BIO130', 600], ['s3', 'PHYS110', 3481], ['s3', 'BIO130', 600]],
1],
[['s1', 3]]),
('partial repair guard 3',
[[['s5', 'MATH101', 600], ['s2', 'CHEM120', 1980], ['s1', 'MATH101H', 1980], ['s5', 'PHYS110', 600],
['s2', 'ECON150', 1980], ['s1', 'BIO130', 540], ['s1', 'MATH101', 2700], ['s2', 'PHYS110', 540]],
2],
[]),
('boundary control 4', [[['s1', 'A', 540], ['s1', 'B', 1980], ['s1', 'C', 2000]], 2], []),
('normal control 5',
[[['s5', 'PHYS110', 6181], ['s5', 'MATH101', 600], ['s2', 'MATH101H', 540], ['s2', 'ECON150', 4680],
['s4', 'MATH101', 5099], ['s5', 'ECON150', 2041], ['s2', 'MATH101', 3420], ['s4', 'ECON150', 3660],
['s4', 'MATH101H', 6540], ['s5', 'BIO130', 4921], ['s4', 'PHYS110', 3480], ['s5', 'CHEM120', 2041],
['s4', 'CHEM120', 600], ['s2', 'HIST140', 6420], ['s2', 'CHEM120', 6120]],
3],
[]),
('normal control 6',
[[['s3', 'BIO130', 2040], ['s5', 'HIST140', 3480], ['s5', 'MATH101', 5279], ['s5', 'MATH101H', 600],
['s3', 'ECON150', 600], ['s5', 'BIO130', 4919], ['s3', 'HIST140', 1320], ['s5', 'PHYS110', 5099]],
2],
[['s5', 3]]),
('normal control 7',
[[['s1', 'CHEM120', 540], ['s4', 'PHYS110', 2100], ['s3', 'MATH101', 600], ['s3', 'CHEM120', 1320],
['s1', 'ECON150', 1979], ['s1', 'MATH101', 4980], ['s1', 'MATH101H', 4680], ['s1', 'PHYS110', 3239],
['s4', 'CHEM120', 1260], ['s4', 'HIST140', 540]],
2],
[]),
('normal control 8',
[[['s3', 'HIST140', 2039], ['s3', 'BIO130', 600], ['s3', 'HIST140', 2039], ['s3', 'MATH101', 3299]], 2],
[])]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: window half open 1 | [['s1', 2], ['s3', 3], ['s4', 2]] | [['s1', 2], ['s3', 2]] | Failed |
| regression variant: window half open 2 | [['s4', 3]] | [] | Failed |
| partial repair guard 3 | [['s2', 2], ['s4', 2], ['s5', 4]] | [['s2', 2], ['s4', 2], ['s5', 3]] | Failed |
| boundary control 4 | [['s1', 2]] | [['s1', 2]] | Passed |
| normal control 5 | [['s5', 2]] | [['s5', 2]] | Passed |
| normal control 6 | [] | [] | Passed |
| normal control 7 | [['s4', 2], ['s5', 2]] | [['s4', 2], ['s5', 2]] | Passed |
| normal control 8 | [] | [] | Passed |
SHA-256 / b875cd88ec2206b483ccf8c294603b4e7e380d7f45e9db1eff882b06c30ed5b9
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(sits, limit):
by = {}
for st, ex, t in sits:
by.setdefault(st, {})[ex] = t
out = []
for st in sorted(by):
ts = sorted(by[st].values())
best = 0
j = 0
for i in range(len(ts)):
while ts[i] - ts[j] >= 1440:
j += 1
best = max(best, i - j + 1)
if best > limit:
out.append([st, best])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: window half open 1',
[[['s1', 'ECON150', 3419], ['s1', 'BIO130', 540], ['s3', 'ECON150', 3601], ['s3', 'MATH101H', 4861],
['s1', 'MATH101', 4259], ['s4', 'ECON150', 600], ['s1', 'HIST140', 7139], ['s3', 'CHEM120', 540],
['s3', 'HIST140', 3421], ['s3', 'PHYS110', 1981], ['s1', 'CHEM120', 1980], ['s4', 'BIO130', 2040],
['s1', 'HIST140', 7139]],
1],
[['s1', 2], ['s3', 2]]),
('regression variant: window half open 2',
[[['s4', 'BIO130', 4920], ['s4', 'CHEM120', 2040], ['s4', 'MATH101H', 600], ['s4', 'HIST140', 6359],
['s4', 'PHYS110', 2040]],
2],
[]),
('partial repair guard 3',
[[['s4', 'PHYS110', 1800], ['s2', 'HIST140', 1860], ['s5', 'MATH101', 3240], ['s2', 'ECON150', 600],
['s5', 'HIST140', 3240], ['s2', 'CHEM120', 2160], ['s5', 'MATH101H', 1800], ['s5', 'CHEM120', 1800],
['s4', 'BIO130', 540], ['s2', 'BIO130', 3420], ['s5', 'BIO130', 540], ['s4', 'CHEM120', 3060],
['s4', 'CHEM120', 3060]],
1],
[['s2', 2], ['s4', 2], ['s5', 3]]),
('boundary control 4', [[['s1', 'A', 600], ['s1', 'A', 600], ['s1', 'B', 900]], 1], [['s1', 2]]),
('normal control 5',
[[['s5', 'ECON150', 2700], ['s5', 'PHYS110', 7019], ['s5', 'MATH101H', 5580], ['s5', 'BIO130', 540],
['s5', 'CHEM120', 1980], ['s5', 'ECON150', 2700]],
1],
[['s5', 2]]),
('normal control 6',
[[['s3', 'PHYS110', 600], ['s3', 'MATH101H', 2280], ['s3', 'HIST140', 1440], ['s3', 'MATH101', 5160]], 2],
[]),
('normal control 7',
[[['s4', 'PHYS110', 4920], ['s5', 'PHYS110', 2759], ['s4', 'MATH101', 600], ['s4', 'BIO130', 2041],
['s4', 'ECON150', 3480], ['s5', 'ECON150', 600], ['s5', 'MATH101H', 1320]],
1],
[['s4', 2], ['s5', 2]]),
('normal control 8',
[[['s3', 'MATH101H', 2159], ['s3', 'ECON150', 2879], ['s3', 'CHEM120', 540], ['s3', 'CHEM120', 540],
['s3', 'PHYS110', 720]],
2],
[])],
[('regression: window half open 1',
[[['s5', 'MATH101', 3481], ['s5', 'PHYS110', 600], ['s5', 'MATH101', 3481], ['s1', 'ECON150', 540],
['s5', 'BIO130', 2040], ['s1', 'BIO130', 1380], ['s5', 'MATH101H', 1860], ['s5', 'CHEM120', 600]],
3],
[]),
('regression variant: window half open 2',
[[['s1', 'HIST140', 7140], ['s4', 'PHYS110', 1981], ['s4', 'ECON150', 3421], ['s1', 'CHEM120', 1380],
['s4', 'HIST140', 540], ['s4', 'CHEM120', 3241], ['s1', 'PHYS110', 4260], ['s1', 'ECON150', 540]],
2],
[]),
('partial repair guard 3',
[[['s1', 'MATH101H', 3421], ['s1', 'ECON150', 1260], ['s1', 'BIO130', 1980], ['s1', 'CHEM120', 540],
['s1', 'ECON150', 1260]],
2],
[]),
('boundary control 4', [[['s1', 'A', 540], ['s1', 'B', 1979], ['s1', 'C', 1990]], 2], []),
('normal control 5',
[[['s2', 'MATH101', 4259], ['s2', 'ECON150', 540], ['s5', 'BIO130', 2760], ['s2', 'CHEM120', 1979],
['s2', 'BIO130', 5700], ['s5', 'CHEM120', 600], ['s5', 'MATH101H', 1320], ['s2', 'MATH101H', 2819]],
2],
[]),
('normal control 6',
[[['s2', 'MATH101H', 1980], ['s2', 'ECON150', 3240], ['s2', 'PHYS110', 3960], ['s2', 'MATH101', 4140],
['s2', 'BIO130', 540]],
3],
[]),
('normal control 7',
[[['s5', 'ECON150', 1380], ['s5', 'BIO130', 540], ['s2', 'MATH101', 5159], ['s5', 'PHYS110', 1680],
['s3', 'HIST140', 2761], ['s2', 'MATH101H', 1979], ['s3', 'ECON150', 3061], ['s2', 'HIST140', 540],
['s2', 'ECON150', 4859], ['s5', 'HIST140', 3120], ['s3', 'CHEM120', 1320], ['s2', 'PHYS110', 6598],
['s2', 'HIST140', 540], ['s3', 'BIO130', 600]],
1],
[['s2', 2], ['s3', 2], ['s5', 3]]),
('normal control 8',
[[['s5', 'CHEM120', 1020], ['s5', 'HIST140', 540], ['s5', 'MATH101', 840], ['s5', 'MATH101', 840]], 3],
[])],
[('regression: window half open 1',
[[['s3', 'PHYS110', 1980], ['s3', 'CHEM120', 540], ['s2', 'BIO130', 540], ['s3', 'MATH101', 720],
['s2', 'BIO130', 540], ['s2', 'MATH101H', 1800], ['s3', 'ECON150', 1980], ['s2', 'MATH101', 3240]],
2],
[['s3', 3]]),
('regression variant: window half open 2',
[[['s1', 'ECON150', 600], ['s1', 'ECON150', 600], ['s1', 'MATH101H', 2040], ['s1', 'MATH101', 1860],
['s1', 'HIST140', 4920]],
1],
[['s1', 2]]),
('partial repair guard 3',
[[['s4', 'ECON150', 900], ['s4', 'HIST140', 2521], ['s3', 'BIO130', 2760], ['s4', 'MATH101', 600],
['s4', 'MATH101H', 2341], ['s3', 'MATH101', 600], ['s3', 'HIST140', 2040], ['s4', 'ECON150', 900],
['s3', 'ECON150', 2040], ['s3', 'CHEM120', 1320], ['s4', 'PHYS110', 3961]],
2],
[['s3', 3]]),
('boundary control 4', [[['s1', 'A', 600], ['s1', 'B', 600], ['s1', 'C', 900]], 2], [['s1', 3]]),
('normal control 5',
[[['s3', 'HIST140', 2039], ['s3', 'BIO130', 600], ['s3', 'HIST140', 2039], ['s3', 'MATH101', 3299]], 2],
[]),
('normal control 6',
[[['s4', 'ECON150', 2400], ['s3', 'ECON150', 540], ['s4', 'CHEM120', 2400], ['s3', 'BIO130', 2160],
['s1', 'MATH101H', 540], ['s3', 'HIST140', 1980], ['s1', 'BIO130', 4260], ['s1', 'PHYS110', 3420],
['s4', 'MATH101', 540], ['s4', 'HIST140', 1560], ['s1', 'MATH101', 5100], ['s4', 'BIO130', 1260]],
3],
[['s4', 4]]),
('normal control 7',
[[['s4', 'PHYS110', 840], ['s3', 'PHYS110', 1800], ['s4', 'ECON150', 540], ['s4', 'ECON150', 540],
['s3', 'ECON150', 4680], ['s3', 'BIO130', 5520], ['s3', 'CHEM120', 540]],
2],
[]),
('normal control 8',
[[['s5', 'CHEM120', 780], ['s4', 'BIO130', 540], ['s4', 'ECON150', 1380], ['s1', 'MATH101', 600],
['s1', 'BIO130', 1440], ['s5', 'BIO130', 2219], ['s5', 'MATH101H', 600]],
3],
[])],
[('regression: window half open 1',
[[['s4', 'ECON150', 2040], ['s4', 'CHEM120', 1320], ['s4', 'MATH101', 600]], 2], []),
('regression variant: window half open 2',
[[['s3', 'HIST140', 1860], ['s5', 'MATH101H', 3241], ['s1', 'CHEM120', 4921], ['s3', 'BIO130', 4741],
['s5', 'CHEM120', 540], ['s1', 'BIO130', 2041], ['s3', 'PHYS110', 3300], ['s5', 'MATH101', 1981],
['s3', 'CHEM120', 600], ['s5', 'BIO130', 3421], ['s5', 'PHYS110', 3421], ['s3', 'MATH101', 1860],
['s1', 'MATH101H', 600]],
2],
[['s3', 3], ['s5', 3]]),
('partial repair guard 3',
[[['s3', 'MATH101H', 2820], ['s2', 'MATH101H', 3420], ['s3', 'BIO130', 2820], ['s2', 'PHYS110', 4140],
['s3', 'PHYS110', 540], ['s3', 'BIO130', 2820], ['s2', 'ECON150', 540], ['s3', 'ECON150', 1380]],
2],
[]),
('boundary control 4', [[['s1', 'A', 1300], ['s1', 'B', 1500], ['s1', 'C', 1600]], 2], [['s1', 3]]),
('normal control 5', [[['s4', 'PHYS110', 600], ['s4', 'BIO130', 1320]], 1], [['s4', 2]]),
('normal control 6', [[['s1', 'ECON150', 600], ['s1', 'ECON150', 600], ['s1', 'MATH101H', 3480]], 2], []),
('normal control 7',
[[['s1', 'MATH101', 600], ['s4', 'ECON150', 540], ['s1', 'HIST140', 2760], ['s1', 'BIO130', 1320],
['s4', 'HIST140', 540], ['s1', 'CHEM120', 4200], ['s4', 'MATH101H', 1560], ['s4', 'PHYS110', 840],
['s4', 'CHEM120', 840], ['s3', 'HIST140', 540], ['s3', 'MATH101H', 3240], ['s3', 'PHYS110', 1980],
['s3', 'BIO130', 1800], ['s1', 'ECON150', 3480]],
3],
[['s4', 5]]),
('normal control 8',
[[['s2', 'MATH101', 540], ['s5', 'ECON150', 780], ['s5', 'HIST140', 2219], ['s2', 'MATH101H', 4860],
['s1', 'ECON150', 540], ['s1', 'BIO130', 1980], ['s5', 'CHEM120', 2939], ['s2', 'MATH101H', 4860],
['s1', 'CHEM120', 4860], ['s5', 'MATH101H', 4380], ['s1', 'MATH101H', 3420], ['s2', 'PHYS110', 3420],
['s2', 'CHEM120', 5700], ['s5', 'PHYS110', 600]],
3],
[])],
[('regression: window half open 1',
[[['s3', 'BIO130', 540], ['s5', 'PHYS110', 1320], ['s4', 'BIO130', 1980], ['s3', 'PHYS110', 1380],
['s5', 'BIO130', 600], ['s4', 'ECON150', 540]],
1],
[['s3', 2], ['s5', 2]]),
('regression variant: window half open 2',
[[['s1', 'BIO130', 600], ['s1', 'MATH101', 1500], ['s3', 'MATH101', 6361], ['s3', 'CHEM120', 2040],
['s1', 'CHEM120', 1320], ['s1', 'BIO130', 600], ['s3', 'PHYS110', 3481], ['s3', 'BIO130', 600]],
1],
[['s1', 3]]),
('partial repair guard 3',
[[['s5', 'MATH101', 600], ['s2', 'CHEM120', 1980], ['s1', 'MATH101H', 1980], ['s5', 'PHYS110', 600],
['s2', 'ECON150', 1980], ['s1', 'BIO130', 540], ['s1', 'MATH101', 2700], ['s2', 'PHYS110', 540]],
2],
[]),
('boundary control 4', [[['s1', 'A', 540], ['s1', 'B', 1980], ['s1', 'C', 2000]], 2], []),
('normal control 5',
[[['s5', 'PHYS110', 6181], ['s5', 'MATH101', 600], ['s2', 'MATH101H', 540], ['s2', 'ECON150', 4680],
['s4', 'MATH101', 5099], ['s5', 'ECON150', 2041], ['s2', 'MATH101', 3420], ['s4', 'ECON150', 3660],
['s4', 'MATH101H', 6540], ['s5', 'BIO130', 4921], ['s4', 'PHYS110', 3480], ['s5', 'CHEM120', 2041],
['s4', 'CHEM120', 600], ['s2', 'HIST140', 6420], ['s2', 'CHEM120', 6120]],
3],
[]),
('normal control 6',
[[['s3', 'BIO130', 2040], ['s5', 'HIST140', 3480], ['s5', 'MATH101', 5279], ['s5', 'MATH101H', 600],
['s3', 'ECON150', 600], ['s5', 'BIO130', 4919], ['s3', 'HIST140', 1320], ['s5', 'PHYS110', 5099]],
2],
[['s5', 3]]),
('normal control 7',
[[['s1', 'CHEM120', 540], ['s4', 'PHYS110', 2100], ['s3', 'MATH101', 600], ['s3', 'CHEM120', 1320],
['s1', 'ECON150', 1979], ['s1', 'MATH101', 4980], ['s1', 'MATH101H', 4680], ['s1', 'PHYS110', 3239],
['s4', 'CHEM120', 1260], ['s4', 'HIST140', 540]],
2],
[]),
('normal control 8',
[[['s3', 'HIST140', 2039], ['s3', 'BIO130', 600], ['s3', 'HIST140', 2039], ['s3', 'MATH101', 3299]], 2],
[])]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: window half open 1 | [['s1', 2], ['s3', 2]] | [['s1', 2], ['s3', 2]] | Passed |
| regression variant: window half open 2 | [] | [] | Passed |
| partial repair guard 3 | [['s2', 2], ['s4', 2], ['s5', 3]] | [['s2', 2], ['s4', 2], ['s5', 3]] | Passed |
| boundary control 4 | [['s1', 2]] | [['s1', 2]] | Passed |
| normal control 5 | [['s5', 2]] | [['s5', 2]] | Passed |
| normal control 6 | [] | [] | Passed |
| normal control 7 | [['s4', 2], ['s5', 2]] | [['s4', 2], ['s5', 2]] | Passed |
| normal control 8 | [] | [] | Passed |
SHA-256 / 53b4145ad9cf961dfa35a4fc91f03d945987fe7eb1ff9ed125373ec2b0374dfa
Verification & scope
Stipulated toy exam-timetabling rule set for a bounded model; it does not claim conformance with any institution's regulations or a benchmark specification, and it performs no search or optimisation. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:52:04.989420+00:00.
Case digest / ee61157fb9e19f6dfcf248bffde54490fdc8deb62368436fae196b6fd8ce6afc