FA-94821 / Exam timetabling constraints / Open access
Room split reported as a period conflict · case 01
Exams split across rooms in one period are listed as conflicts.
ROOT CAUSE
Periods are collected per row instead of distinct.
VERIFIED REPAIR
Collect distinct periods per exam.
Unsuccessful approach: Requiring three periods misses two-period conflicts.
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, []).append(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: split conflict 1', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('regression variant: split conflict 2',
[['ECON150', 'PHYS110', 'MATH101H', 'MATH101', 'CHEM120'],
[['ECON150', 'R2', 2], ['BIO130', 'R1', 1], ['MATH101', 'R2', 2], ['MATH101', 'R2', 1],
['CHEM120', 'R2', 0], ['HIST140', 'R1', 2], ['HIST140', 'R2', 2]]],
{'missing': ['MATH101H', 'PHYS110'], 'unknown': ['BIO130', 'HIST140'], 'conflict': ['MATH101']}),
('partial repair guard 3',
[['CHEM120', 'HIST140', 'ECON150', 'BIO130', 'MATH101H', 'MATH101'],
[['BIO130', 'R2', 2], ['MATH101H', 'R1', 1], ['MATH101', 'R1', 1], ['HIST140', 'R1', 0],
['HIST140', 'R1', 2]]],
{'missing': ['CHEM120', 'ECON150'], 'unknown': [], 'conflict': ['HIST140']}),
('boundary control 4', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('normal control 5',
[['PHYS110', 'BIO130', 'MATH101', 'ECON150', 'CHEM120'],
[['MATH101', 'R1', 2], ['PHYS110', 'R2', 2], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1],
['CHEM120', 'R2', 2], ['MATH101H', 'R1', 2], ['CHEM120', 'R2', 2]]],
{'missing': ['ECON150'], 'unknown': ['MATH101H'], 'conflict': ['CHEM120']}),
('normal control 6',
[['MATH101', 'ECON150', 'PHYS110', 'MATH101H'], [['ECON150', 'R1', 0], ['MATH101', 'R1', 0]]],
{'missing': ['MATH101H', 'PHYS110'], 'unknown': [], 'conflict': []}),
('normal control 7',
[['CHEM120', 'PHYS110', 'MATH101H', 'MATH101', 'HIST140', 'BIO130'],
[['BIO130', 'R2', 2], ['HIST140', 'R1', 0], ['ECON150', 'R2', 2], ['PHYS110', 'R1', 2],
['PHYS110', 'R2', 1], ['HIST140', 'R2', 1]]],
{'missing': ['CHEM120', 'MATH101', 'MATH101H'],
'unknown': ['ECON150'],
'conflict': ['HIST140', 'PHYS110']}),
('normal control 8',
[['HIST140', 'ECON150', 'MATH101', 'MATH101H'],
[['HIST140', 'R2', 0], ['MATH101H', 'R2', 2], ['PHYS110', 'R1', 1]]],
{'missing': ['ECON150', 'MATH101'], 'unknown': ['PHYS110'], 'conflict': []})],
[('regression: split conflict 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: split conflict 2',
[['BIO130', 'MATH101', 'ECON150', 'MATH101H'],
[['MATH101', 'R1', 2], ['MATH101', 'R1', 2], ['CHEM120', 'R1', 2]]],
{'missing': ['BIO130', 'ECON150', 'MATH101H'], 'unknown': ['CHEM120'], 'conflict': []}),
('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', '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',
[['HIST140', 'ECON150'],
[['HIST140', 'R2', 0], ['ECON150', 'R1', 1], ['MATH101H', 'R2', 2], ['BIO130', 'R2', 0],
['MATH101H', 'R2', 2]]],
{'missing': [], 'unknown': ['BIO130', 'MATH101H'], 'conflict': []}),
('normal control 7',
[['MATH101H', 'PHYS110', 'HIST140'],
[['PHYS110', 'R2', 1], ['MATH101H', 'R2', 2], ['HIST140', 'R1', 0], ['MATH101H', 'R1', 0],
['CHEM120', 'R2', 0], ['PHYS110', 'R1', 0]]],
{'missing': [], 'unknown': ['CHEM120'], 'conflict': ['MATH101H', 'PHYS110']}),
('normal control 8',
[['CHEM120', 'MATH101', 'ECON150', 'MATH101H', 'BIO130', 'PHYS110'],
[['HIST140', 'R2', 2], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 0]]],
{'missing': ['BIO130', 'ECON150', 'MATH101', 'MATH101H', 'PHYS110'],
'unknown': ['HIST140'],
'conflict': ['CHEM120']})],
[('regression: split conflict 1',
[['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 variant: split conflict 2',
[['ECON150', 'HIST140', 'CHEM120'],
[['MATH101H', 'R1', 0], ['MATH101', 'R1', 0], ['PHYS110', 'R2', 1], ['BIO130', 'R2', 2],
['ECON150', 'R2', 2], ['MATH101', 'R1', 0]]],
{'missing': ['CHEM120', 'HIST140'],
'unknown': ['BIO130', 'MATH101', 'MATH101H', 'PHYS110'],
'conflict': []}),
('partial repair guard 3',
[['MATH101H', 'ECON150'],
[['HIST140', 'R2', 2], ['MATH101H', 'R2', 0], ['MATH101', 'R2', 1], ['MATH101H', 'R1', 1],
['MATH101H', 'R1', 0], ['MATH101', 'R1', 1]]],
{'missing': ['ECON150'], 'unknown': ['HIST140', 'MATH101'], 'conflict': ['MATH101H']}),
('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',
[['PHYS110', 'MATH101H'],
[['PHYS110', 'R2', 1], ['PHYS110', 'R2', 1], ['ECON150', 'R2', 1], ['CHEM120', 'R1', 2]]],
{'missing': ['MATH101H'], 'unknown': ['CHEM120', 'ECON150'], 'conflict': []}),
('normal control 7',
[['HIST140', 'ECON150'],
[['HIST140', 'R2', 0], ['ECON150', 'R1', 1], ['MATH101H', 'R2', 2], ['BIO130', 'R2', 0],
['MATH101H', 'R2', 2]]],
{'missing': [], 'unknown': ['BIO130', 'MATH101H'], 'conflict': []}),
('normal control 8',
[['ECON150', 'PHYS110', 'BIO130'], [['CHEM120', 'R1', 1], ['PHYS110', 'R1', 0], ['MATH101H', 'R2', 2]]],
{'missing': ['BIO130', 'ECON150'], 'unknown': ['CHEM120', 'MATH101H'], 'conflict': []})],
[('regression: split conflict 1',
[['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': []}),
('regression variant: split conflict 2',
[['HIST140', 'CHEM120', 'MATH101H', 'BIO130', 'MATH101'],
[['PHYS110', 'R1', 1], ['MATH101H', 'R2', 1], ['PHYS110', 'R2', 1], ['MATH101', 'R1', 0],
['HIST140', 'R1', 2], ['ECON150', 'R2', 1], ['BIO130', 'R2', 1]]],
{'missing': ['CHEM120'], 'unknown': ['ECON150', 'PHYS110'], 'conflict': []}),
('partial repair guard 3',
[['HIST140', 'PHYS110', 'MATH101H', 'MATH101', 'BIO130', 'CHEM120'],
[['BIO130', 'R2', 1], ['MATH101H', 'R1', 2], ['MATH101H', 'R2', 0]]],
{'missing': ['CHEM120', 'HIST140', 'MATH101', 'PHYS110'], 'unknown': [], 'conflict': ['MATH101H']}),
('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',
[['CHEM120', 'PHYS110', 'HIST140', 'BIO130'],
[['BIO130', 'R2', 0], ['MATH101', 'R2', 1], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1],
['MATH101H', 'R2', 1], ['ECON150', 'R1', 2], ['CHEM120', 'R2', 0]]],
{'missing': ['HIST140', 'PHYS110'],
'unknown': ['ECON150', 'MATH101', 'MATH101H'],
'conflict': ['BIO130', 'CHEM120']}),
('normal control 7',
[['CHEM120', 'MATH101', 'BIO130'],
[['CHEM120', 'R1', 2], ['MATH101', 'R2', 1], ['CHEM120', 'R1', 1], ['ECON150', 'R1', 0],
['ECON150', 'R1', 1]]],
{'missing': ['BIO130'], 'unknown': ['ECON150'], 'conflict': ['CHEM120', 'ECON150']}),
('normal control 8',
[['MATH101', 'HIST140', 'PHYS110', 'BIO130', 'CHEM120', 'MATH101H'],
[['CHEM120', 'R1', 1], ['MATH101', 'R1', 0], ['CHEM120', 'R2', 1], ['MATH101H', 'R2', 2],
['PHYS110', 'R1', 0], ['HIST140', 'R1', 2]]],
{'missing': ['BIO130'], 'unknown': [], 'conflict': []})],
[('regression: split conflict 1',
[['BIO130', 'CHEM120', 'MATH101', 'HIST140'],
[['PHYS110', 'R1', 1], ['MATH101', 'R2', 0], ['PHYS110', 'R1', 1], ['ECON150', 'R2', 1],
['MATH101', 'R2', 0]]],
{'missing': ['BIO130', 'CHEM120', 'HIST140'], 'unknown': ['ECON150', 'PHYS110'], 'conflict': []}),
('regression variant: split conflict 2',
[['CHEM120', 'PHYS110', 'ECON150', 'HIST140', 'MATH101H'],
[['PHYS110', 'R2', 2], ['HIST140', 'R2', 1], ['ECON150', 'R1', 1], ['MATH101', 'R1', 0],
['HIST140', 'R2', 1]]],
{'missing': ['CHEM120', 'MATH101H'], 'unknown': ['MATH101'], 'conflict': []}),
('partial repair guard 3',
[['HIST140', 'PHYS110', 'MATH101', 'BIO130', 'MATH101H', 'ECON150'],
[['MATH101', 'R2', 2], ['BIO130', 'R2', 1], ['MATH101', 'R2', 0], ['HIST140', 'R1', 0],
['BIO130', 'R2', 2]]],
{'missing': ['ECON150', 'MATH101H', 'PHYS110'], 'unknown': [], 'conflict': ['BIO130', 'MATH101']}),
('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',
[['PHYS110', 'HIST140'], [['CHEM120', 'R1', 2], ['PHYS110', 'R1', 2], ['MATH101', 'R2', 0]]],
{'missing': ['HIST140'], 'unknown': ['CHEM120', 'MATH101'], 'conflict': []}),
('normal control 7',
[['ECON150', 'MATH101', 'MATH101H'], [['PHYS110', 'R1', 1], ['CHEM120', 'R2', 1], ['BIO130', 'R1', 0]]],
{'missing': ['ECON150', 'MATH101', 'MATH101H'],
'unknown': ['BIO130', 'CHEM120', 'PHYS110'],
'conflict': []}),
('normal control 8',
[['HIST140', 'ECON150'], [['HIST140', 'R1', 1], ['PHYS110', 'R2', 0], ['MATH101', 'R2', 1]]],
{'missing': ['ECON150'], 'unknown': ['MATH101', '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: split conflict 1 | {'conflict': ['A'], 'missing': ['B'], 'unknown': []} | {'conflict': [], 'missing': ['B'], 'unknown': []} | Failed |
| regression variant: split conflict 2 | {'conflict': ['HIST140', 'MATH101'], 'missing': ['MATH101H', 'PHYS110'], 'unknown': ['BIO130', 'HIST140']} | {'conflict': ['MATH101'], 'missing': ['MATH101H', 'PHYS110'], 'unknown': ['BIO130', 'HIST140']} | Failed |
| partial repair guard 3 | {'conflict': ['HIST140'], 'missing': ['CHEM120', 'ECON150'], 'unknown': []} | {'conflict': ['HIST140'], 'missing': ['CHEM120', 'ECON150'], 'unknown': []} | Passed |
| boundary control 4 | {'conflict': ['A'], 'missing': [], 'unknown': ['C']} | {'conflict': ['A'], 'missing': [], 'unknown': ['C']} | Passed |
| normal control 5 | {'conflict': ['CHEM120'], 'missing': ['ECON150'], 'unknown': ['MATH101H']} | {'conflict': ['CHEM120'], 'missing': ['ECON150'], 'unknown': ['MATH101H']} | Passed |
| normal control 6 | {'conflict': [], 'missing': ['MATH101H', 'PHYS110'], 'unknown': []} | {'conflict': [], 'missing': ['MATH101H', 'PHYS110'], 'unknown': []} | Passed |
| normal control 7 | {'conflict': ['HIST140', 'PHYS110'], 'missing': ['CHEM120', 'MATH101', 'MATH101H'], 'unknown': ['ECON150']} | {'conflict': ['HIST140', 'PHYS110'], 'missing': ['CHEM120', 'MATH101', 'MATH101H'], 'unknown': ['ECON150']} | Passed |
| normal control 8 | {'conflict': [], 'missing': ['ECON150', 'MATH101'], 'unknown': ['PHYS110']} | {'conflict': [], 'missing': ['ECON150', 'MATH101'], 'unknown': ['PHYS110']} | Passed |
SHA-256 / cff1f32270d97ffa90eb32d092350489d987b514dbd3905a9e7a560ba49a7b9b
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]) > 2)}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: split conflict 1', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('regression variant: split conflict 2',
[['ECON150', 'PHYS110', 'MATH101H', 'MATH101', 'CHEM120'],
[['ECON150', 'R2', 2], ['BIO130', 'R1', 1], ['MATH101', 'R2', 2], ['MATH101', 'R2', 1],
['CHEM120', 'R2', 0], ['HIST140', 'R1', 2], ['HIST140', 'R2', 2]]],
{'missing': ['MATH101H', 'PHYS110'], 'unknown': ['BIO130', 'HIST140'], 'conflict': ['MATH101']}),
('partial repair guard 3',
[['CHEM120', 'HIST140', 'ECON150', 'BIO130', 'MATH101H', 'MATH101'],
[['BIO130', 'R2', 2], ['MATH101H', 'R1', 1], ['MATH101', 'R1', 1], ['HIST140', 'R1', 0],
['HIST140', 'R1', 2]]],
{'missing': ['CHEM120', 'ECON150'], 'unknown': [], 'conflict': ['HIST140']}),
('boundary control 4', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('normal control 5',
[['PHYS110', 'BIO130', 'MATH101', 'ECON150', 'CHEM120'],
[['MATH101', 'R1', 2], ['PHYS110', 'R2', 2], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1],
['CHEM120', 'R2', 2], ['MATH101H', 'R1', 2], ['CHEM120', 'R2', 2]]],
{'missing': ['ECON150'], 'unknown': ['MATH101H'], 'conflict': ['CHEM120']}),
('normal control 6',
[['MATH101', 'ECON150', 'PHYS110', 'MATH101H'], [['ECON150', 'R1', 0], ['MATH101', 'R1', 0]]],
{'missing': ['MATH101H', 'PHYS110'], 'unknown': [], 'conflict': []}),
('normal control 7',
[['CHEM120', 'PHYS110', 'MATH101H', 'MATH101', 'HIST140', 'BIO130'],
[['BIO130', 'R2', 2], ['HIST140', 'R1', 0], ['ECON150', 'R2', 2], ['PHYS110', 'R1', 2],
['PHYS110', 'R2', 1], ['HIST140', 'R2', 1]]],
{'missing': ['CHEM120', 'MATH101', 'MATH101H'],
'unknown': ['ECON150'],
'conflict': ['HIST140', 'PHYS110']}),
('normal control 8',
[['HIST140', 'ECON150', 'MATH101', 'MATH101H'],
[['HIST140', 'R2', 0], ['MATH101H', 'R2', 2], ['PHYS110', 'R1', 1]]],
{'missing': ['ECON150', 'MATH101'], 'unknown': ['PHYS110'], 'conflict': []})],
[('regression: split conflict 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: split conflict 2',
[['BIO130', 'MATH101', 'ECON150', 'MATH101H'],
[['MATH101', 'R1', 2], ['MATH101', 'R1', 2], ['CHEM120', 'R1', 2]]],
{'missing': ['BIO130', 'ECON150', 'MATH101H'], 'unknown': ['CHEM120'], 'conflict': []}),
('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', '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',
[['HIST140', 'ECON150'],
[['HIST140', 'R2', 0], ['ECON150', 'R1', 1], ['MATH101H', 'R2', 2], ['BIO130', 'R2', 0],
['MATH101H', 'R2', 2]]],
{'missing': [], 'unknown': ['BIO130', 'MATH101H'], 'conflict': []}),
('normal control 7',
[['MATH101H', 'PHYS110', 'HIST140'],
[['PHYS110', 'R2', 1], ['MATH101H', 'R2', 2], ['HIST140', 'R1', 0], ['MATH101H', 'R1', 0],
['CHEM120', 'R2', 0], ['PHYS110', 'R1', 0]]],
{'missing': [], 'unknown': ['CHEM120'], 'conflict': ['MATH101H', 'PHYS110']}),
('normal control 8',
[['CHEM120', 'MATH101', 'ECON150', 'MATH101H', 'BIO130', 'PHYS110'],
[['HIST140', 'R2', 2], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 0]]],
{'missing': ['BIO130', 'ECON150', 'MATH101', 'MATH101H', 'PHYS110'],
'unknown': ['HIST140'],
'conflict': ['CHEM120']})],
[('regression: split conflict 1',
[['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 variant: split conflict 2',
[['ECON150', 'HIST140', 'CHEM120'],
[['MATH101H', 'R1', 0], ['MATH101', 'R1', 0], ['PHYS110', 'R2', 1], ['BIO130', 'R2', 2],
['ECON150', 'R2', 2], ['MATH101', 'R1', 0]]],
{'missing': ['CHEM120', 'HIST140'],
'unknown': ['BIO130', 'MATH101', 'MATH101H', 'PHYS110'],
'conflict': []}),
('partial repair guard 3',
[['MATH101H', 'ECON150'],
[['HIST140', 'R2', 2], ['MATH101H', 'R2', 0], ['MATH101', 'R2', 1], ['MATH101H', 'R1', 1],
['MATH101H', 'R1', 0], ['MATH101', 'R1', 1]]],
{'missing': ['ECON150'], 'unknown': ['HIST140', 'MATH101'], 'conflict': ['MATH101H']}),
('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',
[['PHYS110', 'MATH101H'],
[['PHYS110', 'R2', 1], ['PHYS110', 'R2', 1], ['ECON150', 'R2', 1], ['CHEM120', 'R1', 2]]],
{'missing': ['MATH101H'], 'unknown': ['CHEM120', 'ECON150'], 'conflict': []}),
('normal control 7',
[['HIST140', 'ECON150'],
[['HIST140', 'R2', 0], ['ECON150', 'R1', 1], ['MATH101H', 'R2', 2], ['BIO130', 'R2', 0],
['MATH101H', 'R2', 2]]],
{'missing': [], 'unknown': ['BIO130', 'MATH101H'], 'conflict': []}),
('normal control 8',
[['ECON150', 'PHYS110', 'BIO130'], [['CHEM120', 'R1', 1], ['PHYS110', 'R1', 0], ['MATH101H', 'R2', 2]]],
{'missing': ['BIO130', 'ECON150'], 'unknown': ['CHEM120', 'MATH101H'], 'conflict': []})],
[('regression: split conflict 1',
[['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': []}),
('regression variant: split conflict 2',
[['HIST140', 'CHEM120', 'MATH101H', 'BIO130', 'MATH101'],
[['PHYS110', 'R1', 1], ['MATH101H', 'R2', 1], ['PHYS110', 'R2', 1], ['MATH101', 'R1', 0],
['HIST140', 'R1', 2], ['ECON150', 'R2', 1], ['BIO130', 'R2', 1]]],
{'missing': ['CHEM120'], 'unknown': ['ECON150', 'PHYS110'], 'conflict': []}),
('partial repair guard 3',
[['HIST140', 'PHYS110', 'MATH101H', 'MATH101', 'BIO130', 'CHEM120'],
[['BIO130', 'R2', 1], ['MATH101H', 'R1', 2], ['MATH101H', 'R2', 0]]],
{'missing': ['CHEM120', 'HIST140', 'MATH101', 'PHYS110'], 'unknown': [], 'conflict': ['MATH101H']}),
('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',
[['CHEM120', 'PHYS110', 'HIST140', 'BIO130'],
[['BIO130', 'R2', 0], ['MATH101', 'R2', 1], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1],
['MATH101H', 'R2', 1], ['ECON150', 'R1', 2], ['CHEM120', 'R2', 0]]],
{'missing': ['HIST140', 'PHYS110'],
'unknown': ['ECON150', 'MATH101', 'MATH101H'],
'conflict': ['BIO130', 'CHEM120']}),
('normal control 7',
[['CHEM120', 'MATH101', 'BIO130'],
[['CHEM120', 'R1', 2], ['MATH101', 'R2', 1], ['CHEM120', 'R1', 1], ['ECON150', 'R1', 0],
['ECON150', 'R1', 1]]],
{'missing': ['BIO130'], 'unknown': ['ECON150'], 'conflict': ['CHEM120', 'ECON150']}),
('normal control 8',
[['MATH101', 'HIST140', 'PHYS110', 'BIO130', 'CHEM120', 'MATH101H'],
[['CHEM120', 'R1', 1], ['MATH101', 'R1', 0], ['CHEM120', 'R2', 1], ['MATH101H', 'R2', 2],
['PHYS110', 'R1', 0], ['HIST140', 'R1', 2]]],
{'missing': ['BIO130'], 'unknown': [], 'conflict': []})],
[('regression: split conflict 1',
[['BIO130', 'CHEM120', 'MATH101', 'HIST140'],
[['PHYS110', 'R1', 1], ['MATH101', 'R2', 0], ['PHYS110', 'R1', 1], ['ECON150', 'R2', 1],
['MATH101', 'R2', 0]]],
{'missing': ['BIO130', 'CHEM120', 'HIST140'], 'unknown': ['ECON150', 'PHYS110'], 'conflict': []}),
('regression variant: split conflict 2',
[['CHEM120', 'PHYS110', 'ECON150', 'HIST140', 'MATH101H'],
[['PHYS110', 'R2', 2], ['HIST140', 'R2', 1], ['ECON150', 'R1', 1], ['MATH101', 'R1', 0],
['HIST140', 'R2', 1]]],
{'missing': ['CHEM120', 'MATH101H'], 'unknown': ['MATH101'], 'conflict': []}),
('partial repair guard 3',
[['HIST140', 'PHYS110', 'MATH101', 'BIO130', 'MATH101H', 'ECON150'],
[['MATH101', 'R2', 2], ['BIO130', 'R2', 1], ['MATH101', 'R2', 0], ['HIST140', 'R1', 0],
['BIO130', 'R2', 2]]],
{'missing': ['ECON150', 'MATH101H', 'PHYS110'], 'unknown': [], 'conflict': ['BIO130', 'MATH101']}),
('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',
[['PHYS110', 'HIST140'], [['CHEM120', 'R1', 2], ['PHYS110', 'R1', 2], ['MATH101', 'R2', 0]]],
{'missing': ['HIST140'], 'unknown': ['CHEM120', 'MATH101'], 'conflict': []}),
('normal control 7',
[['ECON150', 'MATH101', 'MATH101H'], [['PHYS110', 'R1', 1], ['CHEM120', 'R2', 1], ['BIO130', 'R1', 0]]],
{'missing': ['ECON150', 'MATH101', 'MATH101H'],
'unknown': ['BIO130', 'CHEM120', 'PHYS110'],
'conflict': []}),
('normal control 8',
[['HIST140', 'ECON150'], [['HIST140', 'R1', 1], ['PHYS110', 'R2', 0], ['MATH101', 'R2', 1]]],
{'missing': ['ECON150'], 'unknown': ['MATH101', '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: split conflict 1 | {'conflict': [], 'missing': ['B'], 'unknown': []} | {'conflict': [], 'missing': ['B'], 'unknown': []} | Passed |
| regression variant: split conflict 2 | {'conflict': [], 'missing': ['MATH101H', 'PHYS110'], 'unknown': ['BIO130', 'HIST140']} | {'conflict': ['MATH101'], 'missing': ['MATH101H', 'PHYS110'], 'unknown': ['BIO130', 'HIST140']} | Failed |
| partial repair guard 3 | {'conflict': [], 'missing': ['CHEM120', 'ECON150'], 'unknown': []} | {'conflict': ['HIST140'], 'missing': ['CHEM120', 'ECON150'], 'unknown': []} | Failed |
| boundary control 4 | {'conflict': [], 'missing': [], 'unknown': ['C']} | {'conflict': ['A'], 'missing': [], 'unknown': ['C']} | Failed |
| normal control 5 | {'conflict': [], 'missing': ['ECON150'], 'unknown': ['MATH101H']} | {'conflict': ['CHEM120'], 'missing': ['ECON150'], 'unknown': ['MATH101H']} | Failed |
| normal control 6 | {'conflict': [], 'missing': ['MATH101H', 'PHYS110'], 'unknown': []} | {'conflict': [], 'missing': ['MATH101H', 'PHYS110'], 'unknown': []} | Passed |
| normal control 7 | {'conflict': [], 'missing': ['CHEM120', 'MATH101', 'MATH101H'], 'unknown': ['ECON150']} | {'conflict': ['HIST140', 'PHYS110'], 'missing': ['CHEM120', 'MATH101', 'MATH101H'], 'unknown': ['ECON150']} | Failed |
| normal control 8 | {'conflict': [], 'missing': ['ECON150', 'MATH101'], 'unknown': ['PHYS110']} | {'conflict': [], 'missing': ['ECON150', 'MATH101'], 'unknown': ['PHYS110']} | Passed |
SHA-256 / 76235baf01969e0355cc1f7dc331dbe042d0cfb2f185e93bf8e2b2fb090cb932
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: split conflict 1', [['A', 'B'], [['A', 'R1', 0], ['A', 'R2', 0]]],
{'missing': ['B'], 'unknown': [], 'conflict': []}),
('regression variant: split conflict 2',
[['ECON150', 'PHYS110', 'MATH101H', 'MATH101', 'CHEM120'],
[['ECON150', 'R2', 2], ['BIO130', 'R1', 1], ['MATH101', 'R2', 2], ['MATH101', 'R2', 1],
['CHEM120', 'R2', 0], ['HIST140', 'R1', 2], ['HIST140', 'R2', 2]]],
{'missing': ['MATH101H', 'PHYS110'], 'unknown': ['BIO130', 'HIST140'], 'conflict': ['MATH101']}),
('partial repair guard 3',
[['CHEM120', 'HIST140', 'ECON150', 'BIO130', 'MATH101H', 'MATH101'],
[['BIO130', 'R2', 2], ['MATH101H', 'R1', 1], ['MATH101', 'R1', 1], ['HIST140', 'R1', 0],
['HIST140', 'R1', 2]]],
{'missing': ['CHEM120', 'ECON150'], 'unknown': [], 'conflict': ['HIST140']}),
('boundary control 4', [['A'], [['A', 'R1', 0], ['A', 'R2', 1], ['C', 'R1', 0]]],
{'missing': [], 'unknown': ['C'], 'conflict': ['A']}),
('normal control 5',
[['PHYS110', 'BIO130', 'MATH101', 'ECON150', 'CHEM120'],
[['MATH101', 'R1', 2], ['PHYS110', 'R2', 2], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1],
['CHEM120', 'R2', 2], ['MATH101H', 'R1', 2], ['CHEM120', 'R2', 2]]],
{'missing': ['ECON150'], 'unknown': ['MATH101H'], 'conflict': ['CHEM120']}),
('normal control 6',
[['MATH101', 'ECON150', 'PHYS110', 'MATH101H'], [['ECON150', 'R1', 0], ['MATH101', 'R1', 0]]],
{'missing': ['MATH101H', 'PHYS110'], 'unknown': [], 'conflict': []}),
('normal control 7',
[['CHEM120', 'PHYS110', 'MATH101H', 'MATH101', 'HIST140', 'BIO130'],
[['BIO130', 'R2', 2], ['HIST140', 'R1', 0], ['ECON150', 'R2', 2], ['PHYS110', 'R1', 2],
['PHYS110', 'R2', 1], ['HIST140', 'R2', 1]]],
{'missing': ['CHEM120', 'MATH101', 'MATH101H'],
'unknown': ['ECON150'],
'conflict': ['HIST140', 'PHYS110']}),
('normal control 8',
[['HIST140', 'ECON150', 'MATH101', 'MATH101H'],
[['HIST140', 'R2', 0], ['MATH101H', 'R2', 2], ['PHYS110', 'R1', 1]]],
{'missing': ['ECON150', 'MATH101'], 'unknown': ['PHYS110'], 'conflict': []})],
[('regression: split conflict 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: split conflict 2',
[['BIO130', 'MATH101', 'ECON150', 'MATH101H'],
[['MATH101', 'R1', 2], ['MATH101', 'R1', 2], ['CHEM120', 'R1', 2]]],
{'missing': ['BIO130', 'ECON150', 'MATH101H'], 'unknown': ['CHEM120'], 'conflict': []}),
('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', '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',
[['HIST140', 'ECON150'],
[['HIST140', 'R2', 0], ['ECON150', 'R1', 1], ['MATH101H', 'R2', 2], ['BIO130', 'R2', 0],
['MATH101H', 'R2', 2]]],
{'missing': [], 'unknown': ['BIO130', 'MATH101H'], 'conflict': []}),
('normal control 7',
[['MATH101H', 'PHYS110', 'HIST140'],
[['PHYS110', 'R2', 1], ['MATH101H', 'R2', 2], ['HIST140', 'R1', 0], ['MATH101H', 'R1', 0],
['CHEM120', 'R2', 0], ['PHYS110', 'R1', 0]]],
{'missing': [], 'unknown': ['CHEM120'], 'conflict': ['MATH101H', 'PHYS110']}),
('normal control 8',
[['CHEM120', 'MATH101', 'ECON150', 'MATH101H', 'BIO130', 'PHYS110'],
[['HIST140', 'R2', 2], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 0]]],
{'missing': ['BIO130', 'ECON150', 'MATH101', 'MATH101H', 'PHYS110'],
'unknown': ['HIST140'],
'conflict': ['CHEM120']})],
[('regression: split conflict 1',
[['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 variant: split conflict 2',
[['ECON150', 'HIST140', 'CHEM120'],
[['MATH101H', 'R1', 0], ['MATH101', 'R1', 0], ['PHYS110', 'R2', 1], ['BIO130', 'R2', 2],
['ECON150', 'R2', 2], ['MATH101', 'R1', 0]]],
{'missing': ['CHEM120', 'HIST140'],
'unknown': ['BIO130', 'MATH101', 'MATH101H', 'PHYS110'],
'conflict': []}),
('partial repair guard 3',
[['MATH101H', 'ECON150'],
[['HIST140', 'R2', 2], ['MATH101H', 'R2', 0], ['MATH101', 'R2', 1], ['MATH101H', 'R1', 1],
['MATH101H', 'R1', 0], ['MATH101', 'R1', 1]]],
{'missing': ['ECON150'], 'unknown': ['HIST140', 'MATH101'], 'conflict': ['MATH101H']}),
('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',
[['PHYS110', 'MATH101H'],
[['PHYS110', 'R2', 1], ['PHYS110', 'R2', 1], ['ECON150', 'R2', 1], ['CHEM120', 'R1', 2]]],
{'missing': ['MATH101H'], 'unknown': ['CHEM120', 'ECON150'], 'conflict': []}),
('normal control 7',
[['HIST140', 'ECON150'],
[['HIST140', 'R2', 0], ['ECON150', 'R1', 1], ['MATH101H', 'R2', 2], ['BIO130', 'R2', 0],
['MATH101H', 'R2', 2]]],
{'missing': [], 'unknown': ['BIO130', 'MATH101H'], 'conflict': []}),
('normal control 8',
[['ECON150', 'PHYS110', 'BIO130'], [['CHEM120', 'R1', 1], ['PHYS110', 'R1', 0], ['MATH101H', 'R2', 2]]],
{'missing': ['BIO130', 'ECON150'], 'unknown': ['CHEM120', 'MATH101H'], 'conflict': []})],
[('regression: split conflict 1',
[['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': []}),
('regression variant: split conflict 2',
[['HIST140', 'CHEM120', 'MATH101H', 'BIO130', 'MATH101'],
[['PHYS110', 'R1', 1], ['MATH101H', 'R2', 1], ['PHYS110', 'R2', 1], ['MATH101', 'R1', 0],
['HIST140', 'R1', 2], ['ECON150', 'R2', 1], ['BIO130', 'R2', 1]]],
{'missing': ['CHEM120'], 'unknown': ['ECON150', 'PHYS110'], 'conflict': []}),
('partial repair guard 3',
[['HIST140', 'PHYS110', 'MATH101H', 'MATH101', 'BIO130', 'CHEM120'],
[['BIO130', 'R2', 1], ['MATH101H', 'R1', 2], ['MATH101H', 'R2', 0]]],
{'missing': ['CHEM120', 'HIST140', 'MATH101', 'PHYS110'], 'unknown': [], 'conflict': ['MATH101H']}),
('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',
[['CHEM120', 'PHYS110', 'HIST140', 'BIO130'],
[['BIO130', 'R2', 0], ['MATH101', 'R2', 1], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1],
['MATH101H', 'R2', 1], ['ECON150', 'R1', 2], ['CHEM120', 'R2', 0]]],
{'missing': ['HIST140', 'PHYS110'],
'unknown': ['ECON150', 'MATH101', 'MATH101H'],
'conflict': ['BIO130', 'CHEM120']}),
('normal control 7',
[['CHEM120', 'MATH101', 'BIO130'],
[['CHEM120', 'R1', 2], ['MATH101', 'R2', 1], ['CHEM120', 'R1', 1], ['ECON150', 'R1', 0],
['ECON150', 'R1', 1]]],
{'missing': ['BIO130'], 'unknown': ['ECON150'], 'conflict': ['CHEM120', 'ECON150']}),
('normal control 8',
[['MATH101', 'HIST140', 'PHYS110', 'BIO130', 'CHEM120', 'MATH101H'],
[['CHEM120', 'R1', 1], ['MATH101', 'R1', 0], ['CHEM120', 'R2', 1], ['MATH101H', 'R2', 2],
['PHYS110', 'R1', 0], ['HIST140', 'R1', 2]]],
{'missing': ['BIO130'], 'unknown': [], 'conflict': []})],
[('regression: split conflict 1',
[['BIO130', 'CHEM120', 'MATH101', 'HIST140'],
[['PHYS110', 'R1', 1], ['MATH101', 'R2', 0], ['PHYS110', 'R1', 1], ['ECON150', 'R2', 1],
['MATH101', 'R2', 0]]],
{'missing': ['BIO130', 'CHEM120', 'HIST140'], 'unknown': ['ECON150', 'PHYS110'], 'conflict': []}),
('regression variant: split conflict 2',
[['CHEM120', 'PHYS110', 'ECON150', 'HIST140', 'MATH101H'],
[['PHYS110', 'R2', 2], ['HIST140', 'R2', 1], ['ECON150', 'R1', 1], ['MATH101', 'R1', 0],
['HIST140', 'R2', 1]]],
{'missing': ['CHEM120', 'MATH101H'], 'unknown': ['MATH101'], 'conflict': []}),
('partial repair guard 3',
[['HIST140', 'PHYS110', 'MATH101', 'BIO130', 'MATH101H', 'ECON150'],
[['MATH101', 'R2', 2], ['BIO130', 'R2', 1], ['MATH101', 'R2', 0], ['HIST140', 'R1', 0],
['BIO130', 'R2', 2]]],
{'missing': ['ECON150', 'MATH101H', 'PHYS110'], 'unknown': [], 'conflict': ['BIO130', 'MATH101']}),
('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',
[['PHYS110', 'HIST140'], [['CHEM120', 'R1', 2], ['PHYS110', 'R1', 2], ['MATH101', 'R2', 0]]],
{'missing': ['HIST140'], 'unknown': ['CHEM120', 'MATH101'], 'conflict': []}),
('normal control 7',
[['ECON150', 'MATH101', 'MATH101H'], [['PHYS110', 'R1', 1], ['CHEM120', 'R2', 1], ['BIO130', 'R1', 0]]],
{'missing': ['ECON150', 'MATH101', 'MATH101H'],
'unknown': ['BIO130', 'CHEM120', 'PHYS110'],
'conflict': []}),
('normal control 8',
[['HIST140', 'ECON150'], [['HIST140', 'R1', 1], ['PHYS110', 'R2', 0], ['MATH101', 'R2', 1]]],
{'missing': ['ECON150'], 'unknown': ['MATH101', '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: split conflict 1 | {'conflict': [], 'missing': ['B'], 'unknown': []} | {'conflict': [], 'missing': ['B'], 'unknown': []} | Passed |
| regression variant: split conflict 2 | {'conflict': ['MATH101'], 'missing': ['MATH101H', 'PHYS110'], 'unknown': ['BIO130', 'HIST140']} | {'conflict': ['MATH101'], 'missing': ['MATH101H', 'PHYS110'], 'unknown': ['BIO130', 'HIST140']} | Passed |
| partial repair guard 3 | {'conflict': ['HIST140'], 'missing': ['CHEM120', 'ECON150'], 'unknown': []} | {'conflict': ['HIST140'], 'missing': ['CHEM120', 'ECON150'], 'unknown': []} | Passed |
| boundary control 4 | {'conflict': ['A'], 'missing': [], 'unknown': ['C']} | {'conflict': ['A'], 'missing': [], 'unknown': ['C']} | Passed |
| normal control 5 | {'conflict': ['CHEM120'], 'missing': ['ECON150'], 'unknown': ['MATH101H']} | {'conflict': ['CHEM120'], 'missing': ['ECON150'], 'unknown': ['MATH101H']} | Passed |
| normal control 6 | {'conflict': [], 'missing': ['MATH101H', 'PHYS110'], 'unknown': []} | {'conflict': [], 'missing': ['MATH101H', 'PHYS110'], 'unknown': []} | Passed |
| normal control 7 | {'conflict': ['HIST140', 'PHYS110'], 'missing': ['CHEM120', 'MATH101', 'MATH101H'], 'unknown': ['ECON150']} | {'conflict': ['HIST140', 'PHYS110'], 'missing': ['CHEM120', 'MATH101', 'MATH101H'], 'unknown': ['ECON150']} | Passed |
| normal control 8 | {'conflict': [], 'missing': ['ECON150', 'MATH101'], 'unknown': ['PHYS110']} | {'conflict': [], 'missing': ['ECON150', 'MATH101'], 'unknown': ['PHYS110']} | Passed |
SHA-256 / a703ef0ecc34330fb1a781abb32c1c564f9ed42201bd005fa72e1770f0117d57
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.924117+00:00.
Case digest / d667fbd7c54cf9f6e3e7c51910bafca8e3c229e99f20e75bc2378d7586e24430