FA-94686 / Exam timetabling constraints / Open access
Conflict pairs counted in both orders and with themselves · case 01
The matrix contains reversed and self pairs.
ROOT CAUSE
The inner loop starts at zero.
VERIFIED REPAIR
Iterate j from i + 1.
Unsuccessful approach: Starting at i still adds self pairs.
Case contract
enrol rows [student, exam] (may repeat). For every unordered pair of distinct exams (a < b) count the students enrolled in both. Return [a, b, count] rows sorted, omitting zero counts.
Why this case matters
The conflict matrix is the input to every exam timetabling algorithm; count errors silently change weights.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(enrol):
by = {}
for st, ex in enrol:
by.setdefault(st, set()).add(ex)
cnt = {}
for st in by:
exs = sorted(by[st])
for i in range(len(exs)):
for j in range(len(exs)):
k = (exs[i], exs[j])
cnt[k] = cnt.get(k, 0) + 1
return [[a, b, n] for (a, b), n in sorted(cnt.items())]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: pair loop bounds 1', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
('regression variant: pair loop bounds 2', [[['s5', 'BIO130'], ['s5', 'HIST140']]],
[['BIO130', 'HIST140', 1]]),
('partial repair guard 3',
[[['s2', 'BIO130'], ['s1', 'MATH101H'], ['s1', 'HIST140'], ['s1', 'CHEM120'], ['s1', 'PHYS110'],
['s3', 'ECON150']]],
[['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1],
['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
('boundary control 4', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
[['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
('normal control 5', [[['s2', 'BIO130'], ['s2', 'CHEM120'], ['s2', 'MATH101']]],
[['BIO130', 'CHEM120', 1], ['BIO130', 'MATH101', 1], ['CHEM120', 'MATH101', 1]]),
('normal control 6',
[[['s4', 'MATH101'], ['s1', 'PHYS110'], ['s2', 'BIO130'], ['s4', 'PHYS110'], ['s1', 'CHEM120'],
['s2', 'PHYS110'], ['s4', 'ECON150'], ['s1', 'MATH101'], ['s3', 'MATH101H'], ['s4', 'MATH101H'],
['s4', 'MATH101H']]],
[['BIO130', 'PHYS110', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'MATH101', 1],
['ECON150', 'MATH101H', 1], ['ECON150', 'PHYS110', 1], ['MATH101', 'MATH101H', 1],
['MATH101', 'PHYS110', 2], ['MATH101H', 'PHYS110', 1]]),
('normal control 7',
[[['s1', 'MATH101H'], ['s4', 'MATH101'], ['s1', 'HIST140'], ['s4', 'CHEM120'], ['s2', 'MATH101'],
['s2', 'BIO130']]],
[['BIO130', 'MATH101', 1], ['CHEM120', 'MATH101', 1], ['HIST140', 'MATH101H', 1]]),
('normal control 8',
[[['s4', 'BIO130'], ['s3', 'ECON150'], ['s3', 'CHEM120'], ['s3', 'BIO130'], ['s4', 'HIST140'],
['s3', 'PHYS110']]],
[['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'PHYS110', 1],
['CHEM120', 'ECON150', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'PHYS110', 1]])],
[('regression: pair loop bounds 1', [[['s1', 'A'], ['s1', 'A'], ['s1', 'B']]], [['A', 'B', 1]]),
('regression variant: pair loop bounds 2',
[[['s2', 'MATH101'], ['s3', 'CHEM120'], ['s5', 'MATH101H'], ['s5', 'ECON150'], ['s3', 'MATH101H'],
['s3', 'HIST140'], ['s2', 'PHYS110'], ['s3', 'MATH101']]],
[['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1],
['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1],
['MATH101', 'MATH101H', 1], ['MATH101', 'PHYS110', 1]]),
('partial repair guard 3', [[['s5', 'MATH101'], ['s5', 'HIST140']]], [['HIST140', 'MATH101', 1]]),
('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
[['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
('normal control 6',
[[['s1', 'PHYS110'], ['s3', 'PHYS110'], ['s3', 'MATH101'], ['s4', 'HIST140'], ['s5', 'CHEM120'],
['s5', 'PHYS110'], ['s1', 'BIO130']]],
[['BIO130', 'PHYS110', 1], ['CHEM120', 'PHYS110', 1], ['MATH101', 'PHYS110', 1]]),
('normal control 7',
[[['s1', 'BIO130'], ['s4', 'BIO130'], ['s4', 'HIST140'], ['s4', 'MATH101H'], ['s1', 'MATH101H'],
['s1', 'HIST140'], ['s1', 'BIO130']]],
[['BIO130', 'HIST140', 2], ['BIO130', 'MATH101H', 2], ['HIST140', 'MATH101H', 2]]),
('normal control 8',
[[['s5', 'MATH101H'], ['s5', 'ECON150'], ['s3', 'MATH101H'], ['s1', 'HIST140'], ['s2', 'BIO130'],
['s3', 'HIST140'], ['s3', 'PHYS110'], ['s3', 'MATH101'], ['s3', 'MATH101H'], ['s5', 'BIO130']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'MATH101H', 1],
['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1],
['MATH101', 'MATH101H', 1], ['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]])],
[('regression: pair loop bounds 1', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
[['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
('regression variant: pair loop bounds 2',
[[['s1', 'BIO130'], ['s2', 'HIST140'], ['s2', 'ECON150'], ['s1', 'ECON150'], ['s1', 'MATH101'],
['s5', 'MATH101'], ['s5', 'BIO130'], ['s1', 'HIST140']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 2], ['ECON150', 'HIST140', 2],
['ECON150', 'MATH101', 1], ['HIST140', 'MATH101', 1]]),
('partial repair guard 3',
[[['s3', 'MATH101'], ['s3', 'MATH101H'], ['s1', 'CHEM120'], ['s3', 'ECON150'], ['s2', 'MATH101H'],
['s1', 'ECON150'], ['s2', 'ECON150']]],
[['CHEM120', 'ECON150', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 2],
['MATH101', 'MATH101H', 1]]),
('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
('normal control 5',
[[['s5', 'MATH101'], ['s1', 'CHEM120'], ['s3', 'PHYS110'], ['s3', 'MATH101H'], ['s4', 'PHYS110'],
['s3', 'CHEM120'], ['s5', 'PHYS110'], ['s3', 'BIO130'], ['s5', 'MATH101H'], ['s5', 'ECON150'],
['s4', 'PHYS110'], ['s2', 'ECON150']]],
[['BIO130', 'CHEM120', 1], ['BIO130', 'MATH101H', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'MATH101H', 1],
['CHEM120', 'PHYS110', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1],
['ECON150', 'PHYS110', 1], ['MATH101', 'MATH101H', 1], ['MATH101', 'PHYS110', 1],
['MATH101H', 'PHYS110', 2]]),
('normal control 6', [[['s5', 'PHYS110']]], []),
('normal control 7',
[[['s3', 'ECON150'], ['s2', 'CHEM120'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'BIO130'],
['s5', 'PHYS110'], ['s5', 'MATH101H'], ['s1', 'PHYS110'], ['s5', 'CHEM120'], ['s3', 'BIO130'],
['s4', 'MATH101H'], ['s4', 'PHYS110'], ['s3', 'HIST140']]],
[['BIO130', 'CHEM120', 2], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 2],
['BIO130', 'PHYS110', 2], ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1],
['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'HIST140', 1],
['MATH101H', 'PHYS110', 2]]),
('normal control 8',
[[['s4', 'CHEM120'], ['s3', 'BIO130'], ['s5', 'PHYS110'], ['s3', 'ECON150'], ['s5', 'MATH101'],
['s5', 'BIO130'], ['s4', 'MATH101'], ['s1', 'MATH101H'], ['s3', 'MATH101H'], ['s4', 'ECON150'],
['s1', 'BIO130'], ['s4', 'BIO130'], ['s1', 'CHEM120']]],
[['BIO130', 'CHEM120', 2], ['BIO130', 'ECON150', 2], ['BIO130', 'MATH101', 2], ['BIO130', 'MATH101H', 2],
['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'MATH101', 1],
['CHEM120', 'MATH101H', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1],
['MATH101', 'PHYS110', 1]])],
[('regression: pair loop bounds 1',
[[['s4', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'HIST140'], ['s1', 'ECON150'], ['s3', 'HIST140'],
['s3', 'MATH101'], ['s5', 'MATH101'], ['s2', 'MATH101H'], ['s3', 'PHYS110'], ['s4', 'HIST140'],
['s2', 'PHYS110'], ['s2', 'BIO130'], ['s3', 'ECON150'], ['s1', 'CHEM120']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1],
['CHEM120', 'HIST140', 1], ['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1],
['ECON150', 'MATH101H', 1], ['ECON150', 'PHYS110', 2], ['HIST140', 'MATH101', 2],
['HIST140', 'PHYS110', 1], ['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
('regression variant: pair loop bounds 2',
[[['s2', 'BIO130'], ['s5', 'MATH101'], ['s3', 'ECON150'], ['s5', 'PHYS110'], ['s3', 'BIO130'],
['s5', 'MATH101H'], ['s3', 'HIST140'], ['s5', 'BIO130']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1],
['BIO130', 'PHYS110', 1], ['ECON150', 'HIST140', 1], ['MATH101', 'MATH101H', 1],
['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
('partial repair guard 3',
[[['s5', 'HIST140'], ['s3', 'MATH101H'], ['s1', 'MATH101H'], ['s5', 'ECON150'], ['s3', 'HIST140'],
['s3', 'BIO130'], ['s3', 'ECON150'], ['s3', 'ECON150']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'HIST140', 2],
['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101H', 1]]),
('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
[['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
('normal control 6', [[['s1', 'CHEM120'], ['s1', 'PHYS110'], ['s1', 'MATH101']]],
[['CHEM120', 'MATH101', 1], ['CHEM120', 'PHYS110', 1], ['MATH101', 'PHYS110', 1]]),
('normal control 7',
[[['s3', 'MATH101H'], ['s2', 'PHYS110'], ['s2', 'ECON150'], ['s4', 'ECON150'], ['s2', 'MATH101H'],
['s2', 'BIO130'], ['s4', 'HIST140'], ['s4', 'MATH101H'], ['s3', 'PHYS110'], ['s3', 'BIO130']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 2], ['BIO130', 'PHYS110', 2], ['ECON150', 'HIST140', 1],
['ECON150', 'MATH101H', 2], ['ECON150', 'PHYS110', 1], ['HIST140', 'MATH101H', 1],
['MATH101H', 'PHYS110', 2]]),
('normal control 8', [[['s2', 'BIO130'], ['s2', 'HIST140'], ['s2', 'ECON150'], ['s2', 'CHEM120']]],
[['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['CHEM120', 'ECON150', 1],
['CHEM120', 'HIST140', 1], ['ECON150', 'HIST140', 1]])],
[('regression: pair loop bounds 1',
[[['s3', 'MATH101'], ['s1', 'BIO130'], ['s4', 'ECON150'], ['s1', 'ECON150'], ['s5', 'MATH101'],
['s4', 'CHEM120'], ['s3', 'CHEM120'], ['s5', 'BIO130']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'MATH101', 1], ['CHEM120', 'ECON150', 1],
['CHEM120', 'MATH101', 1]]),
('regression variant: pair loop bounds 2',
[[['s3', 'BIO130'], ['s3', 'HIST140'], ['s3', 'MATH101H'], ['s3', 'MATH101'], ['s3', 'HIST140']]],
[['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1], ['HIST140', 'MATH101', 1],
['HIST140', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]]),
('partial repair guard 3', [[['s1', 'HIST140'], ['s1', 'MATH101'], ['s1', 'CHEM120'], ['s1', 'CHEM120']]],
[['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['HIST140', 'MATH101', 1]]),
('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
[['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
('normal control 6', [[['s5', 'MATH101H'], ['s5', 'HIST140'], ['s5', 'MATH101'], ['s5', 'HIST140']]],
[['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]]),
('normal control 7',
[[['s1', 'PHYS110'], ['s4', 'PHYS110'], ['s3', 'ECON150'], ['s5', 'MATH101H'], ['s1', 'CHEM120'],
['s1', 'MATH101'], ['s4', 'BIO130'], ['s1', 'ECON150'], ['s2', 'MATH101H'], ['s4', 'MATH101H']]],
[['BIO130', 'MATH101H', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'MATH101', 1],
['CHEM120', 'PHYS110', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'PHYS110', 1],
['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
('normal control 8', [[['s2', 'CHEM120'], ['s2', 'BIO130'], ['s5', 'MATH101H'], ['s2', 'ECON150']]],
[['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['CHEM120', 'ECON150', 1]])]]
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: pair loop bounds 1 | [['A', 'A', 2], ['A', 'B', 2], ['B', 'A', 2], ['B', 'B', 2]] | [['A', 'B', 2]] | Failed |
| regression variant: pair loop bounds 2 | [['BIO130', 'BIO130', 1], ['BIO130', 'HIST140', 1], ['HIST140', 'BIO130', 1], ['HIST140', 'HIST140', 1]] | [['BIO130', 'HIST140', 1]] | Failed |
| partial repair guard 3 | [['BIO130', 'BIO130', 1], ['CHEM120', 'CHEM120', 1], ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'ECON150', 1], ['HIST140', 'CHEM120', 1], ['HIST140', 'HIST140', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'CHEM120', 1], ['MATH101H', 'HIST140', 1], ['MATH101H', 'MATH101H', 1], ['MATH101H', 'PHYS110', 1], ['PHYS110', 'CHEM120', 1], ['PHYS110', 'HIST140', 1], ['PHYS110', 'MATH101H', 1], ['PHYS110', 'PHYS110', 1]] | [['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]] | Failed |
| boundary control 4 | [['A', 'A', 1], ['A', 'B', 1], ['A', 'C', 1], ['B', 'A', 1], ['B', 'B', 1], ['B', 'C', 1], ['C', 'A', 1], ['C', 'B', 1], ['C', 'C', 1]] | [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]] | Failed |
| normal control 5 | [['BIO130', 'BIO130', 1], ['BIO130', 'CHEM120', 1], ['BIO130', 'MATH101', 1], ['CHEM120', 'BIO130', 1], ['CHEM120', 'CHEM120', 1], ['CHEM120', 'MATH101', 1], ['MATH101', 'BIO130', 1], ['MATH101', 'CHEM120', 1], ['MATH101', 'MATH101', 1]] | [['BIO130', 'CHEM120', 1], ['BIO130', 'MATH101', 1], ['CHEM120', 'MATH101', 1]] | Failed |
| normal control 6 | [['BIO130', 'BIO130', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'CHEM120', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'ECON150', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1], ['ECON150', 'PHYS110', 1], ['MATH101', 'CHEM120', 1], ['MATH101', 'ECON150', 1], ['MATH101', 'MATH101', 2], ['MATH101', 'MATH101H', 1], ['MATH101', 'PHYS110', 2], ['MATH101H', 'ECON150', 1], ['MATH101H', 'MATH101', 1], ['MATH101H', 'MATH101H', 2], ['MATH101H', 'PHYS110', 1], ['PHYS110', 'BIO130', 1], ['PHYS110', 'CHEM120', 1], ['PHYS110', 'ECON150', 1], ['PHYS110', 'MATH101', 2], ['PHYS110', 'MATH101H', 1], ['PHYS110', 'PHYS110', 3]] | [['BIO130', 'PHYS110', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1], ['ECON150', 'PHYS110', 1], ['MATH101', 'MATH101H', 1], ['MATH101', 'PHYS110', 2], ['MATH101H', 'PHYS110', 1]] | Failed |
| normal control 7 | [['BIO130', 'BIO130', 1], ['BIO130', 'MATH101', 1], ['CHEM120', 'CHEM120', 1], ['CHEM120', 'MATH101', 1], ['HIST140', 'HIST140', 1], ['HIST140', 'MATH101H', 1], ['MATH101', 'BIO130', 1], ['MATH101', 'CHEM120', 1], ['MATH101', 'MATH101', 2], ['MATH101H', 'HIST140', 1], ['MATH101H', 'MATH101H', 1]] | [['BIO130', 'MATH101', 1], ['CHEM120', 'MATH101', 1], ['HIST140', 'MATH101H', 1]] | Failed |
| normal control 8 | [['BIO130', 'BIO130', 2], ['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'BIO130', 1], ['CHEM120', 'CHEM120', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'BIO130', 1], ['ECON150', 'CHEM120', 1], ['ECON150', 'ECON150', 1], ['ECON150', 'PHYS110', 1], ['HIST140', 'BIO130', 1], ['HIST140', 'HIST140', 1], ['PHYS110', 'BIO130', 1], ['PHYS110', 'CHEM120', 1], ['PHYS110', 'ECON150', 1], ['PHYS110', 'PHYS110', 1]] | [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'PHYS110', 1]] | Failed |
SHA-256 / dba40963738467a24bc172745335b9775b7c2abf65c01e51e0889dd7d8002e94
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(enrol):
by = {}
for st, ex in enrol:
by.setdefault(st, set()).add(ex)
cnt = {}
for st in by:
exs = sorted(by[st])
for i in range(len(exs)):
for j in range(i, len(exs)):
k = (exs[i], exs[j])
cnt[k] = cnt.get(k, 0) + 1
return [[a, b, n] for (a, b), n in sorted(cnt.items())]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: pair loop bounds 1', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
('regression variant: pair loop bounds 2', [[['s5', 'BIO130'], ['s5', 'HIST140']]],
[['BIO130', 'HIST140', 1]]),
('partial repair guard 3',
[[['s2', 'BIO130'], ['s1', 'MATH101H'], ['s1', 'HIST140'], ['s1', 'CHEM120'], ['s1', 'PHYS110'],
['s3', 'ECON150']]],
[['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1],
['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
('boundary control 4', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
[['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
('normal control 5', [[['s2', 'BIO130'], ['s2', 'CHEM120'], ['s2', 'MATH101']]],
[['BIO130', 'CHEM120', 1], ['BIO130', 'MATH101', 1], ['CHEM120', 'MATH101', 1]]),
('normal control 6',
[[['s4', 'MATH101'], ['s1', 'PHYS110'], ['s2', 'BIO130'], ['s4', 'PHYS110'], ['s1', 'CHEM120'],
['s2', 'PHYS110'], ['s4', 'ECON150'], ['s1', 'MATH101'], ['s3', 'MATH101H'], ['s4', 'MATH101H'],
['s4', 'MATH101H']]],
[['BIO130', 'PHYS110', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'MATH101', 1],
['ECON150', 'MATH101H', 1], ['ECON150', 'PHYS110', 1], ['MATH101', 'MATH101H', 1],
['MATH101', 'PHYS110', 2], ['MATH101H', 'PHYS110', 1]]),
('normal control 7',
[[['s1', 'MATH101H'], ['s4', 'MATH101'], ['s1', 'HIST140'], ['s4', 'CHEM120'], ['s2', 'MATH101'],
['s2', 'BIO130']]],
[['BIO130', 'MATH101', 1], ['CHEM120', 'MATH101', 1], ['HIST140', 'MATH101H', 1]]),
('normal control 8',
[[['s4', 'BIO130'], ['s3', 'ECON150'], ['s3', 'CHEM120'], ['s3', 'BIO130'], ['s4', 'HIST140'],
['s3', 'PHYS110']]],
[['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'PHYS110', 1],
['CHEM120', 'ECON150', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'PHYS110', 1]])],
[('regression: pair loop bounds 1', [[['s1', 'A'], ['s1', 'A'], ['s1', 'B']]], [['A', 'B', 1]]),
('regression variant: pair loop bounds 2',
[[['s2', 'MATH101'], ['s3', 'CHEM120'], ['s5', 'MATH101H'], ['s5', 'ECON150'], ['s3', 'MATH101H'],
['s3', 'HIST140'], ['s2', 'PHYS110'], ['s3', 'MATH101']]],
[['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1],
['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1],
['MATH101', 'MATH101H', 1], ['MATH101', 'PHYS110', 1]]),
('partial repair guard 3', [[['s5', 'MATH101'], ['s5', 'HIST140']]], [['HIST140', 'MATH101', 1]]),
('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
[['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
('normal control 6',
[[['s1', 'PHYS110'], ['s3', 'PHYS110'], ['s3', 'MATH101'], ['s4', 'HIST140'], ['s5', 'CHEM120'],
['s5', 'PHYS110'], ['s1', 'BIO130']]],
[['BIO130', 'PHYS110', 1], ['CHEM120', 'PHYS110', 1], ['MATH101', 'PHYS110', 1]]),
('normal control 7',
[[['s1', 'BIO130'], ['s4', 'BIO130'], ['s4', 'HIST140'], ['s4', 'MATH101H'], ['s1', 'MATH101H'],
['s1', 'HIST140'], ['s1', 'BIO130']]],
[['BIO130', 'HIST140', 2], ['BIO130', 'MATH101H', 2], ['HIST140', 'MATH101H', 2]]),
('normal control 8',
[[['s5', 'MATH101H'], ['s5', 'ECON150'], ['s3', 'MATH101H'], ['s1', 'HIST140'], ['s2', 'BIO130'],
['s3', 'HIST140'], ['s3', 'PHYS110'], ['s3', 'MATH101'], ['s3', 'MATH101H'], ['s5', 'BIO130']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'MATH101H', 1],
['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1],
['MATH101', 'MATH101H', 1], ['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]])],
[('regression: pair loop bounds 1', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
[['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
('regression variant: pair loop bounds 2',
[[['s1', 'BIO130'], ['s2', 'HIST140'], ['s2', 'ECON150'], ['s1', 'ECON150'], ['s1', 'MATH101'],
['s5', 'MATH101'], ['s5', 'BIO130'], ['s1', 'HIST140']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 2], ['ECON150', 'HIST140', 2],
['ECON150', 'MATH101', 1], ['HIST140', 'MATH101', 1]]),
('partial repair guard 3',
[[['s3', 'MATH101'], ['s3', 'MATH101H'], ['s1', 'CHEM120'], ['s3', 'ECON150'], ['s2', 'MATH101H'],
['s1', 'ECON150'], ['s2', 'ECON150']]],
[['CHEM120', 'ECON150', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 2],
['MATH101', 'MATH101H', 1]]),
('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
('normal control 5',
[[['s5', 'MATH101'], ['s1', 'CHEM120'], ['s3', 'PHYS110'], ['s3', 'MATH101H'], ['s4', 'PHYS110'],
['s3', 'CHEM120'], ['s5', 'PHYS110'], ['s3', 'BIO130'], ['s5', 'MATH101H'], ['s5', 'ECON150'],
['s4', 'PHYS110'], ['s2', 'ECON150']]],
[['BIO130', 'CHEM120', 1], ['BIO130', 'MATH101H', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'MATH101H', 1],
['CHEM120', 'PHYS110', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1],
['ECON150', 'PHYS110', 1], ['MATH101', 'MATH101H', 1], ['MATH101', 'PHYS110', 1],
['MATH101H', 'PHYS110', 2]]),
('normal control 6', [[['s5', 'PHYS110']]], []),
('normal control 7',
[[['s3', 'ECON150'], ['s2', 'CHEM120'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'BIO130'],
['s5', 'PHYS110'], ['s5', 'MATH101H'], ['s1', 'PHYS110'], ['s5', 'CHEM120'], ['s3', 'BIO130'],
['s4', 'MATH101H'], ['s4', 'PHYS110'], ['s3', 'HIST140']]],
[['BIO130', 'CHEM120', 2], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 2],
['BIO130', 'PHYS110', 2], ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1],
['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'HIST140', 1],
['MATH101H', 'PHYS110', 2]]),
('normal control 8',
[[['s4', 'CHEM120'], ['s3', 'BIO130'], ['s5', 'PHYS110'], ['s3', 'ECON150'], ['s5', 'MATH101'],
['s5', 'BIO130'], ['s4', 'MATH101'], ['s1', 'MATH101H'], ['s3', 'MATH101H'], ['s4', 'ECON150'],
['s1', 'BIO130'], ['s4', 'BIO130'], ['s1', 'CHEM120']]],
[['BIO130', 'CHEM120', 2], ['BIO130', 'ECON150', 2], ['BIO130', 'MATH101', 2], ['BIO130', 'MATH101H', 2],
['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'MATH101', 1],
['CHEM120', 'MATH101H', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1],
['MATH101', 'PHYS110', 1]])],
[('regression: pair loop bounds 1',
[[['s4', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'HIST140'], ['s1', 'ECON150'], ['s3', 'HIST140'],
['s3', 'MATH101'], ['s5', 'MATH101'], ['s2', 'MATH101H'], ['s3', 'PHYS110'], ['s4', 'HIST140'],
['s2', 'PHYS110'], ['s2', 'BIO130'], ['s3', 'ECON150'], ['s1', 'CHEM120']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1],
['CHEM120', 'HIST140', 1], ['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1],
['ECON150', 'MATH101H', 1], ['ECON150', 'PHYS110', 2], ['HIST140', 'MATH101', 2],
['HIST140', 'PHYS110', 1], ['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
('regression variant: pair loop bounds 2',
[[['s2', 'BIO130'], ['s5', 'MATH101'], ['s3', 'ECON150'], ['s5', 'PHYS110'], ['s3', 'BIO130'],
['s5', 'MATH101H'], ['s3', 'HIST140'], ['s5', 'BIO130']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1],
['BIO130', 'PHYS110', 1], ['ECON150', 'HIST140', 1], ['MATH101', 'MATH101H', 1],
['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
('partial repair guard 3',
[[['s5', 'HIST140'], ['s3', 'MATH101H'], ['s1', 'MATH101H'], ['s5', 'ECON150'], ['s3', 'HIST140'],
['s3', 'BIO130'], ['s3', 'ECON150'], ['s3', 'ECON150']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'HIST140', 2],
['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101H', 1]]),
('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
[['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
('normal control 6', [[['s1', 'CHEM120'], ['s1', 'PHYS110'], ['s1', 'MATH101']]],
[['CHEM120', 'MATH101', 1], ['CHEM120', 'PHYS110', 1], ['MATH101', 'PHYS110', 1]]),
('normal control 7',
[[['s3', 'MATH101H'], ['s2', 'PHYS110'], ['s2', 'ECON150'], ['s4', 'ECON150'], ['s2', 'MATH101H'],
['s2', 'BIO130'], ['s4', 'HIST140'], ['s4', 'MATH101H'], ['s3', 'PHYS110'], ['s3', 'BIO130']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 2], ['BIO130', 'PHYS110', 2], ['ECON150', 'HIST140', 1],
['ECON150', 'MATH101H', 2], ['ECON150', 'PHYS110', 1], ['HIST140', 'MATH101H', 1],
['MATH101H', 'PHYS110', 2]]),
('normal control 8', [[['s2', 'BIO130'], ['s2', 'HIST140'], ['s2', 'ECON150'], ['s2', 'CHEM120']]],
[['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['CHEM120', 'ECON150', 1],
['CHEM120', 'HIST140', 1], ['ECON150', 'HIST140', 1]])],
[('regression: pair loop bounds 1',
[[['s3', 'MATH101'], ['s1', 'BIO130'], ['s4', 'ECON150'], ['s1', 'ECON150'], ['s5', 'MATH101'],
['s4', 'CHEM120'], ['s3', 'CHEM120'], ['s5', 'BIO130']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'MATH101', 1], ['CHEM120', 'ECON150', 1],
['CHEM120', 'MATH101', 1]]),
('regression variant: pair loop bounds 2',
[[['s3', 'BIO130'], ['s3', 'HIST140'], ['s3', 'MATH101H'], ['s3', 'MATH101'], ['s3', 'HIST140']]],
[['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1], ['HIST140', 'MATH101', 1],
['HIST140', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]]),
('partial repair guard 3', [[['s1', 'HIST140'], ['s1', 'MATH101'], ['s1', 'CHEM120'], ['s1', 'CHEM120']]],
[['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['HIST140', 'MATH101', 1]]),
('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
[['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
('normal control 6', [[['s5', 'MATH101H'], ['s5', 'HIST140'], ['s5', 'MATH101'], ['s5', 'HIST140']]],
[['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]]),
('normal control 7',
[[['s1', 'PHYS110'], ['s4', 'PHYS110'], ['s3', 'ECON150'], ['s5', 'MATH101H'], ['s1', 'CHEM120'],
['s1', 'MATH101'], ['s4', 'BIO130'], ['s1', 'ECON150'], ['s2', 'MATH101H'], ['s4', 'MATH101H']]],
[['BIO130', 'MATH101H', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'MATH101', 1],
['CHEM120', 'PHYS110', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'PHYS110', 1],
['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
('normal control 8', [[['s2', 'CHEM120'], ['s2', 'BIO130'], ['s5', 'MATH101H'], ['s2', 'ECON150']]],
[['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['CHEM120', 'ECON150', 1]])]]
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: pair loop bounds 1 | [['A', 'A', 2], ['A', 'B', 2], ['B', 'B', 2]] | [['A', 'B', 2]] | Failed |
| regression variant: pair loop bounds 2 | [['BIO130', 'BIO130', 1], ['BIO130', 'HIST140', 1], ['HIST140', 'HIST140', 1]] | [['BIO130', 'HIST140', 1]] | Failed |
| partial repair guard 3 | [['BIO130', 'BIO130', 1], ['CHEM120', 'CHEM120', 1], ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'ECON150', 1], ['HIST140', 'HIST140', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'MATH101H', 1], ['MATH101H', 'PHYS110', 1], ['PHYS110', 'PHYS110', 1]] | [['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]] | Failed |
| boundary control 4 | [['A', 'A', 1], ['A', 'B', 1], ['A', 'C', 1], ['B', 'B', 1], ['B', 'C', 1], ['C', 'C', 1]] | [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]] | Failed |
| normal control 5 | [['BIO130', 'BIO130', 1], ['BIO130', 'CHEM120', 1], ['BIO130', 'MATH101', 1], ['CHEM120', 'CHEM120', 1], ['CHEM120', 'MATH101', 1], ['MATH101', 'MATH101', 1]] | [['BIO130', 'CHEM120', 1], ['BIO130', 'MATH101', 1], ['CHEM120', 'MATH101', 1]] | Failed |
| normal control 6 | [['BIO130', 'BIO130', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'CHEM120', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'ECON150', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1], ['ECON150', 'PHYS110', 1], ['MATH101', 'MATH101', 2], ['MATH101', 'MATH101H', 1], ['MATH101', 'PHYS110', 2], ['MATH101H', 'MATH101H', 2], ['MATH101H', 'PHYS110', 1], ['PHYS110', 'PHYS110', 3]] | [['BIO130', 'PHYS110', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1], ['ECON150', 'PHYS110', 1], ['MATH101', 'MATH101H', 1], ['MATH101', 'PHYS110', 2], ['MATH101H', 'PHYS110', 1]] | Failed |
| normal control 7 | [['BIO130', 'BIO130', 1], ['BIO130', 'MATH101', 1], ['CHEM120', 'CHEM120', 1], ['CHEM120', 'MATH101', 1], ['HIST140', 'HIST140', 1], ['HIST140', 'MATH101H', 1], ['MATH101', 'MATH101', 2], ['MATH101H', 'MATH101H', 1]] | [['BIO130', 'MATH101', 1], ['CHEM120', 'MATH101', 1], ['HIST140', 'MATH101H', 1]] | Failed |
| normal control 8 | [['BIO130', 'BIO130', 2], ['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'CHEM120', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'ECON150', 1], ['ECON150', 'PHYS110', 1], ['HIST140', 'HIST140', 1], ['PHYS110', 'PHYS110', 1]] | [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'PHYS110', 1]] | Failed |
SHA-256 / 572b4d917c8d562bee099636cc5ff060a52fca4af7e301f7bbe956b3273b3299
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(enrol):
by = {}
for st, ex in enrol:
by.setdefault(st, set()).add(ex)
cnt = {}
for st in by:
exs = sorted(by[st])
for i in range(len(exs)):
for j in range(i + 1, len(exs)):
k = (exs[i], exs[j])
cnt[k] = cnt.get(k, 0) + 1
return [[a, b, n] for (a, b), n in sorted(cnt.items())]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: pair loop bounds 1', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
('regression variant: pair loop bounds 2', [[['s5', 'BIO130'], ['s5', 'HIST140']]],
[['BIO130', 'HIST140', 1]]),
('partial repair guard 3',
[[['s2', 'BIO130'], ['s1', 'MATH101H'], ['s1', 'HIST140'], ['s1', 'CHEM120'], ['s1', 'PHYS110'],
['s3', 'ECON150']]],
[['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1],
['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
('boundary control 4', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
[['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
('normal control 5', [[['s2', 'BIO130'], ['s2', 'CHEM120'], ['s2', 'MATH101']]],
[['BIO130', 'CHEM120', 1], ['BIO130', 'MATH101', 1], ['CHEM120', 'MATH101', 1]]),
('normal control 6',
[[['s4', 'MATH101'], ['s1', 'PHYS110'], ['s2', 'BIO130'], ['s4', 'PHYS110'], ['s1', 'CHEM120'],
['s2', 'PHYS110'], ['s4', 'ECON150'], ['s1', 'MATH101'], ['s3', 'MATH101H'], ['s4', 'MATH101H'],
['s4', 'MATH101H']]],
[['BIO130', 'PHYS110', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'MATH101', 1],
['ECON150', 'MATH101H', 1], ['ECON150', 'PHYS110', 1], ['MATH101', 'MATH101H', 1],
['MATH101', 'PHYS110', 2], ['MATH101H', 'PHYS110', 1]]),
('normal control 7',
[[['s1', 'MATH101H'], ['s4', 'MATH101'], ['s1', 'HIST140'], ['s4', 'CHEM120'], ['s2', 'MATH101'],
['s2', 'BIO130']]],
[['BIO130', 'MATH101', 1], ['CHEM120', 'MATH101', 1], ['HIST140', 'MATH101H', 1]]),
('normal control 8',
[[['s4', 'BIO130'], ['s3', 'ECON150'], ['s3', 'CHEM120'], ['s3', 'BIO130'], ['s4', 'HIST140'],
['s3', 'PHYS110']]],
[['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'PHYS110', 1],
['CHEM120', 'ECON150', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'PHYS110', 1]])],
[('regression: pair loop bounds 1', [[['s1', 'A'], ['s1', 'A'], ['s1', 'B']]], [['A', 'B', 1]]),
('regression variant: pair loop bounds 2',
[[['s2', 'MATH101'], ['s3', 'CHEM120'], ['s5', 'MATH101H'], ['s5', 'ECON150'], ['s3', 'MATH101H'],
['s3', 'HIST140'], ['s2', 'PHYS110'], ['s3', 'MATH101']]],
[['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1],
['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1],
['MATH101', 'MATH101H', 1], ['MATH101', 'PHYS110', 1]]),
('partial repair guard 3', [[['s5', 'MATH101'], ['s5', 'HIST140']]], [['HIST140', 'MATH101', 1]]),
('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
[['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
('normal control 6',
[[['s1', 'PHYS110'], ['s3', 'PHYS110'], ['s3', 'MATH101'], ['s4', 'HIST140'], ['s5', 'CHEM120'],
['s5', 'PHYS110'], ['s1', 'BIO130']]],
[['BIO130', 'PHYS110', 1], ['CHEM120', 'PHYS110', 1], ['MATH101', 'PHYS110', 1]]),
('normal control 7',
[[['s1', 'BIO130'], ['s4', 'BIO130'], ['s4', 'HIST140'], ['s4', 'MATH101H'], ['s1', 'MATH101H'],
['s1', 'HIST140'], ['s1', 'BIO130']]],
[['BIO130', 'HIST140', 2], ['BIO130', 'MATH101H', 2], ['HIST140', 'MATH101H', 2]]),
('normal control 8',
[[['s5', 'MATH101H'], ['s5', 'ECON150'], ['s3', 'MATH101H'], ['s1', 'HIST140'], ['s2', 'BIO130'],
['s3', 'HIST140'], ['s3', 'PHYS110'], ['s3', 'MATH101'], ['s3', 'MATH101H'], ['s5', 'BIO130']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'MATH101H', 1],
['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1],
['MATH101', 'MATH101H', 1], ['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]])],
[('regression: pair loop bounds 1', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
[['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
('regression variant: pair loop bounds 2',
[[['s1', 'BIO130'], ['s2', 'HIST140'], ['s2', 'ECON150'], ['s1', 'ECON150'], ['s1', 'MATH101'],
['s5', 'MATH101'], ['s5', 'BIO130'], ['s1', 'HIST140']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 2], ['ECON150', 'HIST140', 2],
['ECON150', 'MATH101', 1], ['HIST140', 'MATH101', 1]]),
('partial repair guard 3',
[[['s3', 'MATH101'], ['s3', 'MATH101H'], ['s1', 'CHEM120'], ['s3', 'ECON150'], ['s2', 'MATH101H'],
['s1', 'ECON150'], ['s2', 'ECON150']]],
[['CHEM120', 'ECON150', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 2],
['MATH101', 'MATH101H', 1]]),
('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
('normal control 5',
[[['s5', 'MATH101'], ['s1', 'CHEM120'], ['s3', 'PHYS110'], ['s3', 'MATH101H'], ['s4', 'PHYS110'],
['s3', 'CHEM120'], ['s5', 'PHYS110'], ['s3', 'BIO130'], ['s5', 'MATH101H'], ['s5', 'ECON150'],
['s4', 'PHYS110'], ['s2', 'ECON150']]],
[['BIO130', 'CHEM120', 1], ['BIO130', 'MATH101H', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'MATH101H', 1],
['CHEM120', 'PHYS110', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1],
['ECON150', 'PHYS110', 1], ['MATH101', 'MATH101H', 1], ['MATH101', 'PHYS110', 1],
['MATH101H', 'PHYS110', 2]]),
('normal control 6', [[['s5', 'PHYS110']]], []),
('normal control 7',
[[['s3', 'ECON150'], ['s2', 'CHEM120'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'BIO130'],
['s5', 'PHYS110'], ['s5', 'MATH101H'], ['s1', 'PHYS110'], ['s5', 'CHEM120'], ['s3', 'BIO130'],
['s4', 'MATH101H'], ['s4', 'PHYS110'], ['s3', 'HIST140']]],
[['BIO130', 'CHEM120', 2], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 2],
['BIO130', 'PHYS110', 2], ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1],
['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'HIST140', 1],
['MATH101H', 'PHYS110', 2]]),
('normal control 8',
[[['s4', 'CHEM120'], ['s3', 'BIO130'], ['s5', 'PHYS110'], ['s3', 'ECON150'], ['s5', 'MATH101'],
['s5', 'BIO130'], ['s4', 'MATH101'], ['s1', 'MATH101H'], ['s3', 'MATH101H'], ['s4', 'ECON150'],
['s1', 'BIO130'], ['s4', 'BIO130'], ['s1', 'CHEM120']]],
[['BIO130', 'CHEM120', 2], ['BIO130', 'ECON150', 2], ['BIO130', 'MATH101', 2], ['BIO130', 'MATH101H', 2],
['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'MATH101', 1],
['CHEM120', 'MATH101H', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1],
['MATH101', 'PHYS110', 1]])],
[('regression: pair loop bounds 1',
[[['s4', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'HIST140'], ['s1', 'ECON150'], ['s3', 'HIST140'],
['s3', 'MATH101'], ['s5', 'MATH101'], ['s2', 'MATH101H'], ['s3', 'PHYS110'], ['s4', 'HIST140'],
['s2', 'PHYS110'], ['s2', 'BIO130'], ['s3', 'ECON150'], ['s1', 'CHEM120']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1],
['CHEM120', 'HIST140', 1], ['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1],
['ECON150', 'MATH101H', 1], ['ECON150', 'PHYS110', 2], ['HIST140', 'MATH101', 2],
['HIST140', 'PHYS110', 1], ['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
('regression variant: pair loop bounds 2',
[[['s2', 'BIO130'], ['s5', 'MATH101'], ['s3', 'ECON150'], ['s5', 'PHYS110'], ['s3', 'BIO130'],
['s5', 'MATH101H'], ['s3', 'HIST140'], ['s5', 'BIO130']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1],
['BIO130', 'PHYS110', 1], ['ECON150', 'HIST140', 1], ['MATH101', 'MATH101H', 1],
['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
('partial repair guard 3',
[[['s5', 'HIST140'], ['s3', 'MATH101H'], ['s1', 'MATH101H'], ['s5', 'ECON150'], ['s3', 'HIST140'],
['s3', 'BIO130'], ['s3', 'ECON150'], ['s3', 'ECON150']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'HIST140', 2],
['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101H', 1]]),
('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
[['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
('normal control 6', [[['s1', 'CHEM120'], ['s1', 'PHYS110'], ['s1', 'MATH101']]],
[['CHEM120', 'MATH101', 1], ['CHEM120', 'PHYS110', 1], ['MATH101', 'PHYS110', 1]]),
('normal control 7',
[[['s3', 'MATH101H'], ['s2', 'PHYS110'], ['s2', 'ECON150'], ['s4', 'ECON150'], ['s2', 'MATH101H'],
['s2', 'BIO130'], ['s4', 'HIST140'], ['s4', 'MATH101H'], ['s3', 'PHYS110'], ['s3', 'BIO130']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 2], ['BIO130', 'PHYS110', 2], ['ECON150', 'HIST140', 1],
['ECON150', 'MATH101H', 2], ['ECON150', 'PHYS110', 1], ['HIST140', 'MATH101H', 1],
['MATH101H', 'PHYS110', 2]]),
('normal control 8', [[['s2', 'BIO130'], ['s2', 'HIST140'], ['s2', 'ECON150'], ['s2', 'CHEM120']]],
[['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['CHEM120', 'ECON150', 1],
['CHEM120', 'HIST140', 1], ['ECON150', 'HIST140', 1]])],
[('regression: pair loop bounds 1',
[[['s3', 'MATH101'], ['s1', 'BIO130'], ['s4', 'ECON150'], ['s1', 'ECON150'], ['s5', 'MATH101'],
['s4', 'CHEM120'], ['s3', 'CHEM120'], ['s5', 'BIO130']]],
[['BIO130', 'ECON150', 1], ['BIO130', 'MATH101', 1], ['CHEM120', 'ECON150', 1],
['CHEM120', 'MATH101', 1]]),
('regression variant: pair loop bounds 2',
[[['s3', 'BIO130'], ['s3', 'HIST140'], ['s3', 'MATH101H'], ['s3', 'MATH101'], ['s3', 'HIST140']]],
[['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1], ['HIST140', 'MATH101', 1],
['HIST140', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]]),
('partial repair guard 3', [[['s1', 'HIST140'], ['s1', 'MATH101'], ['s1', 'CHEM120'], ['s1', 'CHEM120']]],
[['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['HIST140', 'MATH101', 1]]),
('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
[['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
('normal control 6', [[['s5', 'MATH101H'], ['s5', 'HIST140'], ['s5', 'MATH101'], ['s5', 'HIST140']]],
[['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]]),
('normal control 7',
[[['s1', 'PHYS110'], ['s4', 'PHYS110'], ['s3', 'ECON150'], ['s5', 'MATH101H'], ['s1', 'CHEM120'],
['s1', 'MATH101'], ['s4', 'BIO130'], ['s1', 'ECON150'], ['s2', 'MATH101H'], ['s4', 'MATH101H']]],
[['BIO130', 'MATH101H', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'MATH101', 1],
['CHEM120', 'PHYS110', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'PHYS110', 1],
['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
('normal control 8', [[['s2', 'CHEM120'], ['s2', 'BIO130'], ['s5', 'MATH101H'], ['s2', 'ECON150']]],
[['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['CHEM120', 'ECON150', 1]])]]
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: pair loop bounds 1 | [['A', 'B', 2]] | [['A', 'B', 2]] | Passed |
| regression variant: pair loop bounds 2 | [['BIO130', 'HIST140', 1]] | [['BIO130', 'HIST140', 1]] | Passed |
| partial repair guard 3 | [['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]] | [['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]] | Passed |
| boundary control 4 | [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]] | [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]] | Passed |
| normal control 5 | [['BIO130', 'CHEM120', 1], ['BIO130', 'MATH101', 1], ['CHEM120', 'MATH101', 1]] | [['BIO130', 'CHEM120', 1], ['BIO130', 'MATH101', 1], ['CHEM120', 'MATH101', 1]] | Passed |
| normal control 6 | [['BIO130', 'PHYS110', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1], ['ECON150', 'PHYS110', 1], ['MATH101', 'MATH101H', 1], ['MATH101', 'PHYS110', 2], ['MATH101H', 'PHYS110', 1]] | [['BIO130', 'PHYS110', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1], ['ECON150', 'PHYS110', 1], ['MATH101', 'MATH101H', 1], ['MATH101', 'PHYS110', 2], ['MATH101H', 'PHYS110', 1]] | Passed |
| normal control 7 | [['BIO130', 'MATH101', 1], ['CHEM120', 'MATH101', 1], ['HIST140', 'MATH101H', 1]] | [['BIO130', 'MATH101', 1], ['CHEM120', 'MATH101', 1], ['HIST140', 'MATH101H', 1]] | Passed |
| normal control 8 | [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'PHYS110', 1]] | [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'PHYS110', 1]] | Passed |
SHA-256 / 405020e76e38c6f2b0e3ce14049b431857505b99f56f1d115628b2a821b59ab0
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:06.644464+00:00.
Case digest / 275ebd7ee4d4d61c20a68bb40f128996b48d34e68092eaca64b9506803d87f00