FA-94816 / Exam timetabling constraints / Open access
Missing-exam list reports unknown exams instead · case 01
Dropped exams are not reported while stray exams are.
ROOT CAUSE
The set difference is reversed.
VERIFIED REPAIR
Missing = required minus assigned.
Unsuccessful approach: The symmetric difference mixes missing and unknown exams.
Case contract
exams = required exam ids; assign [exam, room, period]. Return missing (required but unassigned), unknown (assigned but not required) and conflict (assigned to more than one distinct period; a split across rooms in one period is fine), each sorted.
Why this case matters
Completeness checks catch exams dropped or duplicated when merging timetable drafts.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(exams, assign):
req = set(exams)
per = {}
for ex, r, p in assign:
per.setdefault(ex, set()).add(p)
return {'missing': sorted(set(per) - req), 'unknown': sorted(set(per) - req),
'conflict': sorted(ex for ex in per if len(per[ex]) > 1)}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: missing direction 1', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('regression variant: missing direction 2',
[['HIST140', 'MATH101H', 'BIO130', 'PHYS110', 'CHEM120', 'ECON150'],
[['BIO130', 'R1', 0], ['PHYS110', 'R2', 0], ['MATH101', 'R1', 1]]],
{'missing': ['CHEM120', 'ECON150', 'HIST140', 'MATH101H'], 'unknown': ['MATH101'], 'conflict': []}),
('boundary control 3', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('normal control 4',
[['HIST140', 'PHYS110', 'MATH101H', 'MATH101', 'BIO130', 'CHEM120'],
[['BIO130', 'R2', 1], ['MATH101H', 'R1', 2], ['MATH101H', 'R2', 0]]],
{'missing': ['CHEM120', 'HIST140', 'MATH101', 'PHYS110'], 'unknown': [], 'conflict': ['MATH101H']}),
('normal control 5',
[['MATH101', 'ECON150', 'MATH101H', 'PHYS110'],
[['PHYS110', 'R1', 0], ['MATH101', 'R1', 0], ['MATH101H', 'R2', 2]]],
{'missing': ['ECON150'], 'unknown': [], 'conflict': []}),
('normal control 6',
[['MATH101H', 'MATH101', 'CHEM120', 'HIST140', 'BIO130'],
[['MATH101', 'R2', 2], ['BIO130', 'R1', 1], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1]]],
{'missing': ['HIST140', 'MATH101H'], 'unknown': [], 'conflict': []}),
('normal control 7',
[['PHYS110', 'MATH101', 'HIST140', 'ECON150', 'MATH101H'],
[['HIST140', 'R1', 2], ['CHEM120', 'R1', 2], ['ECON150', 'R2', 2], ['HIST140', 'R2', 1],
['PHYS110', 'R1', 0]]],
{'missing': ['MATH101', 'MATH101H'], 'unknown': ['CHEM120'], 'conflict': ['HIST140']}),
('normal control 8', [['CHEM120', 'MATH101', 'ECON150'], [['BIO130', 'R1', 1], ['MATH101', 'R1', 0]]],
{'missing': ['CHEM120', 'ECON150'], 'unknown': ['BIO130'], 'conflict': []})],
[('regression: missing direction 1', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('regression variant: missing direction 2',
[['PHYS110', 'MATH101H', 'HIST140', 'CHEM120'],
[['PHYS110', 'R2', 1], ['BIO130', 'R2', 0], ['PHYS110', 'R2', 1], ['MATH101H', 'R1', 0],
['MATH101', 'R1', 2], ['ECON150', 'R2', 1], ['HIST140', 'R1', 0]]],
{'missing': ['CHEM120'], 'unknown': ['BIO130', 'ECON150', 'MATH101'], 'conflict': []}),
('partial repair guard 3',
[['CHEM120', 'PHYS110', 'ECON150', 'MATH101'], [['MATH101H', 'R2', 0], ['PHYS110', 'R1', 1]]],
{'missing': ['CHEM120', 'ECON150', 'MATH101'], 'unknown': ['MATH101H'], 'conflict': []}),
('boundary control 4', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('normal control 5',
[['ECON150', 'HIST140'], [['HIST140', 'R1', 1], ['CHEM120', 'R2', 1], ['PHYS110', 'R1', 1]]],
{'missing': ['ECON150'], 'unknown': ['CHEM120', 'PHYS110'], 'conflict': []}),
('normal control 6',
[['MATH101', 'CHEM120'], [['CHEM120', 'R1', 2], ['BIO130', 'R2', 1], ['PHYS110', 'R2', 2]]],
{'missing': ['MATH101'], 'unknown': ['BIO130', 'PHYS110'], 'conflict': []}),
('normal control 7',
[['BIO130', 'MATH101'],
[['CHEM120', 'R1', 0], ['MATH101', 'R1', 1], ['MATH101H', 'R1', 0], ['BIO130', 'R1', 2],
['CHEM120', 'R2', 0], ['MATH101', 'R1', 0], ['BIO130', 'R1', 2]]],
{'missing': [], 'unknown': ['CHEM120', 'MATH101H'], 'conflict': ['MATH101']}),
('normal control 8',
[['MATH101', 'MATH101H'],
[['ECON150', 'R1', 1], ['MATH101H', 'R2', 0], ['MATH101', 'R1', 0], ['PHYS110', 'R1', 1],
['ECON150', 'R1', 1], ['PHYS110', 'R1', 2]]],
{'missing': [], 'unknown': ['ECON150', 'PHYS110'], 'conflict': ['PHYS110']})],
[('regression: missing direction 1',
[['MATH101H', 'MATH101', 'ECON150', 'HIST140'],
[['HIST140', 'R1', 1], ['BIO130', 'R1', 1], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 0],
['MATH101H', 'R1', 0], ['HIST140', 'R2', 1]]],
{'missing': ['ECON150', 'MATH101'], 'unknown': ['BIO130', 'CHEM120'], 'conflict': ['CHEM120']}),
('regression variant: missing direction 2',
[['CHEM120', 'MATH101H', 'PHYS110', 'MATH101', 'HIST140'],
[['MATH101', 'R1', 0], ['HIST140', 'R2', 1], ['ECON150', 'R1', 1], ['ECON150', 'R1', 0],
['BIO130', 'R1', 0]]],
{'missing': ['CHEM120', 'MATH101H', 'PHYS110'],
'unknown': ['BIO130', 'ECON150'],
'conflict': ['ECON150']}),
('partial repair guard 3',
[['ECON150', 'HIST140', 'PHYS110', 'MATH101'],
[['CHEM120', 'R2', 0], ['CHEM120', 'R1', 2], ['HIST140', 'R1', 0]]],
{'missing': ['ECON150', 'MATH101', 'PHYS110'], 'unknown': ['CHEM120'], 'conflict': ['CHEM120']}),
('boundary control 4', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('boundary control 5', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('normal control 6',
[['CHEM120', 'MATH101', 'PHYS110', 'MATH101H'],
[['MATH101', 'R1', 1], ['HIST140', 'R1', 1], ['MATH101H', 'R1', 2], ['HIST140', 'R1', 0],
['HIST140', 'R2', 0], ['CHEM120', 'R2', 2], ['HIST140', 'R1', 2]]],
{'missing': ['PHYS110'], 'unknown': ['HIST140'], 'conflict': ['HIST140']}),
('normal control 7',
[['MATH101H', 'HIST140', 'CHEM120', 'MATH101', 'PHYS110', 'BIO130'],
[['ECON150', 'R2', 1], ['HIST140', 'R2', 1], ['CHEM120', 'R2', 2]]],
{'missing': ['BIO130', 'MATH101', 'MATH101H', 'PHYS110'], 'unknown': ['ECON150'], 'conflict': []}),
('normal control 8',
[['CHEM120', 'PHYS110', 'ECON150', 'MATH101'],
[['CHEM120', 'R1', 2], ['MATH101', 'R1', 0], ['HIST140', 'R2', 2], ['BIO130', 'R1', 2],
['ECON150', 'R2', 2], ['MATH101H', 'R2', 0]]],
{'missing': ['PHYS110'], 'unknown': ['BIO130', 'HIST140', 'MATH101H'], 'conflict': []})],
[('regression: missing direction 1',
[['HIST140', 'MATH101'],
[['HIST140', 'R1', 0], ['MATH101H', 'R1', 0], ['MATH101H', 'R1', 2], ['MATH101H', 'R1', 1]]],
{'missing': ['MATH101'], 'unknown': ['MATH101H'], 'conflict': ['MATH101H']}),
('regression variant: missing direction 2',
[['BIO130', 'HIST140', 'ECON150', 'MATH101', 'PHYS110', 'MATH101H'],
[['ECON150', 'R1', 2], ['PHYS110', 'R2', 1], ['CHEM120', 'R2', 1], ['MATH101H', 'R2', 0],
['CHEM120', 'R2', 0], ['HIST140', 'R1', 0]]],
{'missing': ['BIO130', 'MATH101'], 'unknown': ['CHEM120'], 'conflict': ['CHEM120']}),
('partial repair guard 3',
[['MATH101', 'PHYS110', 'BIO130'], [['MATH101', 'R1', 2], ['BIO130', 'R1', 2], ['HIST140', 'R2', 2]]],
{'missing': ['PHYS110'], 'unknown': ['HIST140'], 'conflict': []}),
('boundary control 4', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('boundary control 5', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('normal control 6',
[['PHYS110', 'MATH101', 'HIST140', 'MATH101H', 'BIO130', 'CHEM120'], [['PHYS110', 'R1', 2]]],
{'missing': ['BIO130', 'CHEM120', 'HIST140', 'MATH101', 'MATH101H'], 'unknown': [], 'conflict': []}),
('normal control 7',
[['PHYS110', 'BIO130', 'MATH101', 'ECON150', 'HIST140', 'CHEM120'],
[['CHEM120', 'R1', 1], ['CHEM120', 'R1', 1], ['ECON150', 'R1', 1], ['MATH101', 'R1', 1],
['BIO130', 'R2', 2], ['BIO130', 'R2', 2], ['ECON150', 'R2', 2]]],
{'missing': ['HIST140', 'PHYS110'], 'unknown': [], 'conflict': ['ECON150']}),
('normal control 8',
[['PHYS110', 'HIST140', 'MATH101H'],
[['MATH101H', 'R2', 2], ['ECON150', 'R1', 0], ['HIST140', 'R1', 0], ['CHEM120', 'R2', 0]]],
{'missing': ['PHYS110'], 'unknown': ['CHEM120', 'ECON150'], 'conflict': []})],
[('regression: missing direction 1',
[['MATH101', 'CHEM120', 'HIST140', 'ECON150', 'MATH101H', 'PHYS110'],
[['BIO130', 'R1', 2], ['HIST140', 'R2', 1], ['BIO130', 'R1', 0], ['MATH101', 'R1', 1],
['ECON150', 'R2', 0], ['MATH101H', 'R1', 2]]],
{'missing': ['CHEM120', 'PHYS110'], 'unknown': ['BIO130'], 'conflict': ['BIO130']}),
('regression variant: missing direction 2',
[['CHEM120', 'ECON150', 'PHYS110', 'BIO130'], [['ECON150', 'R1', 2]]],
{'missing': ['BIO130', 'CHEM120', 'PHYS110'], 'unknown': [], 'conflict': []}),
('partial repair guard 3',
[['PHYS110', 'ECON150', 'MATH101H', 'CHEM120', 'MATH101'],
[['BIO130', 'R1', 0], ['PHYS110', 'R2', 2], ['BIO130', 'R2', 0], ['BIO130', 'R1', 2]]],
{'missing': ['CHEM120', 'ECON150', 'MATH101', 'MATH101H'], 'unknown': ['BIO130'], 'conflict': ['BIO130']}),
('boundary control 4', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('boundary control 5', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('normal control 6',
[['CHEM120', 'MATH101H', 'MATH101'],
[['PHYS110', 'R2', 1], ['MATH101', 'R1', 1], ['ECON150', 'R1', 0], ['HIST140', 'R1', 0],
['MATH101', 'R2', 2], ['CHEM120', 'R2', 2], ['CHEM120', 'R2', 2]]],
{'missing': ['MATH101H'], 'unknown': ['ECON150', 'HIST140', 'PHYS110'], 'conflict': ['MATH101']}),
('normal control 7',
[['BIO130', 'PHYS110'],
[['HIST140', 'R1', 2], ['HIST140', 'R1', 1], ['PHYS110', 'R1', 0], ['CHEM120', 'R1', 2]]],
{'missing': ['BIO130'], 'unknown': ['CHEM120', 'HIST140'], 'conflict': ['HIST140']}),
('normal control 8',
[['HIST140', 'ECON150'],
[['PHYS110', 'R1', 0], ['BIO130', 'R1', 1], ['PHYS110', 'R1', 0], ['PHYS110', 'R2', 0]]],
{'missing': ['ECON150', 'HIST140'], 'unknown': ['BIO130', 'PHYS110'], 'conflict': []})]]
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: missing direction 1 | {'conflict': [], 'missing': [], 'unknown': []} | {'conflict': [], 'missing': ['B'], 'unknown': []} | Failed |
| regression variant: missing direction 2 | {'conflict': [], 'missing': ['MATH101'], 'unknown': ['MATH101']} | {'conflict': [], 'missing': ['CHEM120', 'ECON150', 'HIST140', 'MATH101H'], 'unknown': ['MATH101']} | Failed |
| boundary control 3 | {'conflict': ['A'], 'missing': ['C'], 'unknown': ['C']} | {'conflict': ['A'], 'missing': [], 'unknown': ['C']} | Failed |
| normal control 4 | {'conflict': ['MATH101H'], 'missing': [], 'unknown': []} | {'conflict': ['MATH101H'], 'missing': ['CHEM120', 'HIST140', 'MATH101', 'PHYS110'], 'unknown': []} | Failed |
| normal control 5 | {'conflict': [], 'missing': [], 'unknown': []} | {'conflict': [], 'missing': ['ECON150'], 'unknown': []} | Failed |
| normal control 6 | {'conflict': [], 'missing': [], 'unknown': []} | {'conflict': [], 'missing': ['HIST140', 'MATH101H'], 'unknown': []} | Failed |
| normal control 7 | {'conflict': ['HIST140'], 'missing': ['CHEM120'], 'unknown': ['CHEM120']} | {'conflict': ['HIST140'], 'missing': ['MATH101', 'MATH101H'], 'unknown': ['CHEM120']} | Failed |
| normal control 8 | {'conflict': [], 'missing': ['BIO130'], 'unknown': ['BIO130']} | {'conflict': [], 'missing': ['CHEM120', 'ECON150'], 'unknown': ['BIO130']} | Failed |
SHA-256 / 47c6d3831884f9626cd14a07c2d4578b54572618ba950c12f6eaab0f4ab3e438
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(exams, assign):
req = set(exams)
per = {}
for ex, r, p in assign:
per.setdefault(ex, set()).add(p)
return {'missing': sorted(req ^ set(per)), 'unknown': sorted(set(per) - req),
'conflict': sorted(ex for ex in per if len(per[ex]) > 1)}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: missing direction 1', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('regression variant: missing direction 2',
[['HIST140', 'MATH101H', 'BIO130', 'PHYS110', 'CHEM120', 'ECON150'],
[['BIO130', 'R1', 0], ['PHYS110', 'R2', 0], ['MATH101', 'R1', 1]]],
{'missing': ['CHEM120', 'ECON150', 'HIST140', 'MATH101H'], 'unknown': ['MATH101'], 'conflict': []}),
('boundary control 3', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('normal control 4',
[['HIST140', 'PHYS110', 'MATH101H', 'MATH101', 'BIO130', 'CHEM120'],
[['BIO130', 'R2', 1], ['MATH101H', 'R1', 2], ['MATH101H', 'R2', 0]]],
{'missing': ['CHEM120', 'HIST140', 'MATH101', 'PHYS110'], 'unknown': [], 'conflict': ['MATH101H']}),
('normal control 5',
[['MATH101', 'ECON150', 'MATH101H', 'PHYS110'],
[['PHYS110', 'R1', 0], ['MATH101', 'R1', 0], ['MATH101H', 'R2', 2]]],
{'missing': ['ECON150'], 'unknown': [], 'conflict': []}),
('normal control 6',
[['MATH101H', 'MATH101', 'CHEM120', 'HIST140', 'BIO130'],
[['MATH101', 'R2', 2], ['BIO130', 'R1', 1], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1]]],
{'missing': ['HIST140', 'MATH101H'], 'unknown': [], 'conflict': []}),
('normal control 7',
[['PHYS110', 'MATH101', 'HIST140', 'ECON150', 'MATH101H'],
[['HIST140', 'R1', 2], ['CHEM120', 'R1', 2], ['ECON150', 'R2', 2], ['HIST140', 'R2', 1],
['PHYS110', 'R1', 0]]],
{'missing': ['MATH101', 'MATH101H'], 'unknown': ['CHEM120'], 'conflict': ['HIST140']}),
('normal control 8', [['CHEM120', 'MATH101', 'ECON150'], [['BIO130', 'R1', 1], ['MATH101', 'R1', 0]]],
{'missing': ['CHEM120', 'ECON150'], 'unknown': ['BIO130'], 'conflict': []})],
[('regression: missing direction 1', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('regression variant: missing direction 2',
[['PHYS110', 'MATH101H', 'HIST140', 'CHEM120'],
[['PHYS110', 'R2', 1], ['BIO130', 'R2', 0], ['PHYS110', 'R2', 1], ['MATH101H', 'R1', 0],
['MATH101', 'R1', 2], ['ECON150', 'R2', 1], ['HIST140', 'R1', 0]]],
{'missing': ['CHEM120'], 'unknown': ['BIO130', 'ECON150', 'MATH101'], 'conflict': []}),
('partial repair guard 3',
[['CHEM120', 'PHYS110', 'ECON150', 'MATH101'], [['MATH101H', 'R2', 0], ['PHYS110', 'R1', 1]]],
{'missing': ['CHEM120', 'ECON150', 'MATH101'], 'unknown': ['MATH101H'], 'conflict': []}),
('boundary control 4', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('normal control 5',
[['ECON150', 'HIST140'], [['HIST140', 'R1', 1], ['CHEM120', 'R2', 1], ['PHYS110', 'R1', 1]]],
{'missing': ['ECON150'], 'unknown': ['CHEM120', 'PHYS110'], 'conflict': []}),
('normal control 6',
[['MATH101', 'CHEM120'], [['CHEM120', 'R1', 2], ['BIO130', 'R2', 1], ['PHYS110', 'R2', 2]]],
{'missing': ['MATH101'], 'unknown': ['BIO130', 'PHYS110'], 'conflict': []}),
('normal control 7',
[['BIO130', 'MATH101'],
[['CHEM120', 'R1', 0], ['MATH101', 'R1', 1], ['MATH101H', 'R1', 0], ['BIO130', 'R1', 2],
['CHEM120', 'R2', 0], ['MATH101', 'R1', 0], ['BIO130', 'R1', 2]]],
{'missing': [], 'unknown': ['CHEM120', 'MATH101H'], 'conflict': ['MATH101']}),
('normal control 8',
[['MATH101', 'MATH101H'],
[['ECON150', 'R1', 1], ['MATH101H', 'R2', 0], ['MATH101', 'R1', 0], ['PHYS110', 'R1', 1],
['ECON150', 'R1', 1], ['PHYS110', 'R1', 2]]],
{'missing': [], 'unknown': ['ECON150', 'PHYS110'], 'conflict': ['PHYS110']})],
[('regression: missing direction 1',
[['MATH101H', 'MATH101', 'ECON150', 'HIST140'],
[['HIST140', 'R1', 1], ['BIO130', 'R1', 1], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 0],
['MATH101H', 'R1', 0], ['HIST140', 'R2', 1]]],
{'missing': ['ECON150', 'MATH101'], 'unknown': ['BIO130', 'CHEM120'], 'conflict': ['CHEM120']}),
('regression variant: missing direction 2',
[['CHEM120', 'MATH101H', 'PHYS110', 'MATH101', 'HIST140'],
[['MATH101', 'R1', 0], ['HIST140', 'R2', 1], ['ECON150', 'R1', 1], ['ECON150', 'R1', 0],
['BIO130', 'R1', 0]]],
{'missing': ['CHEM120', 'MATH101H', 'PHYS110'],
'unknown': ['BIO130', 'ECON150'],
'conflict': ['ECON150']}),
('partial repair guard 3',
[['ECON150', 'HIST140', 'PHYS110', 'MATH101'],
[['CHEM120', 'R2', 0], ['CHEM120', 'R1', 2], ['HIST140', 'R1', 0]]],
{'missing': ['ECON150', 'MATH101', 'PHYS110'], 'unknown': ['CHEM120'], 'conflict': ['CHEM120']}),
('boundary control 4', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('boundary control 5', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('normal control 6',
[['CHEM120', 'MATH101', 'PHYS110', 'MATH101H'],
[['MATH101', 'R1', 1], ['HIST140', 'R1', 1], ['MATH101H', 'R1', 2], ['HIST140', 'R1', 0],
['HIST140', 'R2', 0], ['CHEM120', 'R2', 2], ['HIST140', 'R1', 2]]],
{'missing': ['PHYS110'], 'unknown': ['HIST140'], 'conflict': ['HIST140']}),
('normal control 7',
[['MATH101H', 'HIST140', 'CHEM120', 'MATH101', 'PHYS110', 'BIO130'],
[['ECON150', 'R2', 1], ['HIST140', 'R2', 1], ['CHEM120', 'R2', 2]]],
{'missing': ['BIO130', 'MATH101', 'MATH101H', 'PHYS110'], 'unknown': ['ECON150'], 'conflict': []}),
('normal control 8',
[['CHEM120', 'PHYS110', 'ECON150', 'MATH101'],
[['CHEM120', 'R1', 2], ['MATH101', 'R1', 0], ['HIST140', 'R2', 2], ['BIO130', 'R1', 2],
['ECON150', 'R2', 2], ['MATH101H', 'R2', 0]]],
{'missing': ['PHYS110'], 'unknown': ['BIO130', 'HIST140', 'MATH101H'], 'conflict': []})],
[('regression: missing direction 1',
[['HIST140', 'MATH101'],
[['HIST140', 'R1', 0], ['MATH101H', 'R1', 0], ['MATH101H', 'R1', 2], ['MATH101H', 'R1', 1]]],
{'missing': ['MATH101'], 'unknown': ['MATH101H'], 'conflict': ['MATH101H']}),
('regression variant: missing direction 2',
[['BIO130', 'HIST140', 'ECON150', 'MATH101', 'PHYS110', 'MATH101H'],
[['ECON150', 'R1', 2], ['PHYS110', 'R2', 1], ['CHEM120', 'R2', 1], ['MATH101H', 'R2', 0],
['CHEM120', 'R2', 0], ['HIST140', 'R1', 0]]],
{'missing': ['BIO130', 'MATH101'], 'unknown': ['CHEM120'], 'conflict': ['CHEM120']}),
('partial repair guard 3',
[['MATH101', 'PHYS110', 'BIO130'], [['MATH101', 'R1', 2], ['BIO130', 'R1', 2], ['HIST140', 'R2', 2]]],
{'missing': ['PHYS110'], 'unknown': ['HIST140'], 'conflict': []}),
('boundary control 4', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('boundary control 5', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('normal control 6',
[['PHYS110', 'MATH101', 'HIST140', 'MATH101H', 'BIO130', 'CHEM120'], [['PHYS110', 'R1', 2]]],
{'missing': ['BIO130', 'CHEM120', 'HIST140', 'MATH101', 'MATH101H'], 'unknown': [], 'conflict': []}),
('normal control 7',
[['PHYS110', 'BIO130', 'MATH101', 'ECON150', 'HIST140', 'CHEM120'],
[['CHEM120', 'R1', 1], ['CHEM120', 'R1', 1], ['ECON150', 'R1', 1], ['MATH101', 'R1', 1],
['BIO130', 'R2', 2], ['BIO130', 'R2', 2], ['ECON150', 'R2', 2]]],
{'missing': ['HIST140', 'PHYS110'], 'unknown': [], 'conflict': ['ECON150']}),
('normal control 8',
[['PHYS110', 'HIST140', 'MATH101H'],
[['MATH101H', 'R2', 2], ['ECON150', 'R1', 0], ['HIST140', 'R1', 0], ['CHEM120', 'R2', 0]]],
{'missing': ['PHYS110'], 'unknown': ['CHEM120', 'ECON150'], 'conflict': []})],
[('regression: missing direction 1',
[['MATH101', 'CHEM120', 'HIST140', 'ECON150', 'MATH101H', 'PHYS110'],
[['BIO130', 'R1', 2], ['HIST140', 'R2', 1], ['BIO130', 'R1', 0], ['MATH101', 'R1', 1],
['ECON150', 'R2', 0], ['MATH101H', 'R1', 2]]],
{'missing': ['CHEM120', 'PHYS110'], 'unknown': ['BIO130'], 'conflict': ['BIO130']}),
('regression variant: missing direction 2',
[['CHEM120', 'ECON150', 'PHYS110', 'BIO130'], [['ECON150', 'R1', 2]]],
{'missing': ['BIO130', 'CHEM120', 'PHYS110'], 'unknown': [], 'conflict': []}),
('partial repair guard 3',
[['PHYS110', 'ECON150', 'MATH101H', 'CHEM120', 'MATH101'],
[['BIO130', 'R1', 0], ['PHYS110', 'R2', 2], ['BIO130', 'R2', 0], ['BIO130', 'R1', 2]]],
{'missing': ['CHEM120', 'ECON150', 'MATH101', 'MATH101H'], 'unknown': ['BIO130'], 'conflict': ['BIO130']}),
('boundary control 4', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('boundary control 5', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('normal control 6',
[['CHEM120', 'MATH101H', 'MATH101'],
[['PHYS110', 'R2', 1], ['MATH101', 'R1', 1], ['ECON150', 'R1', 0], ['HIST140', 'R1', 0],
['MATH101', 'R2', 2], ['CHEM120', 'R2', 2], ['CHEM120', 'R2', 2]]],
{'missing': ['MATH101H'], 'unknown': ['ECON150', 'HIST140', 'PHYS110'], 'conflict': ['MATH101']}),
('normal control 7',
[['BIO130', 'PHYS110'],
[['HIST140', 'R1', 2], ['HIST140', 'R1', 1], ['PHYS110', 'R1', 0], ['CHEM120', 'R1', 2]]],
{'missing': ['BIO130'], 'unknown': ['CHEM120', 'HIST140'], 'conflict': ['HIST140']}),
('normal control 8',
[['HIST140', 'ECON150'],
[['PHYS110', 'R1', 0], ['BIO130', 'R1', 1], ['PHYS110', 'R1', 0], ['PHYS110', 'R2', 0]]],
{'missing': ['ECON150', 'HIST140'], 'unknown': ['BIO130', 'PHYS110'], 'conflict': []})]]
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: missing direction 1 | {'conflict': [], 'missing': ['B'], 'unknown': []} | {'conflict': [], 'missing': ['B'], 'unknown': []} | Passed |
| regression variant: missing direction 2 | {'conflict': [], 'missing': ['CHEM120', 'ECON150', 'HIST140', 'MATH101', 'MATH101H'], 'unknown': ['MATH101']} | {'conflict': [], 'missing': ['CHEM120', 'ECON150', 'HIST140', 'MATH101H'], 'unknown': ['MATH101']} | Failed |
| boundary control 3 | {'conflict': ['A'], 'missing': ['C'], 'unknown': ['C']} | {'conflict': ['A'], 'missing': [], 'unknown': ['C']} | Failed |
| normal control 4 | {'conflict': ['MATH101H'], 'missing': ['CHEM120', 'HIST140', 'MATH101', 'PHYS110'], 'unknown': []} | {'conflict': ['MATH101H'], 'missing': ['CHEM120', 'HIST140', 'MATH101', 'PHYS110'], 'unknown': []} | Passed |
| normal control 5 | {'conflict': [], 'missing': ['ECON150'], 'unknown': []} | {'conflict': [], 'missing': ['ECON150'], 'unknown': []} | Passed |
| normal control 6 | {'conflict': [], 'missing': ['HIST140', 'MATH101H'], 'unknown': []} | {'conflict': [], 'missing': ['HIST140', 'MATH101H'], 'unknown': []} | Passed |
| normal control 7 | {'conflict': ['HIST140'], 'missing': ['CHEM120', 'MATH101', 'MATH101H'], 'unknown': ['CHEM120']} | {'conflict': ['HIST140'], 'missing': ['MATH101', 'MATH101H'], 'unknown': ['CHEM120']} | Failed |
| normal control 8 | {'conflict': [], 'missing': ['BIO130', 'CHEM120', 'ECON150'], 'unknown': ['BIO130']} | {'conflict': [], 'missing': ['CHEM120', 'ECON150'], 'unknown': ['BIO130']} | Failed |
SHA-256 / dff0a5727bafe634d0141024ec1caefadb065aec3433e8d9cd94182922c25c44
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(exams, assign):
req = set(exams)
per = {}
for ex, r, p in assign:
per.setdefault(ex, set()).add(p)
return {'missing': sorted(req - set(per)), 'unknown': sorted(set(per) - req),
'conflict': sorted(ex for ex in per if len(per[ex]) > 1)}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: missing direction 1', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('regression variant: missing direction 2',
[['HIST140', 'MATH101H', 'BIO130', 'PHYS110', 'CHEM120', 'ECON150'],
[['BIO130', 'R1', 0], ['PHYS110', 'R2', 0], ['MATH101', 'R1', 1]]],
{'missing': ['CHEM120', 'ECON150', 'HIST140', 'MATH101H'], 'unknown': ['MATH101'], 'conflict': []}),
('boundary control 3', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('normal control 4',
[['HIST140', 'PHYS110', 'MATH101H', 'MATH101', 'BIO130', 'CHEM120'],
[['BIO130', 'R2', 1], ['MATH101H', 'R1', 2], ['MATH101H', 'R2', 0]]],
{'missing': ['CHEM120', 'HIST140', 'MATH101', 'PHYS110'], 'unknown': [], 'conflict': ['MATH101H']}),
('normal control 5',
[['MATH101', 'ECON150', 'MATH101H', 'PHYS110'],
[['PHYS110', 'R1', 0], ['MATH101', 'R1', 0], ['MATH101H', 'R2', 2]]],
{'missing': ['ECON150'], 'unknown': [], 'conflict': []}),
('normal control 6',
[['MATH101H', 'MATH101', 'CHEM120', 'HIST140', 'BIO130'],
[['MATH101', 'R2', 2], ['BIO130', 'R1', 1], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1]]],
{'missing': ['HIST140', 'MATH101H'], 'unknown': [], 'conflict': []}),
('normal control 7',
[['PHYS110', 'MATH101', 'HIST140', 'ECON150', 'MATH101H'],
[['HIST140', 'R1', 2], ['CHEM120', 'R1', 2], ['ECON150', 'R2', 2], ['HIST140', 'R2', 1],
['PHYS110', 'R1', 0]]],
{'missing': ['MATH101', 'MATH101H'], 'unknown': ['CHEM120'], 'conflict': ['HIST140']}),
('normal control 8', [['CHEM120', 'MATH101', 'ECON150'], [['BIO130', 'R1', 1], ['MATH101', 'R1', 0]]],
{'missing': ['CHEM120', 'ECON150'], 'unknown': ['BIO130'], 'conflict': []})],
[('regression: missing direction 1', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('regression variant: missing direction 2',
[['PHYS110', 'MATH101H', 'HIST140', 'CHEM120'],
[['PHYS110', 'R2', 1], ['BIO130', 'R2', 0], ['PHYS110', 'R2', 1], ['MATH101H', 'R1', 0],
['MATH101', 'R1', 2], ['ECON150', 'R2', 1], ['HIST140', 'R1', 0]]],
{'missing': ['CHEM120'], 'unknown': ['BIO130', 'ECON150', 'MATH101'], 'conflict': []}),
('partial repair guard 3',
[['CHEM120', 'PHYS110', 'ECON150', 'MATH101'], [['MATH101H', 'R2', 0], ['PHYS110', 'R1', 1]]],
{'missing': ['CHEM120', 'ECON150', 'MATH101'], 'unknown': ['MATH101H'], 'conflict': []}),
('boundary control 4', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('normal control 5',
[['ECON150', 'HIST140'], [['HIST140', 'R1', 1], ['CHEM120', 'R2', 1], ['PHYS110', 'R1', 1]]],
{'missing': ['ECON150'], 'unknown': ['CHEM120', 'PHYS110'], 'conflict': []}),
('normal control 6',
[['MATH101', 'CHEM120'], [['CHEM120', 'R1', 2], ['BIO130', 'R2', 1], ['PHYS110', 'R2', 2]]],
{'missing': ['MATH101'], 'unknown': ['BIO130', 'PHYS110'], 'conflict': []}),
('normal control 7',
[['BIO130', 'MATH101'],
[['CHEM120', 'R1', 0], ['MATH101', 'R1', 1], ['MATH101H', 'R1', 0], ['BIO130', 'R1', 2],
['CHEM120', 'R2', 0], ['MATH101', 'R1', 0], ['BIO130', 'R1', 2]]],
{'missing': [], 'unknown': ['CHEM120', 'MATH101H'], 'conflict': ['MATH101']}),
('normal control 8',
[['MATH101', 'MATH101H'],
[['ECON150', 'R1', 1], ['MATH101H', 'R2', 0], ['MATH101', 'R1', 0], ['PHYS110', 'R1', 1],
['ECON150', 'R1', 1], ['PHYS110', 'R1', 2]]],
{'missing': [], 'unknown': ['ECON150', 'PHYS110'], 'conflict': ['PHYS110']})],
[('regression: missing direction 1',
[['MATH101H', 'MATH101', 'ECON150', 'HIST140'],
[['HIST140', 'R1', 1], ['BIO130', 'R1', 1], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 0],
['MATH101H', 'R1', 0], ['HIST140', 'R2', 1]]],
{'missing': ['ECON150', 'MATH101'], 'unknown': ['BIO130', 'CHEM120'], 'conflict': ['CHEM120']}),
('regression variant: missing direction 2',
[['CHEM120', 'MATH101H', 'PHYS110', 'MATH101', 'HIST140'],
[['MATH101', 'R1', 0], ['HIST140', 'R2', 1], ['ECON150', 'R1', 1], ['ECON150', 'R1', 0],
['BIO130', 'R1', 0]]],
{'missing': ['CHEM120', 'MATH101H', 'PHYS110'],
'unknown': ['BIO130', 'ECON150'],
'conflict': ['ECON150']}),
('partial repair guard 3',
[['ECON150', 'HIST140', 'PHYS110', 'MATH101'],
[['CHEM120', 'R2', 0], ['CHEM120', 'R1', 2], ['HIST140', 'R1', 0]]],
{'missing': ['ECON150', 'MATH101', 'PHYS110'], 'unknown': ['CHEM120'], 'conflict': ['CHEM120']}),
('boundary control 4', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('boundary control 5', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('normal control 6',
[['CHEM120', 'MATH101', 'PHYS110', 'MATH101H'],
[['MATH101', 'R1', 1], ['HIST140', 'R1', 1], ['MATH101H', 'R1', 2], ['HIST140', 'R1', 0],
['HIST140', 'R2', 0], ['CHEM120', 'R2', 2], ['HIST140', 'R1', 2]]],
{'missing': ['PHYS110'], 'unknown': ['HIST140'], 'conflict': ['HIST140']}),
('normal control 7',
[['MATH101H', 'HIST140', 'CHEM120', 'MATH101', 'PHYS110', 'BIO130'],
[['ECON150', 'R2', 1], ['HIST140', 'R2', 1], ['CHEM120', 'R2', 2]]],
{'missing': ['BIO130', 'MATH101', 'MATH101H', 'PHYS110'], 'unknown': ['ECON150'], 'conflict': []}),
('normal control 8',
[['CHEM120', 'PHYS110', 'ECON150', 'MATH101'],
[['CHEM120', 'R1', 2], ['MATH101', 'R1', 0], ['HIST140', 'R2', 2], ['BIO130', 'R1', 2],
['ECON150', 'R2', 2], ['MATH101H', 'R2', 0]]],
{'missing': ['PHYS110'], 'unknown': ['BIO130', 'HIST140', 'MATH101H'], 'conflict': []})],
[('regression: missing direction 1',
[['HIST140', 'MATH101'],
[['HIST140', 'R1', 0], ['MATH101H', 'R1', 0], ['MATH101H', 'R1', 2], ['MATH101H', 'R1', 1]]],
{'missing': ['MATH101'], 'unknown': ['MATH101H'], 'conflict': ['MATH101H']}),
('regression variant: missing direction 2',
[['BIO130', 'HIST140', 'ECON150', 'MATH101', 'PHYS110', 'MATH101H'],
[['ECON150', 'R1', 2], ['PHYS110', 'R2', 1], ['CHEM120', 'R2', 1], ['MATH101H', 'R2', 0],
['CHEM120', 'R2', 0], ['HIST140', 'R1', 0]]],
{'missing': ['BIO130', 'MATH101'], 'unknown': ['CHEM120'], 'conflict': ['CHEM120']}),
('partial repair guard 3',
[['MATH101', 'PHYS110', 'BIO130'], [['MATH101', 'R1', 2], ['BIO130', 'R1', 2], ['HIST140', 'R2', 2]]],
{'missing': ['PHYS110'], 'unknown': ['HIST140'], 'conflict': []}),
('boundary control 4', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('boundary control 5', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('normal control 6',
[['PHYS110', 'MATH101', 'HIST140', 'MATH101H', 'BIO130', 'CHEM120'], [['PHYS110', 'R1', 2]]],
{'missing': ['BIO130', 'CHEM120', 'HIST140', 'MATH101', 'MATH101H'], 'unknown': [], 'conflict': []}),
('normal control 7',
[['PHYS110', 'BIO130', 'MATH101', 'ECON150', 'HIST140', 'CHEM120'],
[['CHEM120', 'R1', 1], ['CHEM120', 'R1', 1], ['ECON150', 'R1', 1], ['MATH101', 'R1', 1],
['BIO130', 'R2', 2], ['BIO130', 'R2', 2], ['ECON150', 'R2', 2]]],
{'missing': ['HIST140', 'PHYS110'], 'unknown': [], 'conflict': ['ECON150']}),
('normal control 8',
[['PHYS110', 'HIST140', 'MATH101H'],
[['MATH101H', 'R2', 2], ['ECON150', 'R1', 0], ['HIST140', 'R1', 0], ['CHEM120', 'R2', 0]]],
{'missing': ['PHYS110'], 'unknown': ['CHEM120', 'ECON150'], 'conflict': []})],
[('regression: missing direction 1',
[['MATH101', 'CHEM120', 'HIST140', 'ECON150', 'MATH101H', 'PHYS110'],
[['BIO130', 'R1', 2], ['HIST140', 'R2', 1], ['BIO130', 'R1', 0], ['MATH101', 'R1', 1],
['ECON150', 'R2', 0], ['MATH101H', 'R1', 2]]],
{'missing': ['CHEM120', 'PHYS110'], 'unknown': ['BIO130'], 'conflict': ['BIO130']}),
('regression variant: missing direction 2',
[['CHEM120', 'ECON150', 'PHYS110', 'BIO130'], [['ECON150', 'R1', 2]]],
{'missing': ['BIO130', 'CHEM120', 'PHYS110'], 'unknown': [], 'conflict': []}),
('partial repair guard 3',
[['PHYS110', 'ECON150', 'MATH101H', 'CHEM120', 'MATH101'],
[['BIO130', 'R1', 0], ['PHYS110', 'R2', 2], ['BIO130', 'R2', 0], ['BIO130', 'R1', 2]]],
{'missing': ['CHEM120', 'ECON150', 'MATH101', 'MATH101H'], 'unknown': ['BIO130'], 'conflict': ['BIO130']}),
('boundary control 4', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('boundary control 5', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('normal control 6',
[['CHEM120', 'MATH101H', 'MATH101'],
[['PHYS110', 'R2', 1], ['MATH101', 'R1', 1], ['ECON150', 'R1', 0], ['HIST140', 'R1', 0],
['MATH101', 'R2', 2], ['CHEM120', 'R2', 2], ['CHEM120', 'R2', 2]]],
{'missing': ['MATH101H'], 'unknown': ['ECON150', 'HIST140', 'PHYS110'], 'conflict': ['MATH101']}),
('normal control 7',
[['BIO130', 'PHYS110'],
[['HIST140', 'R1', 2], ['HIST140', 'R1', 1], ['PHYS110', 'R1', 0], ['CHEM120', 'R1', 2]]],
{'missing': ['BIO130'], 'unknown': ['CHEM120', 'HIST140'], 'conflict': ['HIST140']}),
('normal control 8',
[['HIST140', 'ECON150'],
[['PHYS110', 'R1', 0], ['BIO130', 'R1', 1], ['PHYS110', 'R1', 0], ['PHYS110', 'R2', 0]]],
{'missing': ['ECON150', 'HIST140'], 'unknown': ['BIO130', 'PHYS110'], 'conflict': []})]]
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: missing direction 1 | {'conflict': [], 'missing': ['B'], 'unknown': []} | {'conflict': [], 'missing': ['B'], 'unknown': []} | Passed |
| regression variant: missing direction 2 | {'conflict': [], 'missing': ['CHEM120', 'ECON150', 'HIST140', 'MATH101H'], 'unknown': ['MATH101']} | {'conflict': [], 'missing': ['CHEM120', 'ECON150', 'HIST140', 'MATH101H'], 'unknown': ['MATH101']} | Passed |
| boundary control 3 | {'conflict': ['A'], 'missing': [], 'unknown': ['C']} | {'conflict': ['A'], 'missing': [], 'unknown': ['C']} | Passed |
| normal control 4 | {'conflict': ['MATH101H'], 'missing': ['CHEM120', 'HIST140', 'MATH101', 'PHYS110'], 'unknown': []} | {'conflict': ['MATH101H'], 'missing': ['CHEM120', 'HIST140', 'MATH101', 'PHYS110'], 'unknown': []} | Passed |
| normal control 5 | {'conflict': [], 'missing': ['ECON150'], 'unknown': []} | {'conflict': [], 'missing': ['ECON150'], 'unknown': []} | Passed |
| normal control 6 | {'conflict': [], 'missing': ['HIST140', 'MATH101H'], 'unknown': []} | {'conflict': [], 'missing': ['HIST140', 'MATH101H'], 'unknown': []} | Passed |
| normal control 7 | {'conflict': ['HIST140'], 'missing': ['MATH101', 'MATH101H'], 'unknown': ['CHEM120']} | {'conflict': ['HIST140'], 'missing': ['MATH101', 'MATH101H'], 'unknown': ['CHEM120']} | Passed |
| normal control 8 | {'conflict': [], 'missing': ['CHEM120', 'ECON150'], 'unknown': ['BIO130']} | {'conflict': [], 'missing': ['CHEM120', 'ECON150'], 'unknown': ['BIO130']} | Passed |
SHA-256 / c0e1bf0313825f182781a2a7cd30796d92d06e9fbeab02bbef3b32dddba74961
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:07.897494+00:00.
Case digest / c8f898878014b5e92f8ec8271b466cf41e8356f553b9fd1ca33b4cb45c773cf8