FA-94566 / Exam timetabling constraints / Open access
Same-duration exams sharing a room penalised · case 01
Two 60-minute exams in one room count as mixed durations.
ROOT CAUSE
Durations are collected per exam rather than as distinct values.
VERIFIED REPAIR
Count distinct durations per room-period.
Unsuccessful approach: Testing distinctness but charging per exam still overcharges.
Case contract
Assignments [exam, room, period] and exam durations. For each room and period, the penalty is the number of distinct durations minus one. Return [total penalty, [room, period, distinct durations] for penalised room-periods in order].
Why this case matters
Mixed durations in one room disrupt invigilation; the penalty is defined over distinct durations.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(assign, dur):
groups = {}
for e, r, p in assign:
groups.setdefault((r, p), []).append(dur[e])
bad = []
total = 0
for (r, p), ds in sorted(groups.items()):
if len(ds) > 1:
bad.append([r, p, len(ds)])
total += len(ds) - 1
return [total, bad]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: distinct durations 1', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),
('regression variant: distinct durations 2',
[[['MATH101', 'R1', 1], ['PHYS110', 'R1', 0], ['MATH101', 'R1', 2], ['PHYS110', 'R1', 0],
['BIO130', 'R2', 1], ['BIO130', 'R1', 0], ['MATH101H', 'R2', 1]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 90,
'BIO130': 60,
'HIST140': 90,
'ECON150': 120}],
[2, [['R1', 0, 2], ['R2', 1, 2]]]),
('partial repair guard 3',
[[['HIST140', 'R2', 1], ['BIO130', 'R2', 1], ['MATH101', 'R1', 2], ['MATH101', 'R2', 1],
['MATH101', 'R1', 2], ['CHEM120', 'R1', 1]],
{'MATH101': 120,
'MATH101H': 90,
'PHYS110': 60,
'CHEM120': 120,
'BIO130': 90,
'HIST140': 120,
'ECON150': 90}],
[1, [['R2', 1, 2]]]),
('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),
('normal control 5',
[[['CHEM120', 'R1', 2], ['ECON150', 'R1', 0]],
{'MATH101': 60,
'MATH101H': 90,
'PHYS110': 90,
'CHEM120': 60,
'BIO130': 90,
'HIST140': 120,
'ECON150': 90}],
[0, []]),
('normal control 6',
[[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1], ['MATH101', 'R2', 0],
['CHEM120', 'R2', 2], ['HIST140', 'R1', 0]],
{'MATH101': 60,
'MATH101H': 60,
'PHYS110': 60,
'CHEM120': 90,
'BIO130': 90,
'HIST140': 120,
'ECON150': 60}],
[1, [['R2', 2, 2]]]),
('normal control 7',
[[['MATH101H', 'R1', 1], ['PHYS110', 'R2', 0]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 90,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[0, []]),
('normal control 8',
[[['BIO130', 'R2', 1], ['MATH101', 'R2', 1], ['HIST140', 'R2', 1], ['PHYS110', 'R1', 1],
['HIST140', 'R1', 1]],
{'MATH101': 90,
'MATH101H': 60,
'PHYS110': 60,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 90,
'ECON150': 90}],
[2, [['R1', 1, 2], ['R2', 1, 2]]])],
[('regression: distinct durations 1',
[[['MATH101', 'R2', 1], ['MATH101', 'R2', 1], ['ECON150', 'R1', 1], ['MATH101H', 'R1', 2]],
{'MATH101': 60,
'MATH101H': 60,
'PHYS110': 120,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 90,
'ECON150': 60}],
[0, []]),
('regression variant: distinct durations 2',
[[['CHEM120', 'R2', 0], ['ECON150', 'R2', 1], ['PHYS110', 'R2', 1], ['ECON150', 'R1', 2],
['CHEM120', 'R1', 1], ['CHEM120', 'R1', 1], ['MATH101H', 'R2', 1]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 120,
'CHEM120': 60,
'BIO130': 60,
'HIST140': 90,
'ECON150': 90}],
[1, [['R2', 1, 2]]]),
('partial repair guard 3',
[[['ECON150', 'R1', 0], ['ECON150', 'R1', 1], ['BIO130', 'R1', 0], ['CHEM120', 'R2', 2],
['BIO130', 'R1', 0]],
{'MATH101': 120,
'MATH101H': 60,
'PHYS110': 120,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[1, [['R1', 0, 2]]]),
('boundary control 4', [[['A', 'R1', 0], ['B', 'R2', 0]], {'A': 60, 'B': 90}], [0, []]),
('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),
('normal control 6',
[[['MATH101H', 'R1', 1], ['ECON150', 'R1', 2], ['BIO130', 'R1', 0], ['MATH101H', 'R1', 2],
['BIO130', 'R2', 1]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 90,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 90,
'ECON150': 120}],
[1, [['R1', 2, 2]]]),
('normal control 7',
[[['CHEM120', 'R2', 2], ['MATH101H', 'R1', 2], ['HIST140', 'R2', 1], ['MATH101H', 'R2', 2]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 120,
'CHEM120': 90,
'BIO130': 90,
'HIST140': 120,
'ECON150': 120}],
[1, [['R2', 2, 2]]]),
('normal control 8',
[[['PHYS110', 'R1', 1], ['BIO130', 'R1', 1]],
{'MATH101': 120,
'MATH101H': 90,
'PHYS110': 90,
'CHEM120': 120,
'BIO130': 60,
'HIST140': 120,
'ECON150': 60}],
[1, [['R1', 1, 2]]])],
[('regression: distinct durations 1',
[[['BIO130', 'R2', 2], ['PHYS110', 'R2', 2], ['MATH101', 'R1', 1], ['BIO130', 'R2', 2]],
{'MATH101': 120,
'MATH101H': 60,
'PHYS110': 120,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 90,
'ECON150': 90}],
[0, []]),
('regression variant: distinct durations 2',
[[['MATH101H', 'R2', 0], ['HIST140', 'R2', 2], ['PHYS110', 'R1', 2], ['MATH101H', 'R2', 0],
['ECON150', 'R2', 2], ['ECON150', 'R1', 0], ['PHYS110', 'R1', 2]],
{'MATH101': 90,
'MATH101H': 60,
'PHYS110': 90,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[1, [['R2', 2, 2]]]),
('partial repair guard 3',
[[['BIO130', 'R2', 1], ['MATH101', 'R2', 1], ['HIST140', 'R2', 1], ['PHYS110', 'R1', 1],
['HIST140', 'R1', 1]],
{'MATH101': 90,
'MATH101H': 60,
'PHYS110': 60,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 90,
'ECON150': 90}],
[2, [['R1', 1, 2], ['R2', 1, 2]]]),
('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 0], ['C', 'R1', 0]], {'A': 60, 'B': 90, 'C': 120}],
[2, [['R1', 0, 3]]]),
('boundary control 5', [[['A', 'R1', 0], ['B', 'R2', 0]], {'A': 60, 'B': 90}], [0, []]),
('normal control 6',
[[['MATH101H', 'R1', 1], ['HIST140', 'R1', 0], ['ECON150', 'R2', 0], ['ECON150', 'R1', 2],
['PHYS110', 'R2', 2], ['MATH101H', 'R2', 1]],
{'MATH101': 90,
'MATH101H': 120,
'PHYS110': 60,
'CHEM120': 120,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[0, []]),
('normal control 7',
[[['CHEM120', 'R2', 1], ['HIST140', 'R2', 2], ['ECON150', 'R2', 1], ['ECON150', 'R1', 2]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 60,
'CHEM120': 120,
'BIO130': 90,
'HIST140': 90,
'ECON150': 120}],
[0, []]),
('normal control 8',
[[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1], ['MATH101', 'R2', 0],
['CHEM120', 'R2', 2], ['HIST140', 'R1', 0]],
{'MATH101': 60,
'MATH101H': 60,
'PHYS110': 60,
'CHEM120': 90,
'BIO130': 90,
'HIST140': 120,
'ECON150': 60}],
[1, [['R2', 2, 2]]])],
[('regression: distinct durations 1',
[[['CHEM120', 'R2', 0], ['PHYS110', 'R1', 0], ['MATH101', 'R2', 2], ['BIO130', 'R1', 0],
['CHEM120', 'R2', 2], ['ECON150', 'R2', 2], ['BIO130', 'R2', 2]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 120,
'CHEM120': 90,
'BIO130': 90,
'HIST140': 120,
'ECON150': 120}],
[3, [['R1', 0, 2], ['R2', 2, 3]]]),
('regression variant: distinct durations 2',
[[['HIST140', 'R1', 2], ['PHYS110', 'R2', 0], ['PHYS110', 'R2', 0], ['CHEM120', 'R2', 0],
['MATH101', 'R2', 0], ['BIO130', 'R2', 1], ['MATH101H', 'R2', 0]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 60,
'ECON150': 120}],
[2, [['R2', 0, 3]]]),
('partial repair guard 3',
[[['ECON150', 'R1', 0], ['MATH101H', 'R1', 2], ['CHEM120', 'R2', 2], ['ECON150', 'R1', 2],
['CHEM120', 'R1', 2], ['CHEM120', 'R1', 0], ['ECON150', 'R1', 0], ['ECON150', 'R2', 0]],
{'MATH101': 60,
'MATH101H': 60,
'PHYS110': 120,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 90,
'ECON150': 90}],
[1, [['R1', 2, 2]]]),
('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),
('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 0], ['C', 'R1', 0]], {'A': 60, 'B': 90, 'C': 120}],
[2, [['R1', 0, 3]]]),
('normal control 6',
[[['MATH101', 'R1', 2], ['ECON150', 'R1', 1], ['BIO130', 'R2', 1], ['HIST140', 'R2', 0],
['PHYS110', 'R1', 0], ['ECON150', 'R2', 2], ['MATH101H', 'R1', 1]],
{'MATH101': 120,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 60,
'BIO130': 60,
'HIST140': 90,
'ECON150': 90}],
[1, [['R1', 1, 2]]]),
('normal control 7',
[[['MATH101H', 'R2', 1], ['HIST140', 'R2', 2], ['PHYS110', 'R2', 1], ['ECON150', 'R2', 0],
['HIST140', 'R2', 2], ['HIST140', 'R1', 2], ['CHEM120', 'R1', 1]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 120,
'CHEM120': 120,
'BIO130': 90,
'HIST140': 90,
'ECON150': 60}],
[0, []]),
('normal control 8',
[[['HIST140', 'R1', 1], ['MATH101H', 'R2', 2], ['ECON150', 'R1', 2], ['PHYS110', 'R1', 1],
['HIST140', 'R1', 1], ['CHEM120', 'R2', 1], ['CHEM120', 'R2', 2]],
{'MATH101': 90,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 120,
'BIO130': 60,
'HIST140': 120,
'ECON150': 90}],
[1, [['R1', 1, 2]]])],
[('regression: distinct durations 1',
[[['MATH101H', 'R2', 2], ['MATH101', 'R2', 2], ['MATH101H', 'R1', 1], ['MATH101', 'R1', 1],
['HIST140', 'R2', 0]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 60,
'CHEM120': 90,
'BIO130': 60,
'HIST140': 120,
'ECON150': 90}],
[0, []]),
('regression variant: distinct durations 2',
[[['MATH101H', 'R1', 0], ['CHEM120', 'R1', 0], ['ECON150', 'R2', 1], ['PHYS110', 'R1', 0]],
{'MATH101': 90,
'MATH101H': 60,
'PHYS110': 120,
'CHEM120': 60,
'BIO130': 60,
'HIST140': 60,
'ECON150': 90}],
[1, [['R1', 0, 2]]]),
('partial repair guard 3',
[[['CHEM120', 'R1', 1], ['BIO130', 'R2', 2], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1],
['PHYS110', 'R2', 2], ['MATH101', 'R2', 2], ['HIST140', 'R2', 1]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 60,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 60,
'ECON150': 90}],
[3, [['R2', 1, 2], ['R2', 2, 3]]]),
('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),
('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),
('normal control 6',
[[['CHEM120', 'R1', 0], ['HIST140', 'R1', 1], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 2]],
{'MATH101': 120,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[1, [['R1', 1, 2]]]),
('normal control 7',
[[['PHYS110', 'R1', 1], ['MATH101H', 'R2', 1], ['HIST140', 'R1', 2]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 120,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[0, []]),
('normal control 8',
[[['BIO130', 'R2', 0], ['BIO130', 'R1', 0], ['ECON150', 'R2', 1], ['MATH101H', 'R1', 2],
['PHYS110', 'R1', 0], ['CHEM120', 'R1', 0], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1]],
{'MATH101': 120,
'MATH101H': 120,
'PHYS110': 120,
'CHEM120': 60,
'BIO130': 90,
'HIST140': 120,
'ECON150': 120}],
[2, [['R1', 0, 3]]])]]
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: distinct durations 1 | [1, [['R1', 0, 2]]] | [0, []] | Failed |
| regression variant: distinct durations 2 | [3, [['R1', 0, 3], ['R2', 1, 2]]] | [2, [['R1', 0, 2], ['R2', 1, 2]]] | Failed |
| partial repair guard 3 | [3, [['R1', 2, 2], ['R2', 1, 3]]] | [1, [['R2', 1, 2]]] | Failed |
| boundary control 4 | [0, []] | [0, []] | Passed |
| normal control 5 | [0, []] | [0, []] | Passed |
| normal control 6 | [1, [['R2', 2, 2]]] | [1, [['R2', 2, 2]]] | Passed |
| normal control 7 | [0, []] | [0, []] | Passed |
| normal control 8 | [3, [['R1', 1, 2], ['R2', 1, 3]]] | [2, [['R1', 1, 2], ['R2', 1, 2]]] | Failed |
SHA-256 / ce9605d7aa3fcb71ed027602f8a32b132153f5ace470a720f772942089e7b792
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(assign, dur):
groups = {}
for e, r, p in assign:
groups.setdefault((r, p), []).append(dur[e])
bad = []
total = 0
for (r, p), ds in sorted(groups.items()):
if len(set(ds)) > 1:
bad.append([r, p, len(ds)])
total += len(ds) - 1
return [total, bad]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: distinct durations 1', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),
('regression variant: distinct durations 2',
[[['MATH101', 'R1', 1], ['PHYS110', 'R1', 0], ['MATH101', 'R1', 2], ['PHYS110', 'R1', 0],
['BIO130', 'R2', 1], ['BIO130', 'R1', 0], ['MATH101H', 'R2', 1]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 90,
'BIO130': 60,
'HIST140': 90,
'ECON150': 120}],
[2, [['R1', 0, 2], ['R2', 1, 2]]]),
('partial repair guard 3',
[[['HIST140', 'R2', 1], ['BIO130', 'R2', 1], ['MATH101', 'R1', 2], ['MATH101', 'R2', 1],
['MATH101', 'R1', 2], ['CHEM120', 'R1', 1]],
{'MATH101': 120,
'MATH101H': 90,
'PHYS110': 60,
'CHEM120': 120,
'BIO130': 90,
'HIST140': 120,
'ECON150': 90}],
[1, [['R2', 1, 2]]]),
('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),
('normal control 5',
[[['CHEM120', 'R1', 2], ['ECON150', 'R1', 0]],
{'MATH101': 60,
'MATH101H': 90,
'PHYS110': 90,
'CHEM120': 60,
'BIO130': 90,
'HIST140': 120,
'ECON150': 90}],
[0, []]),
('normal control 6',
[[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1], ['MATH101', 'R2', 0],
['CHEM120', 'R2', 2], ['HIST140', 'R1', 0]],
{'MATH101': 60,
'MATH101H': 60,
'PHYS110': 60,
'CHEM120': 90,
'BIO130': 90,
'HIST140': 120,
'ECON150': 60}],
[1, [['R2', 2, 2]]]),
('normal control 7',
[[['MATH101H', 'R1', 1], ['PHYS110', 'R2', 0]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 90,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[0, []]),
('normal control 8',
[[['BIO130', 'R2', 1], ['MATH101', 'R2', 1], ['HIST140', 'R2', 1], ['PHYS110', 'R1', 1],
['HIST140', 'R1', 1]],
{'MATH101': 90,
'MATH101H': 60,
'PHYS110': 60,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 90,
'ECON150': 90}],
[2, [['R1', 1, 2], ['R2', 1, 2]]])],
[('regression: distinct durations 1',
[[['MATH101', 'R2', 1], ['MATH101', 'R2', 1], ['ECON150', 'R1', 1], ['MATH101H', 'R1', 2]],
{'MATH101': 60,
'MATH101H': 60,
'PHYS110': 120,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 90,
'ECON150': 60}],
[0, []]),
('regression variant: distinct durations 2',
[[['CHEM120', 'R2', 0], ['ECON150', 'R2', 1], ['PHYS110', 'R2', 1], ['ECON150', 'R1', 2],
['CHEM120', 'R1', 1], ['CHEM120', 'R1', 1], ['MATH101H', 'R2', 1]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 120,
'CHEM120': 60,
'BIO130': 60,
'HIST140': 90,
'ECON150': 90}],
[1, [['R2', 1, 2]]]),
('partial repair guard 3',
[[['ECON150', 'R1', 0], ['ECON150', 'R1', 1], ['BIO130', 'R1', 0], ['CHEM120', 'R2', 2],
['BIO130', 'R1', 0]],
{'MATH101': 120,
'MATH101H': 60,
'PHYS110': 120,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[1, [['R1', 0, 2]]]),
('boundary control 4', [[['A', 'R1', 0], ['B', 'R2', 0]], {'A': 60, 'B': 90}], [0, []]),
('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),
('normal control 6',
[[['MATH101H', 'R1', 1], ['ECON150', 'R1', 2], ['BIO130', 'R1', 0], ['MATH101H', 'R1', 2],
['BIO130', 'R2', 1]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 90,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 90,
'ECON150': 120}],
[1, [['R1', 2, 2]]]),
('normal control 7',
[[['CHEM120', 'R2', 2], ['MATH101H', 'R1', 2], ['HIST140', 'R2', 1], ['MATH101H', 'R2', 2]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 120,
'CHEM120': 90,
'BIO130': 90,
'HIST140': 120,
'ECON150': 120}],
[1, [['R2', 2, 2]]]),
('normal control 8',
[[['PHYS110', 'R1', 1], ['BIO130', 'R1', 1]],
{'MATH101': 120,
'MATH101H': 90,
'PHYS110': 90,
'CHEM120': 120,
'BIO130': 60,
'HIST140': 120,
'ECON150': 60}],
[1, [['R1', 1, 2]]])],
[('regression: distinct durations 1',
[[['BIO130', 'R2', 2], ['PHYS110', 'R2', 2], ['MATH101', 'R1', 1], ['BIO130', 'R2', 2]],
{'MATH101': 120,
'MATH101H': 60,
'PHYS110': 120,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 90,
'ECON150': 90}],
[0, []]),
('regression variant: distinct durations 2',
[[['MATH101H', 'R2', 0], ['HIST140', 'R2', 2], ['PHYS110', 'R1', 2], ['MATH101H', 'R2', 0],
['ECON150', 'R2', 2], ['ECON150', 'R1', 0], ['PHYS110', 'R1', 2]],
{'MATH101': 90,
'MATH101H': 60,
'PHYS110': 90,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[1, [['R2', 2, 2]]]),
('partial repair guard 3',
[[['BIO130', 'R2', 1], ['MATH101', 'R2', 1], ['HIST140', 'R2', 1], ['PHYS110', 'R1', 1],
['HIST140', 'R1', 1]],
{'MATH101': 90,
'MATH101H': 60,
'PHYS110': 60,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 90,
'ECON150': 90}],
[2, [['R1', 1, 2], ['R2', 1, 2]]]),
('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 0], ['C', 'R1', 0]], {'A': 60, 'B': 90, 'C': 120}],
[2, [['R1', 0, 3]]]),
('boundary control 5', [[['A', 'R1', 0], ['B', 'R2', 0]], {'A': 60, 'B': 90}], [0, []]),
('normal control 6',
[[['MATH101H', 'R1', 1], ['HIST140', 'R1', 0], ['ECON150', 'R2', 0], ['ECON150', 'R1', 2],
['PHYS110', 'R2', 2], ['MATH101H', 'R2', 1]],
{'MATH101': 90,
'MATH101H': 120,
'PHYS110': 60,
'CHEM120': 120,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[0, []]),
('normal control 7',
[[['CHEM120', 'R2', 1], ['HIST140', 'R2', 2], ['ECON150', 'R2', 1], ['ECON150', 'R1', 2]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 60,
'CHEM120': 120,
'BIO130': 90,
'HIST140': 90,
'ECON150': 120}],
[0, []]),
('normal control 8',
[[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1], ['MATH101', 'R2', 0],
['CHEM120', 'R2', 2], ['HIST140', 'R1', 0]],
{'MATH101': 60,
'MATH101H': 60,
'PHYS110': 60,
'CHEM120': 90,
'BIO130': 90,
'HIST140': 120,
'ECON150': 60}],
[1, [['R2', 2, 2]]])],
[('regression: distinct durations 1',
[[['CHEM120', 'R2', 0], ['PHYS110', 'R1', 0], ['MATH101', 'R2', 2], ['BIO130', 'R1', 0],
['CHEM120', 'R2', 2], ['ECON150', 'R2', 2], ['BIO130', 'R2', 2]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 120,
'CHEM120': 90,
'BIO130': 90,
'HIST140': 120,
'ECON150': 120}],
[3, [['R1', 0, 2], ['R2', 2, 3]]]),
('regression variant: distinct durations 2',
[[['HIST140', 'R1', 2], ['PHYS110', 'R2', 0], ['PHYS110', 'R2', 0], ['CHEM120', 'R2', 0],
['MATH101', 'R2', 0], ['BIO130', 'R2', 1], ['MATH101H', 'R2', 0]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 60,
'ECON150': 120}],
[2, [['R2', 0, 3]]]),
('partial repair guard 3',
[[['ECON150', 'R1', 0], ['MATH101H', 'R1', 2], ['CHEM120', 'R2', 2], ['ECON150', 'R1', 2],
['CHEM120', 'R1', 2], ['CHEM120', 'R1', 0], ['ECON150', 'R1', 0], ['ECON150', 'R2', 0]],
{'MATH101': 60,
'MATH101H': 60,
'PHYS110': 120,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 90,
'ECON150': 90}],
[1, [['R1', 2, 2]]]),
('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),
('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 0], ['C', 'R1', 0]], {'A': 60, 'B': 90, 'C': 120}],
[2, [['R1', 0, 3]]]),
('normal control 6',
[[['MATH101', 'R1', 2], ['ECON150', 'R1', 1], ['BIO130', 'R2', 1], ['HIST140', 'R2', 0],
['PHYS110', 'R1', 0], ['ECON150', 'R2', 2], ['MATH101H', 'R1', 1]],
{'MATH101': 120,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 60,
'BIO130': 60,
'HIST140': 90,
'ECON150': 90}],
[1, [['R1', 1, 2]]]),
('normal control 7',
[[['MATH101H', 'R2', 1], ['HIST140', 'R2', 2], ['PHYS110', 'R2', 1], ['ECON150', 'R2', 0],
['HIST140', 'R2', 2], ['HIST140', 'R1', 2], ['CHEM120', 'R1', 1]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 120,
'CHEM120': 120,
'BIO130': 90,
'HIST140': 90,
'ECON150': 60}],
[0, []]),
('normal control 8',
[[['HIST140', 'R1', 1], ['MATH101H', 'R2', 2], ['ECON150', 'R1', 2], ['PHYS110', 'R1', 1],
['HIST140', 'R1', 1], ['CHEM120', 'R2', 1], ['CHEM120', 'R2', 2]],
{'MATH101': 90,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 120,
'BIO130': 60,
'HIST140': 120,
'ECON150': 90}],
[1, [['R1', 1, 2]]])],
[('regression: distinct durations 1',
[[['MATH101H', 'R2', 2], ['MATH101', 'R2', 2], ['MATH101H', 'R1', 1], ['MATH101', 'R1', 1],
['HIST140', 'R2', 0]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 60,
'CHEM120': 90,
'BIO130': 60,
'HIST140': 120,
'ECON150': 90}],
[0, []]),
('regression variant: distinct durations 2',
[[['MATH101H', 'R1', 0], ['CHEM120', 'R1', 0], ['ECON150', 'R2', 1], ['PHYS110', 'R1', 0]],
{'MATH101': 90,
'MATH101H': 60,
'PHYS110': 120,
'CHEM120': 60,
'BIO130': 60,
'HIST140': 60,
'ECON150': 90}],
[1, [['R1', 0, 2]]]),
('partial repair guard 3',
[[['CHEM120', 'R1', 1], ['BIO130', 'R2', 2], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1],
['PHYS110', 'R2', 2], ['MATH101', 'R2', 2], ['HIST140', 'R2', 1]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 60,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 60,
'ECON150': 90}],
[3, [['R2', 1, 2], ['R2', 2, 3]]]),
('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),
('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),
('normal control 6',
[[['CHEM120', 'R1', 0], ['HIST140', 'R1', 1], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 2]],
{'MATH101': 120,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[1, [['R1', 1, 2]]]),
('normal control 7',
[[['PHYS110', 'R1', 1], ['MATH101H', 'R2', 1], ['HIST140', 'R1', 2]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 120,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[0, []]),
('normal control 8',
[[['BIO130', 'R2', 0], ['BIO130', 'R1', 0], ['ECON150', 'R2', 1], ['MATH101H', 'R1', 2],
['PHYS110', 'R1', 0], ['CHEM120', 'R1', 0], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1]],
{'MATH101': 120,
'MATH101H': 120,
'PHYS110': 120,
'CHEM120': 60,
'BIO130': 90,
'HIST140': 120,
'ECON150': 120}],
[2, [['R1', 0, 3]]])]]
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: distinct durations 1 | [0, []] | [0, []] | Passed |
| regression variant: distinct durations 2 | [3, [['R1', 0, 3], ['R2', 1, 2]]] | [2, [['R1', 0, 2], ['R2', 1, 2]]] | Failed |
| partial repair guard 3 | [2, [['R2', 1, 3]]] | [1, [['R2', 1, 2]]] | Failed |
| boundary control 4 | [0, []] | [0, []] | Passed |
| normal control 5 | [0, []] | [0, []] | Passed |
| normal control 6 | [1, [['R2', 2, 2]]] | [1, [['R2', 2, 2]]] | Passed |
| normal control 7 | [0, []] | [0, []] | Passed |
| normal control 8 | [3, [['R1', 1, 2], ['R2', 1, 3]]] | [2, [['R1', 1, 2], ['R2', 1, 2]]] | Failed |
SHA-256 / 612d612200b141480e5a7e4201cecfd1106a4415e285e0f88de7ed0c314f0a37
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(assign, dur):
groups = {}
for e, r, p in assign:
groups.setdefault((r, p), set()).add(dur[e])
bad = []
total = 0
for (r, p), ds in sorted(groups.items()):
if len(ds) > 1:
bad.append([r, p, len(ds)])
total += len(ds) - 1
return [total, bad]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: distinct durations 1', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),
('regression variant: distinct durations 2',
[[['MATH101', 'R1', 1], ['PHYS110', 'R1', 0], ['MATH101', 'R1', 2], ['PHYS110', 'R1', 0],
['BIO130', 'R2', 1], ['BIO130', 'R1', 0], ['MATH101H', 'R2', 1]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 90,
'BIO130': 60,
'HIST140': 90,
'ECON150': 120}],
[2, [['R1', 0, 2], ['R2', 1, 2]]]),
('partial repair guard 3',
[[['HIST140', 'R2', 1], ['BIO130', 'R2', 1], ['MATH101', 'R1', 2], ['MATH101', 'R2', 1],
['MATH101', 'R1', 2], ['CHEM120', 'R1', 1]],
{'MATH101': 120,
'MATH101H': 90,
'PHYS110': 60,
'CHEM120': 120,
'BIO130': 90,
'HIST140': 120,
'ECON150': 90}],
[1, [['R2', 1, 2]]]),
('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),
('normal control 5',
[[['CHEM120', 'R1', 2], ['ECON150', 'R1', 0]],
{'MATH101': 60,
'MATH101H': 90,
'PHYS110': 90,
'CHEM120': 60,
'BIO130': 90,
'HIST140': 120,
'ECON150': 90}],
[0, []]),
('normal control 6',
[[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1], ['MATH101', 'R2', 0],
['CHEM120', 'R2', 2], ['HIST140', 'R1', 0]],
{'MATH101': 60,
'MATH101H': 60,
'PHYS110': 60,
'CHEM120': 90,
'BIO130': 90,
'HIST140': 120,
'ECON150': 60}],
[1, [['R2', 2, 2]]]),
('normal control 7',
[[['MATH101H', 'R1', 1], ['PHYS110', 'R2', 0]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 90,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[0, []]),
('normal control 8',
[[['BIO130', 'R2', 1], ['MATH101', 'R2', 1], ['HIST140', 'R2', 1], ['PHYS110', 'R1', 1],
['HIST140', 'R1', 1]],
{'MATH101': 90,
'MATH101H': 60,
'PHYS110': 60,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 90,
'ECON150': 90}],
[2, [['R1', 1, 2], ['R2', 1, 2]]])],
[('regression: distinct durations 1',
[[['MATH101', 'R2', 1], ['MATH101', 'R2', 1], ['ECON150', 'R1', 1], ['MATH101H', 'R1', 2]],
{'MATH101': 60,
'MATH101H': 60,
'PHYS110': 120,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 90,
'ECON150': 60}],
[0, []]),
('regression variant: distinct durations 2',
[[['CHEM120', 'R2', 0], ['ECON150', 'R2', 1], ['PHYS110', 'R2', 1], ['ECON150', 'R1', 2],
['CHEM120', 'R1', 1], ['CHEM120', 'R1', 1], ['MATH101H', 'R2', 1]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 120,
'CHEM120': 60,
'BIO130': 60,
'HIST140': 90,
'ECON150': 90}],
[1, [['R2', 1, 2]]]),
('partial repair guard 3',
[[['ECON150', 'R1', 0], ['ECON150', 'R1', 1], ['BIO130', 'R1', 0], ['CHEM120', 'R2', 2],
['BIO130', 'R1', 0]],
{'MATH101': 120,
'MATH101H': 60,
'PHYS110': 120,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[1, [['R1', 0, 2]]]),
('boundary control 4', [[['A', 'R1', 0], ['B', 'R2', 0]], {'A': 60, 'B': 90}], [0, []]),
('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),
('normal control 6',
[[['MATH101H', 'R1', 1], ['ECON150', 'R1', 2], ['BIO130', 'R1', 0], ['MATH101H', 'R1', 2],
['BIO130', 'R2', 1]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 90,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 90,
'ECON150': 120}],
[1, [['R1', 2, 2]]]),
('normal control 7',
[[['CHEM120', 'R2', 2], ['MATH101H', 'R1', 2], ['HIST140', 'R2', 1], ['MATH101H', 'R2', 2]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 120,
'CHEM120': 90,
'BIO130': 90,
'HIST140': 120,
'ECON150': 120}],
[1, [['R2', 2, 2]]]),
('normal control 8',
[[['PHYS110', 'R1', 1], ['BIO130', 'R1', 1]],
{'MATH101': 120,
'MATH101H': 90,
'PHYS110': 90,
'CHEM120': 120,
'BIO130': 60,
'HIST140': 120,
'ECON150': 60}],
[1, [['R1', 1, 2]]])],
[('regression: distinct durations 1',
[[['BIO130', 'R2', 2], ['PHYS110', 'R2', 2], ['MATH101', 'R1', 1], ['BIO130', 'R2', 2]],
{'MATH101': 120,
'MATH101H': 60,
'PHYS110': 120,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 90,
'ECON150': 90}],
[0, []]),
('regression variant: distinct durations 2',
[[['MATH101H', 'R2', 0], ['HIST140', 'R2', 2], ['PHYS110', 'R1', 2], ['MATH101H', 'R2', 0],
['ECON150', 'R2', 2], ['ECON150', 'R1', 0], ['PHYS110', 'R1', 2]],
{'MATH101': 90,
'MATH101H': 60,
'PHYS110': 90,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[1, [['R2', 2, 2]]]),
('partial repair guard 3',
[[['BIO130', 'R2', 1], ['MATH101', 'R2', 1], ['HIST140', 'R2', 1], ['PHYS110', 'R1', 1],
['HIST140', 'R1', 1]],
{'MATH101': 90,
'MATH101H': 60,
'PHYS110': 60,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 90,
'ECON150': 90}],
[2, [['R1', 1, 2], ['R2', 1, 2]]]),
('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 0], ['C', 'R1', 0]], {'A': 60, 'B': 90, 'C': 120}],
[2, [['R1', 0, 3]]]),
('boundary control 5', [[['A', 'R1', 0], ['B', 'R2', 0]], {'A': 60, 'B': 90}], [0, []]),
('normal control 6',
[[['MATH101H', 'R1', 1], ['HIST140', 'R1', 0], ['ECON150', 'R2', 0], ['ECON150', 'R1', 2],
['PHYS110', 'R2', 2], ['MATH101H', 'R2', 1]],
{'MATH101': 90,
'MATH101H': 120,
'PHYS110': 60,
'CHEM120': 120,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[0, []]),
('normal control 7',
[[['CHEM120', 'R2', 1], ['HIST140', 'R2', 2], ['ECON150', 'R2', 1], ['ECON150', 'R1', 2]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 60,
'CHEM120': 120,
'BIO130': 90,
'HIST140': 90,
'ECON150': 120}],
[0, []]),
('normal control 8',
[[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1], ['MATH101', 'R2', 0],
['CHEM120', 'R2', 2], ['HIST140', 'R1', 0]],
{'MATH101': 60,
'MATH101H': 60,
'PHYS110': 60,
'CHEM120': 90,
'BIO130': 90,
'HIST140': 120,
'ECON150': 60}],
[1, [['R2', 2, 2]]])],
[('regression: distinct durations 1',
[[['CHEM120', 'R2', 0], ['PHYS110', 'R1', 0], ['MATH101', 'R2', 2], ['BIO130', 'R1', 0],
['CHEM120', 'R2', 2], ['ECON150', 'R2', 2], ['BIO130', 'R2', 2]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 120,
'CHEM120': 90,
'BIO130': 90,
'HIST140': 120,
'ECON150': 120}],
[3, [['R1', 0, 2], ['R2', 2, 3]]]),
('regression variant: distinct durations 2',
[[['HIST140', 'R1', 2], ['PHYS110', 'R2', 0], ['PHYS110', 'R2', 0], ['CHEM120', 'R2', 0],
['MATH101', 'R2', 0], ['BIO130', 'R2', 1], ['MATH101H', 'R2', 0]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 60,
'ECON150': 120}],
[2, [['R2', 0, 3]]]),
('partial repair guard 3',
[[['ECON150', 'R1', 0], ['MATH101H', 'R1', 2], ['CHEM120', 'R2', 2], ['ECON150', 'R1', 2],
['CHEM120', 'R1', 2], ['CHEM120', 'R1', 0], ['ECON150', 'R1', 0], ['ECON150', 'R2', 0]],
{'MATH101': 60,
'MATH101H': 60,
'PHYS110': 120,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 90,
'ECON150': 90}],
[1, [['R1', 2, 2]]]),
('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),
('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 0], ['C', 'R1', 0]], {'A': 60, 'B': 90, 'C': 120}],
[2, [['R1', 0, 3]]]),
('normal control 6',
[[['MATH101', 'R1', 2], ['ECON150', 'R1', 1], ['BIO130', 'R2', 1], ['HIST140', 'R2', 0],
['PHYS110', 'R1', 0], ['ECON150', 'R2', 2], ['MATH101H', 'R1', 1]],
{'MATH101': 120,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 60,
'BIO130': 60,
'HIST140': 90,
'ECON150': 90}],
[1, [['R1', 1, 2]]]),
('normal control 7',
[[['MATH101H', 'R2', 1], ['HIST140', 'R2', 2], ['PHYS110', 'R2', 1], ['ECON150', 'R2', 0],
['HIST140', 'R2', 2], ['HIST140', 'R1', 2], ['CHEM120', 'R1', 1]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 120,
'CHEM120': 120,
'BIO130': 90,
'HIST140': 90,
'ECON150': 60}],
[0, []]),
('normal control 8',
[[['HIST140', 'R1', 1], ['MATH101H', 'R2', 2], ['ECON150', 'R1', 2], ['PHYS110', 'R1', 1],
['HIST140', 'R1', 1], ['CHEM120', 'R2', 1], ['CHEM120', 'R2', 2]],
{'MATH101': 90,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 120,
'BIO130': 60,
'HIST140': 120,
'ECON150': 90}],
[1, [['R1', 1, 2]]])],
[('regression: distinct durations 1',
[[['MATH101H', 'R2', 2], ['MATH101', 'R2', 2], ['MATH101H', 'R1', 1], ['MATH101', 'R1', 1],
['HIST140', 'R2', 0]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 60,
'CHEM120': 90,
'BIO130': 60,
'HIST140': 120,
'ECON150': 90}],
[0, []]),
('regression variant: distinct durations 2',
[[['MATH101H', 'R1', 0], ['CHEM120', 'R1', 0], ['ECON150', 'R2', 1], ['PHYS110', 'R1', 0]],
{'MATH101': 90,
'MATH101H': 60,
'PHYS110': 120,
'CHEM120': 60,
'BIO130': 60,
'HIST140': 60,
'ECON150': 90}],
[1, [['R1', 0, 2]]]),
('partial repair guard 3',
[[['CHEM120', 'R1', 1], ['BIO130', 'R2', 2], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1],
['PHYS110', 'R2', 2], ['MATH101', 'R2', 2], ['HIST140', 'R2', 1]],
{'MATH101': 90,
'MATH101H': 90,
'PHYS110': 60,
'CHEM120': 60,
'BIO130': 120,
'HIST140': 60,
'ECON150': 90}],
[3, [['R2', 1, 2], ['R2', 2, 3]]]),
('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),
('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),
('normal control 6',
[[['CHEM120', 'R1', 0], ['HIST140', 'R1', 1], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 2]],
{'MATH101': 120,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 90,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[1, [['R1', 1, 2]]]),
('normal control 7',
[[['PHYS110', 'R1', 1], ['MATH101H', 'R2', 1], ['HIST140', 'R1', 2]],
{'MATH101': 60,
'MATH101H': 120,
'PHYS110': 90,
'CHEM120': 120,
'BIO130': 120,
'HIST140': 120,
'ECON150': 90}],
[0, []]),
('normal control 8',
[[['BIO130', 'R2', 0], ['BIO130', 'R1', 0], ['ECON150', 'R2', 1], ['MATH101H', 'R1', 2],
['PHYS110', 'R1', 0], ['CHEM120', 'R1', 0], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1]],
{'MATH101': 120,
'MATH101H': 120,
'PHYS110': 120,
'CHEM120': 60,
'BIO130': 90,
'HIST140': 120,
'ECON150': 120}],
[2, [['R1', 0, 3]]])]]
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: distinct durations 1 | [0, []] | [0, []] | Passed |
| regression variant: distinct durations 2 | [2, [['R1', 0, 2], ['R2', 1, 2]]] | [2, [['R1', 0, 2], ['R2', 1, 2]]] | Passed |
| partial repair guard 3 | [1, [['R2', 1, 2]]] | [1, [['R2', 1, 2]]] | Passed |
| boundary control 4 | [0, []] | [0, []] | Passed |
| normal control 5 | [0, []] | [0, []] | Passed |
| normal control 6 | [1, [['R2', 2, 2]]] | [1, [['R2', 2, 2]]] | Passed |
| normal control 7 | [0, []] | [0, []] | Passed |
| normal control 8 | [2, [['R1', 1, 2], ['R2', 1, 2]]] | [2, [['R1', 1, 2], ['R2', 1, 2]]] | Passed |
SHA-256 / a7058e7f87c94d7876d30dccfb7f346cc83c24a96eb0430f6ae5aa3f03d2b78a
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:05.534393+00:00.
Case digest / 93ac82495f85ae2914dfeae90a8713eedb9cdf3f81e9f60b239abbd5e46f11ec