FA-94421 / Exam timetabling constraints / Open access
Same-period clashes included in proximity cost · case 01
Clashing pairs add 32 to the soft cost.
ROOT CAUSE
The proximity window includes distance zero.
VERIFIED REPAIR
Only distances 1 through 5 carry a proximity cost.
Unsuccessful approach: An exclusive upper bound drops pairs five periods apart.
Case contract
enrol [student, exam] rows (may repeat) and exam periods. For each student, each pair of distinct exams d = 1..5 periods apart costs 2^(5-d). Return [total, number of students, total/students as a reduced fraction string].
Why this case matters
The Carter proximity cost is the standard exam-timetabling quality measure; each piece has a known implementation pitfall.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(enrol, period):
by = {}
for st, ex in enrol:
by.setdefault(st, set()).add(ex)
total = 0
for st, exs in by.items():
ps = sorted(period[e] for e in exs)
for i in range(len(ps)):
for j in range(i + 1, len(ps)):
d = ps[j] - ps[i]
if 0 <= d <= 5:
total += 2 ** (5 - d)
n = len(by)
return [total, n, str(Fraction(total, n)) if n else '0']
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: proximity window 1', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}],
[0, 1, '0']),
('regression variant: proximity window 2',
[[['s4', 'CHEM120'], ['s2', 'BIO130'], ['s3', 'MATH101H'], ['s5', 'MATH101H'], ['s1', 'ECON150'],
['s5', 'CHEM120'], ['s1', 'MATH101'], ['s1', 'HIST140'], ['s4', 'MATH101H'], ['s3', 'CHEM120'],
['s1', 'PHYS110'], ['s2', 'PHYS110'], ['s4', 'HIST140']],
{'MATH101': 0, 'MATH101H': 2, 'PHYS110': 7, 'CHEM120': 2, 'BIO130': 4, 'HIST140': 7, 'ECON150': 3}],
[14, 5, '14/5']),
('partial repair guard 3',
[[['s2', 'HIST140'], ['s2', 'BIO130'], ['s3', 'ECON150'], ['s3', 'MATH101H'], ['s3', 'CHEM120'],
['s4', 'HIST140'], ['s2', 'PHYS110'], ['s3', 'BIO130']],
{'MATH101': 3, 'MATH101H': 6, 'PHYS110': 7, 'CHEM120': 1, 'BIO130': 5, 'HIST140': 6, 'ECON150': 6}],
[76, 3, '76/3']),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),
('normal control 5',
[[['s1', 'ECON150'], ['s5', 'BIO130'], ['s5', 'PHYS110'], ['s5', 'HIST140'], ['s3', 'HIST140'],
['s2', 'PHYS110'], ['s2', 'HIST140'], ['s5', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'HIST140'],
['s2', 'BIO130'], ['s2', 'CHEM120']],
{'MATH101': 7, 'MATH101H': 5, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 7, 'HIST140': 0, 'ECON150': 2}],
[49, 4, '49/4']),
('normal control 6',
[[['s5', 'ECON150'], ['s2', 'HIST140'], ['s3', 'MATH101'], ['s3', 'PHYS110'], ['s3', 'MATH101'],
['s1', 'HIST140'], ['s3', 'MATH101H'], ['s4', 'CHEM120'], ['s4', 'MATH101'], ['s5', 'PHYS110'],
['s5', 'CHEM120'], ['s5', 'MATH101'], ['s2', 'MATH101'], ['s4', 'BIO130'], ['s4', 'PHYS110']],
{'MATH101': 5, 'MATH101H': 1, 'PHYS110': 3, 'CHEM120': 4, 'BIO130': 4, 'HIST140': 4, 'ECON150': 0}],
[153, 5, '153/5']),
('normal control 7',
[[['s3', 'CHEM120'], ['s4', 'CHEM120'], ['s4', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'PHYS110'],
['s3', 'CHEM120']],
{'MATH101': 1, 'MATH101H': 6, 'PHYS110': 4, 'CHEM120': 7, 'BIO130': 1, 'HIST140': 7, 'ECON150': 5}],
[8, 3, '8/3']),
('normal control 8',
[[['s4', 'BIO130'], ['s4', 'MATH101H'], ['s2', 'MATH101H'], ['s1', 'CHEM120'], ['s2', 'MATH101'],
['s1', 'MATH101'], ['s5', 'CHEM120'], ['s4', 'CHEM120'], ['s4', 'HIST140'], ['s1', 'MATH101']],
{'MATH101': 4, 'MATH101H': 2, 'PHYS110': 5, 'CHEM120': 1, 'BIO130': 4, 'HIST140': 0, 'ECON150': 3}],
[66, 4, '33/2'])],
[('regression: proximity window 1',
[[['s1', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130']],
{'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 1}],
[32, 2, '16']),
('regression variant: proximity window 2',
[[['s2', 'CHEM120'], ['s2', 'ECON150'], ['s2', 'PHYS110'], ['s1', 'MATH101H'], ['s1', 'HIST140']],
{'MATH101': 6, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 5, 'BIO130': 6, 'HIST140': 5, 'ECON150': 1}],
[19, 2, '19/2']),
('partial repair guard 3',
[[['s4', 'MATH101'], ['s3', 'PHYS110'], ['s1', 'CHEM120'], ['s3', 'MATH101'], ['s5', 'CHEM120'],
['s1', 'MATH101H'], ['s4', 'MATH101H'], ['s4', 'ECON150']],
{'MATH101': 3, 'MATH101H': 7, 'PHYS110': 7, 'CHEM120': 3, 'BIO130': 4, 'HIST140': 2, 'ECON150': 2}],
[23, 4, '23/4']),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 1}],
[16, 1, '16']),
('normal control 5',
[[['s5', 'ECON150'], ['s5', 'MATH101'], ['s4', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'MATH101H']],
{'MATH101': 6, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 4, 'BIO130': 6, 'HIST140': 1, 'ECON150': 3}],
[28, 2, '14']),
('normal control 6',
[[['s4', 'BIO130'], ['s4', 'HIST140'], ['s3', 'MATH101H'], ['s5', 'HIST140'], ['s4', 'PHYS110']],
{'MATH101': 4, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 6, 'HIST140': 5, 'ECON150': 4}],
[17, 3, '17/3']),
('normal control 7',
[[['s4', 'MATH101H'], ['s4', 'BIO130'], ['s2', 'MATH101H'], ['s4', 'PHYS110'], ['s5', 'BIO130'],
['s4', 'MATH101'], ['s2', 'HIST140'], ['s2', 'BIO130']],
{'MATH101': 4, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 5, 'BIO130': 0, 'HIST140': 6, 'ECON150': 5}],
[39, 3, '13']),
('normal control 8',
[[['s4', 'MATH101'], ['s4', 'PHYS110']],
{'MATH101': 5, 'MATH101H': 4, 'PHYS110': 5, 'CHEM120': 2, 'BIO130': 1, 'HIST140': 4, 'ECON150': 2}],
[0, 1, '0'])],
[('regression: proximity window 1',
[[['s3', 'CHEM120'], ['s1', 'MATH101'], ['s2', 'CHEM120'], ['s5', 'HIST140'], ['s5', 'BIO130'],
['s1', 'HIST140'], ['s1', 'CHEM120'], ['s1', 'BIO130'], ['s3', 'BIO130'], ['s2', 'MATH101H'],
['s2', 'MATH101'], ['s2', 'HIST140']],
{'MATH101': 2, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 5, 'BIO130': 4, 'HIST140': 0, 'ECON150': 0}],
[79, 4, '79/4']),
('regression variant: proximity window 2',
[[['s3', 'MATH101H'], ['s3', 'ECON150'], ['s5', 'BIO130'], ['s2', 'HIST140'], ['s1', 'MATH101'],
['s5', 'MATH101'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s1', 'PHYS110'], ['s5', 'MATH101H'],
['s5', 'ECON150'], ['s3', 'PHYS110']],
{'MATH101': 6, 'MATH101H': 3, 'PHYS110': 6, 'CHEM120': 4, 'BIO130': 3, 'HIST140': 5, 'ECON150': 7}],
[94, 4, '47/2']),
('partial repair guard 3',
[[['s3', 'MATH101H'], ['s1', 'PHYS110'], ['s3', 'BIO130'], ['s3', 'HIST140'], ['s4', 'BIO130'],
['s2', 'ECON150'], ['s5', 'PHYS110'], ['s1', 'CHEM120'], ['s1', 'HIST140'], ['s2', 'PHYS110'],
['s5', 'MATH101H'], ['s3', 'PHYS110'], ['s1', 'ECON150']],
{'MATH101': 7, 'MATH101H': 3, 'PHYS110': 1, 'CHEM120': 4, 'BIO130': 7, 'HIST140': 6, 'ECON150': 2}],
[94, 5, '94/5']),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}], [0, 1, '0']),
('boundary control 5', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),
('normal control 6',
[[['s3', 'MATH101H'], ['s2', 'MATH101'], ['s1', 'MATH101'], ['s4', 'CHEM120'], ['s4', 'PHYS110'],
['s4', 'HIST140'], ['s2', 'HIST140'], ['s4', 'HIST140'], ['s1', 'HIST140'], ['s3', 'MATH101'],
['s4', 'ECON150']],
{'MATH101': 4, 'MATH101H': 5, 'PHYS110': 4, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 2, 'ECON150': 0}],
[86, 4, '43/2']),
('normal control 7',
[[['s5', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'BIO130'], ['s5', 'ECON150'], ['s1', 'MATH101H'],
['s4', 'ECON150'], ['s5', 'MATH101'], ['s1', 'HIST140'], ['s1', 'MATH101'], ['s4', 'BIO130'],
['s4', 'MATH101H'], ['s2', 'MATH101'], ['s4', 'MATH101'], ['s1', 'CHEM120'], ['s2', 'CHEM120'],
['s2', 'PHYS110']],
{'MATH101': 4, 'MATH101H': 1, 'PHYS110': 1, 'CHEM120': 5, 'BIO130': 0, 'HIST140': 6, 'ECON150': 2}],
[190, 4, '95/2']),
('normal control 8',
[[['s5', 'ECON150'], ['s5', 'MATH101H'], ['s2', 'MATH101H'], ['s2', 'MATH101'], ['s4', 'BIO130'],
['s3', 'CHEM120'], ['s2', 'MATH101'], ['s4', 'PHYS110'], ['s2', 'ECON150'], ['s3', 'ECON150']],
{'MATH101': 1, 'MATH101H': 3, 'PHYS110': 4, 'CHEM120': 2, 'BIO130': 6, 'HIST140': 4, 'ECON150': 5}],
[38, 4, '19/2'])],
[('regression: proximity window 1',
[[['s1', 'MATH101H'], ['s2', 'BIO130'], ['s1', 'ECON150'], ['s1', 'ECON150'], ['s2', 'ECON150'],
['s3', 'MATH101'], ['s4', 'MATH101H'], ['s2', 'MATH101H'], ['s4', 'ECON150'], ['s2', 'PHYS110']],
{'MATH101': 6, 'MATH101H': 7, 'PHYS110': 4, 'CHEM120': 2, 'BIO130': 4, 'HIST140': 3, 'ECON150': 4}],
[20, 4, '5']),
('regression variant: proximity window 2',
[[['s4', 'MATH101H'], ['s3', 'MATH101'], ['s5', 'MATH101'], ['s3', 'BIO130'], ['s5', 'MATH101H'],
['s2', 'HIST140'], ['s5', 'HIST140'], ['s2', 'CHEM120'], ['s4', 'PHYS110'], ['s4', 'ECON150'],
['s1', 'MATH101'], ['s1', 'MATH101H']],
{'MATH101': 2, 'MATH101H': 7, 'PHYS110': 5, 'CHEM120': 7, 'BIO130': 2, 'HIST140': 2, 'ECON150': 6}],
[44, 5, '44/5']),
('partial repair guard 3',
[[['s5', 'BIO130'], ['s5', 'MATH101H'], ['s3', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'PHYS110'],
['s2', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'PHYS110'], ['s3', 'CHEM120'], ['s1', 'HIST140'],
['s2', 'BIO130'], ['s4', 'ECON150'], ['s2', 'PHYS110']],
{'MATH101': 6, 'MATH101H': 0, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 3, 'ECON150': 5}],
[91, 5, '91/5']),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 1}],
[16, 1, '16']),
('boundary control 5',
[[['s1', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130']],
{'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 1}],
[32, 2, '16']),
('normal control 6',
[[['s1', 'CHEM120'], ['s2', 'HIST140'], ['s1', 'HIST140'], ['s2', 'ECON150'], ['s4', 'PHYS110'],
['s4', 'MATH101H'], ['s3', 'PHYS110'], ['s3', 'CHEM120'], ['s5', 'ECON150'], ['s3', 'CHEM120'],
['s3', 'HIST140'], ['s3', 'MATH101'], ['s4', 'MATH101'], ['s4', 'HIST140']],
{'MATH101': 7, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 4, 'BIO130': 3, 'HIST140': 4, 'ECON150': 4}],
[40, 5, '8']),
('normal control 7',
[[['s4', 'MATH101'], ['s4', 'PHYS110'], ['s5', 'PHYS110'], ['s3', 'PHYS110'], ['s2', 'CHEM120'],
['s3', 'CHEM120'], ['s5', 'CHEM120']],
{'MATH101': 1, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 0, 'ECON150': 1}],
[16, 4, '4']),
('normal control 8',
[[['s5', 'MATH101H'], ['s5', 'PHYS110'], ['s3', 'ECON150'], ['s3', 'PHYS110']],
{'MATH101': 5, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 6, 'BIO130': 1, 'HIST140': 6, 'ECON150': 7}],
[18, 2, '9'])],
[('regression: proximity window 1',
[[['s5', 'PHYS110'], ['s4', 'ECON150'], ['s3', 'MATH101'], ['s3', 'PHYS110'], ['s2', 'CHEM120'],
['s2', 'ECON150'], ['s4', 'MATH101H'], ['s5', 'BIO130'], ['s4', 'HIST140'], ['s3', 'BIO130'],
['s4', 'PHYS110'], ['s3', 'ECON150'], ['s2', 'HIST140'], ['s5', 'MATH101'], ['s1', 'HIST140']],
{'MATH101': 3, 'MATH101H': 0, 'PHYS110': 0, 'CHEM120': 6, 'BIO130': 0, 'HIST140': 0, 'ECON150': 2}],
[82, 5, '82/5']),
('regression variant: proximity window 2',
[[['s2', 'CHEM120'], ['s4', 'ECON150'], ['s4', 'CHEM120'], ['s4', 'HIST140'], ['s5', 'MATH101H'],
['s2', 'MATH101'], ['s5', 'ECON150'], ['s2', 'PHYS110'], ['s2', 'ECON150']],
{'MATH101': 3, 'MATH101H': 3, 'PHYS110': 5, 'CHEM120': 6, 'BIO130': 2, 'HIST140': 4, 'ECON150': 5}],
[100, 3, '100/3']),
('partial repair guard 3',
[[['s1', 'MATH101H'], ['s5', 'HIST140'], ['s5', 'BIO130'], ['s1', 'MATH101'], ['s5', 'BIO130'],
['s5', 'MATH101']],
{'MATH101': 7, 'MATH101H': 2, 'PHYS110': 7, 'CHEM120': 5, 'BIO130': 7, 'HIST140': 0, 'ECON150': 7}],
[1, 2, '1/2']),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}], [0, 1, '0']),
('boundary control 5', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),
('normal control 6',
[[['s1', 'ECON150'], ['s5', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'HIST140'], ['s4', 'MATH101'],
['s4', 'MATH101'], ['s1', 'PHYS110']],
{'MATH101': 1, 'MATH101H': 4, 'PHYS110': 6, 'CHEM120': 4, 'BIO130': 5, 'HIST140': 2, 'ECON150': 3}],
[30, 3, '10']),
('normal control 7',
[[['s4', 'BIO130'], ['s4', 'CHEM120'], ['s4', 'ECON150']],
{'MATH101': 4, 'MATH101H': 4, 'PHYS110': 5, 'CHEM120': 4, 'BIO130': 4, 'HIST140': 1, 'ECON150': 5}],
[32, 1, '32']),
('normal control 8',
[[['s3', 'HIST140'], ['s3', 'MATH101'], ['s4', 'BIO130'], ['s4', 'MATH101'], ['s4', 'CHEM120'],
['s4', 'MATH101'], ['s1', 'HIST140'], ['s1', 'ECON150'], ['s1', 'MATH101'], ['s3', 'MATH101H'],
['s3', 'CHEM120']],
{'MATH101': 6, 'MATH101H': 3, 'PHYS110': 7, 'CHEM120': 6, 'BIO130': 0, 'HIST140': 5, 'ECON150': 3}],
[76, 3, '76/3'])]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: proximity window 1 | [32, 1, '32'] | [0, 1, '0'] | Failed |
| regression variant: proximity window 2 | [142, 5, '142/5'] | [14, 5, '14/5'] | Failed |
| partial repair guard 3 | [108, 3, '36'] | [76, 3, '76/3'] | Failed |
| boundary control 4 | [0, 1, '0'] | [0, 1, '0'] | Passed |
| normal control 5 | [81, 4, '81/4'] | [49, 4, '49/4'] | Failed |
| normal control 6 | [185, 5, '37'] | [153, 5, '153/5'] | Failed |
| normal control 7 | [8, 3, '8/3'] | [8, 3, '8/3'] | Passed |
| normal control 8 | [66, 4, '33/2'] | [66, 4, '33/2'] | Passed |
SHA-256 / f900e8dfa4b2081f2037a1388dbca60f61f51c99938de4f11bc325bf5468f327
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(enrol, period):
by = {}
for st, ex in enrol:
by.setdefault(st, set()).add(ex)
total = 0
for st, exs in by.items():
ps = sorted(period[e] for e in exs)
for i in range(len(ps)):
for j in range(i + 1, len(ps)):
d = ps[j] - ps[i]
if 1 <= d < 5:
total += 2 ** (5 - d)
n = len(by)
return [total, n, str(Fraction(total, n)) if n else '0']
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: proximity window 1', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}],
[0, 1, '0']),
('regression variant: proximity window 2',
[[['s4', 'CHEM120'], ['s2', 'BIO130'], ['s3', 'MATH101H'], ['s5', 'MATH101H'], ['s1', 'ECON150'],
['s5', 'CHEM120'], ['s1', 'MATH101'], ['s1', 'HIST140'], ['s4', 'MATH101H'], ['s3', 'CHEM120'],
['s1', 'PHYS110'], ['s2', 'PHYS110'], ['s4', 'HIST140']],
{'MATH101': 0, 'MATH101H': 2, 'PHYS110': 7, 'CHEM120': 2, 'BIO130': 4, 'HIST140': 7, 'ECON150': 3}],
[14, 5, '14/5']),
('partial repair guard 3',
[[['s2', 'HIST140'], ['s2', 'BIO130'], ['s3', 'ECON150'], ['s3', 'MATH101H'], ['s3', 'CHEM120'],
['s4', 'HIST140'], ['s2', 'PHYS110'], ['s3', 'BIO130']],
{'MATH101': 3, 'MATH101H': 6, 'PHYS110': 7, 'CHEM120': 1, 'BIO130': 5, 'HIST140': 6, 'ECON150': 6}],
[76, 3, '76/3']),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),
('normal control 5',
[[['s1', 'ECON150'], ['s5', 'BIO130'], ['s5', 'PHYS110'], ['s5', 'HIST140'], ['s3', 'HIST140'],
['s2', 'PHYS110'], ['s2', 'HIST140'], ['s5', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'HIST140'],
['s2', 'BIO130'], ['s2', 'CHEM120']],
{'MATH101': 7, 'MATH101H': 5, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 7, 'HIST140': 0, 'ECON150': 2}],
[49, 4, '49/4']),
('normal control 6',
[[['s5', 'ECON150'], ['s2', 'HIST140'], ['s3', 'MATH101'], ['s3', 'PHYS110'], ['s3', 'MATH101'],
['s1', 'HIST140'], ['s3', 'MATH101H'], ['s4', 'CHEM120'], ['s4', 'MATH101'], ['s5', 'PHYS110'],
['s5', 'CHEM120'], ['s5', 'MATH101'], ['s2', 'MATH101'], ['s4', 'BIO130'], ['s4', 'PHYS110']],
{'MATH101': 5, 'MATH101H': 1, 'PHYS110': 3, 'CHEM120': 4, 'BIO130': 4, 'HIST140': 4, 'ECON150': 0}],
[153, 5, '153/5']),
('normal control 7',
[[['s3', 'CHEM120'], ['s4', 'CHEM120'], ['s4', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'PHYS110'],
['s3', 'CHEM120']],
{'MATH101': 1, 'MATH101H': 6, 'PHYS110': 4, 'CHEM120': 7, 'BIO130': 1, 'HIST140': 7, 'ECON150': 5}],
[8, 3, '8/3']),
('normal control 8',
[[['s4', 'BIO130'], ['s4', 'MATH101H'], ['s2', 'MATH101H'], ['s1', 'CHEM120'], ['s2', 'MATH101'],
['s1', 'MATH101'], ['s5', 'CHEM120'], ['s4', 'CHEM120'], ['s4', 'HIST140'], ['s1', 'MATH101']],
{'MATH101': 4, 'MATH101H': 2, 'PHYS110': 5, 'CHEM120': 1, 'BIO130': 4, 'HIST140': 0, 'ECON150': 3}],
[66, 4, '33/2'])],
[('regression: proximity window 1',
[[['s1', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130']],
{'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 1}],
[32, 2, '16']),
('regression variant: proximity window 2',
[[['s2', 'CHEM120'], ['s2', 'ECON150'], ['s2', 'PHYS110'], ['s1', 'MATH101H'], ['s1', 'HIST140']],
{'MATH101': 6, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 5, 'BIO130': 6, 'HIST140': 5, 'ECON150': 1}],
[19, 2, '19/2']),
('partial repair guard 3',
[[['s4', 'MATH101'], ['s3', 'PHYS110'], ['s1', 'CHEM120'], ['s3', 'MATH101'], ['s5', 'CHEM120'],
['s1', 'MATH101H'], ['s4', 'MATH101H'], ['s4', 'ECON150']],
{'MATH101': 3, 'MATH101H': 7, 'PHYS110': 7, 'CHEM120': 3, 'BIO130': 4, 'HIST140': 2, 'ECON150': 2}],
[23, 4, '23/4']),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 1}],
[16, 1, '16']),
('normal control 5',
[[['s5', 'ECON150'], ['s5', 'MATH101'], ['s4', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'MATH101H']],
{'MATH101': 6, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 4, 'BIO130': 6, 'HIST140': 1, 'ECON150': 3}],
[28, 2, '14']),
('normal control 6',
[[['s4', 'BIO130'], ['s4', 'HIST140'], ['s3', 'MATH101H'], ['s5', 'HIST140'], ['s4', 'PHYS110']],
{'MATH101': 4, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 6, 'HIST140': 5, 'ECON150': 4}],
[17, 3, '17/3']),
('normal control 7',
[[['s4', 'MATH101H'], ['s4', 'BIO130'], ['s2', 'MATH101H'], ['s4', 'PHYS110'], ['s5', 'BIO130'],
['s4', 'MATH101'], ['s2', 'HIST140'], ['s2', 'BIO130']],
{'MATH101': 4, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 5, 'BIO130': 0, 'HIST140': 6, 'ECON150': 5}],
[39, 3, '13']),
('normal control 8',
[[['s4', 'MATH101'], ['s4', 'PHYS110']],
{'MATH101': 5, 'MATH101H': 4, 'PHYS110': 5, 'CHEM120': 2, 'BIO130': 1, 'HIST140': 4, 'ECON150': 2}],
[0, 1, '0'])],
[('regression: proximity window 1',
[[['s3', 'CHEM120'], ['s1', 'MATH101'], ['s2', 'CHEM120'], ['s5', 'HIST140'], ['s5', 'BIO130'],
['s1', 'HIST140'], ['s1', 'CHEM120'], ['s1', 'BIO130'], ['s3', 'BIO130'], ['s2', 'MATH101H'],
['s2', 'MATH101'], ['s2', 'HIST140']],
{'MATH101': 2, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 5, 'BIO130': 4, 'HIST140': 0, 'ECON150': 0}],
[79, 4, '79/4']),
('regression variant: proximity window 2',
[[['s3', 'MATH101H'], ['s3', 'ECON150'], ['s5', 'BIO130'], ['s2', 'HIST140'], ['s1', 'MATH101'],
['s5', 'MATH101'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s1', 'PHYS110'], ['s5', 'MATH101H'],
['s5', 'ECON150'], ['s3', 'PHYS110']],
{'MATH101': 6, 'MATH101H': 3, 'PHYS110': 6, 'CHEM120': 4, 'BIO130': 3, 'HIST140': 5, 'ECON150': 7}],
[94, 4, '47/2']),
('partial repair guard 3',
[[['s3', 'MATH101H'], ['s1', 'PHYS110'], ['s3', 'BIO130'], ['s3', 'HIST140'], ['s4', 'BIO130'],
['s2', 'ECON150'], ['s5', 'PHYS110'], ['s1', 'CHEM120'], ['s1', 'HIST140'], ['s2', 'PHYS110'],
['s5', 'MATH101H'], ['s3', 'PHYS110'], ['s1', 'ECON150']],
{'MATH101': 7, 'MATH101H': 3, 'PHYS110': 1, 'CHEM120': 4, 'BIO130': 7, 'HIST140': 6, 'ECON150': 2}],
[94, 5, '94/5']),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}], [0, 1, '0']),
('boundary control 5', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),
('normal control 6',
[[['s3', 'MATH101H'], ['s2', 'MATH101'], ['s1', 'MATH101'], ['s4', 'CHEM120'], ['s4', 'PHYS110'],
['s4', 'HIST140'], ['s2', 'HIST140'], ['s4', 'HIST140'], ['s1', 'HIST140'], ['s3', 'MATH101'],
['s4', 'ECON150']],
{'MATH101': 4, 'MATH101H': 5, 'PHYS110': 4, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 2, 'ECON150': 0}],
[86, 4, '43/2']),
('normal control 7',
[[['s5', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'BIO130'], ['s5', 'ECON150'], ['s1', 'MATH101H'],
['s4', 'ECON150'], ['s5', 'MATH101'], ['s1', 'HIST140'], ['s1', 'MATH101'], ['s4', 'BIO130'],
['s4', 'MATH101H'], ['s2', 'MATH101'], ['s4', 'MATH101'], ['s1', 'CHEM120'], ['s2', 'CHEM120'],
['s2', 'PHYS110']],
{'MATH101': 4, 'MATH101H': 1, 'PHYS110': 1, 'CHEM120': 5, 'BIO130': 0, 'HIST140': 6, 'ECON150': 2}],
[190, 4, '95/2']),
('normal control 8',
[[['s5', 'ECON150'], ['s5', 'MATH101H'], ['s2', 'MATH101H'], ['s2', 'MATH101'], ['s4', 'BIO130'],
['s3', 'CHEM120'], ['s2', 'MATH101'], ['s4', 'PHYS110'], ['s2', 'ECON150'], ['s3', 'ECON150']],
{'MATH101': 1, 'MATH101H': 3, 'PHYS110': 4, 'CHEM120': 2, 'BIO130': 6, 'HIST140': 4, 'ECON150': 5}],
[38, 4, '19/2'])],
[('regression: proximity window 1',
[[['s1', 'MATH101H'], ['s2', 'BIO130'], ['s1', 'ECON150'], ['s1', 'ECON150'], ['s2', 'ECON150'],
['s3', 'MATH101'], ['s4', 'MATH101H'], ['s2', 'MATH101H'], ['s4', 'ECON150'], ['s2', 'PHYS110']],
{'MATH101': 6, 'MATH101H': 7, 'PHYS110': 4, 'CHEM120': 2, 'BIO130': 4, 'HIST140': 3, 'ECON150': 4}],
[20, 4, '5']),
('regression variant: proximity window 2',
[[['s4', 'MATH101H'], ['s3', 'MATH101'], ['s5', 'MATH101'], ['s3', 'BIO130'], ['s5', 'MATH101H'],
['s2', 'HIST140'], ['s5', 'HIST140'], ['s2', 'CHEM120'], ['s4', 'PHYS110'], ['s4', 'ECON150'],
['s1', 'MATH101'], ['s1', 'MATH101H']],
{'MATH101': 2, 'MATH101H': 7, 'PHYS110': 5, 'CHEM120': 7, 'BIO130': 2, 'HIST140': 2, 'ECON150': 6}],
[44, 5, '44/5']),
('partial repair guard 3',
[[['s5', 'BIO130'], ['s5', 'MATH101H'], ['s3', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'PHYS110'],
['s2', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'PHYS110'], ['s3', 'CHEM120'], ['s1', 'HIST140'],
['s2', 'BIO130'], ['s4', 'ECON150'], ['s2', 'PHYS110']],
{'MATH101': 6, 'MATH101H': 0, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 3, 'ECON150': 5}],
[91, 5, '91/5']),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 1}],
[16, 1, '16']),
('boundary control 5',
[[['s1', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130']],
{'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 1}],
[32, 2, '16']),
('normal control 6',
[[['s1', 'CHEM120'], ['s2', 'HIST140'], ['s1', 'HIST140'], ['s2', 'ECON150'], ['s4', 'PHYS110'],
['s4', 'MATH101H'], ['s3', 'PHYS110'], ['s3', 'CHEM120'], ['s5', 'ECON150'], ['s3', 'CHEM120'],
['s3', 'HIST140'], ['s3', 'MATH101'], ['s4', 'MATH101'], ['s4', 'HIST140']],
{'MATH101': 7, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 4, 'BIO130': 3, 'HIST140': 4, 'ECON150': 4}],
[40, 5, '8']),
('normal control 7',
[[['s4', 'MATH101'], ['s4', 'PHYS110'], ['s5', 'PHYS110'], ['s3', 'PHYS110'], ['s2', 'CHEM120'],
['s3', 'CHEM120'], ['s5', 'CHEM120']],
{'MATH101': 1, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 0, 'ECON150': 1}],
[16, 4, '4']),
('normal control 8',
[[['s5', 'MATH101H'], ['s5', 'PHYS110'], ['s3', 'ECON150'], ['s3', 'PHYS110']],
{'MATH101': 5, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 6, 'BIO130': 1, 'HIST140': 6, 'ECON150': 7}],
[18, 2, '9'])],
[('regression: proximity window 1',
[[['s5', 'PHYS110'], ['s4', 'ECON150'], ['s3', 'MATH101'], ['s3', 'PHYS110'], ['s2', 'CHEM120'],
['s2', 'ECON150'], ['s4', 'MATH101H'], ['s5', 'BIO130'], ['s4', 'HIST140'], ['s3', 'BIO130'],
['s4', 'PHYS110'], ['s3', 'ECON150'], ['s2', 'HIST140'], ['s5', 'MATH101'], ['s1', 'HIST140']],
{'MATH101': 3, 'MATH101H': 0, 'PHYS110': 0, 'CHEM120': 6, 'BIO130': 0, 'HIST140': 0, 'ECON150': 2}],
[82, 5, '82/5']),
('regression variant: proximity window 2',
[[['s2', 'CHEM120'], ['s4', 'ECON150'], ['s4', 'CHEM120'], ['s4', 'HIST140'], ['s5', 'MATH101H'],
['s2', 'MATH101'], ['s5', 'ECON150'], ['s2', 'PHYS110'], ['s2', 'ECON150']],
{'MATH101': 3, 'MATH101H': 3, 'PHYS110': 5, 'CHEM120': 6, 'BIO130': 2, 'HIST140': 4, 'ECON150': 5}],
[100, 3, '100/3']),
('partial repair guard 3',
[[['s1', 'MATH101H'], ['s5', 'HIST140'], ['s5', 'BIO130'], ['s1', 'MATH101'], ['s5', 'BIO130'],
['s5', 'MATH101']],
{'MATH101': 7, 'MATH101H': 2, 'PHYS110': 7, 'CHEM120': 5, 'BIO130': 7, 'HIST140': 0, 'ECON150': 7}],
[1, 2, '1/2']),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}], [0, 1, '0']),
('boundary control 5', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),
('normal control 6',
[[['s1', 'ECON150'], ['s5', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'HIST140'], ['s4', 'MATH101'],
['s4', 'MATH101'], ['s1', 'PHYS110']],
{'MATH101': 1, 'MATH101H': 4, 'PHYS110': 6, 'CHEM120': 4, 'BIO130': 5, 'HIST140': 2, 'ECON150': 3}],
[30, 3, '10']),
('normal control 7',
[[['s4', 'BIO130'], ['s4', 'CHEM120'], ['s4', 'ECON150']],
{'MATH101': 4, 'MATH101H': 4, 'PHYS110': 5, 'CHEM120': 4, 'BIO130': 4, 'HIST140': 1, 'ECON150': 5}],
[32, 1, '32']),
('normal control 8',
[[['s3', 'HIST140'], ['s3', 'MATH101'], ['s4', 'BIO130'], ['s4', 'MATH101'], ['s4', 'CHEM120'],
['s4', 'MATH101'], ['s1', 'HIST140'], ['s1', 'ECON150'], ['s1', 'MATH101'], ['s3', 'MATH101H'],
['s3', 'CHEM120']],
{'MATH101': 6, 'MATH101H': 3, 'PHYS110': 7, 'CHEM120': 6, 'BIO130': 0, 'HIST140': 5, 'ECON150': 3}],
[76, 3, '76/3'])]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: proximity window 1 | [0, 1, '0'] | [0, 1, '0'] | Passed |
| regression variant: proximity window 2 | [12, 5, '12/5'] | [14, 5, '14/5'] | Failed |
| partial repair guard 3 | [74, 3, '74/3'] | [76, 3, '76/3'] | Failed |
| boundary control 4 | [0, 1, '0'] | [0, 1, '0'] | Passed |
| normal control 5 | [44, 4, '11'] | [49, 4, '49/4'] | Failed |
| normal control 6 | [152, 5, '152/5'] | [153, 5, '153/5'] | Failed |
| normal control 7 | [8, 3, '8/3'] | [8, 3, '8/3'] | Passed |
| normal control 8 | [66, 4, '33/2'] | [66, 4, '33/2'] | Passed |
SHA-256 / 7e1a22d5eaa4589fad65ddfd1c8283e4427c164fd90bdcdd7b3032556fb72df8
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(enrol, period):
by = {}
for st, ex in enrol:
by.setdefault(st, set()).add(ex)
total = 0
for st, exs in by.items():
ps = sorted(period[e] for e in exs)
for i in range(len(ps)):
for j in range(i + 1, len(ps)):
d = ps[j] - ps[i]
if 1 <= d <= 5:
total += 2 ** (5 - d)
n = len(by)
return [total, n, str(Fraction(total, n)) if n else '0']
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: proximity window 1', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}],
[0, 1, '0']),
('regression variant: proximity window 2',
[[['s4', 'CHEM120'], ['s2', 'BIO130'], ['s3', 'MATH101H'], ['s5', 'MATH101H'], ['s1', 'ECON150'],
['s5', 'CHEM120'], ['s1', 'MATH101'], ['s1', 'HIST140'], ['s4', 'MATH101H'], ['s3', 'CHEM120'],
['s1', 'PHYS110'], ['s2', 'PHYS110'], ['s4', 'HIST140']],
{'MATH101': 0, 'MATH101H': 2, 'PHYS110': 7, 'CHEM120': 2, 'BIO130': 4, 'HIST140': 7, 'ECON150': 3}],
[14, 5, '14/5']),
('partial repair guard 3',
[[['s2', 'HIST140'], ['s2', 'BIO130'], ['s3', 'ECON150'], ['s3', 'MATH101H'], ['s3', 'CHEM120'],
['s4', 'HIST140'], ['s2', 'PHYS110'], ['s3', 'BIO130']],
{'MATH101': 3, 'MATH101H': 6, 'PHYS110': 7, 'CHEM120': 1, 'BIO130': 5, 'HIST140': 6, 'ECON150': 6}],
[76, 3, '76/3']),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),
('normal control 5',
[[['s1', 'ECON150'], ['s5', 'BIO130'], ['s5', 'PHYS110'], ['s5', 'HIST140'], ['s3', 'HIST140'],
['s2', 'PHYS110'], ['s2', 'HIST140'], ['s5', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'HIST140'],
['s2', 'BIO130'], ['s2', 'CHEM120']],
{'MATH101': 7, 'MATH101H': 5, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 7, 'HIST140': 0, 'ECON150': 2}],
[49, 4, '49/4']),
('normal control 6',
[[['s5', 'ECON150'], ['s2', 'HIST140'], ['s3', 'MATH101'], ['s3', 'PHYS110'], ['s3', 'MATH101'],
['s1', 'HIST140'], ['s3', 'MATH101H'], ['s4', 'CHEM120'], ['s4', 'MATH101'], ['s5', 'PHYS110'],
['s5', 'CHEM120'], ['s5', 'MATH101'], ['s2', 'MATH101'], ['s4', 'BIO130'], ['s4', 'PHYS110']],
{'MATH101': 5, 'MATH101H': 1, 'PHYS110': 3, 'CHEM120': 4, 'BIO130': 4, 'HIST140': 4, 'ECON150': 0}],
[153, 5, '153/5']),
('normal control 7',
[[['s3', 'CHEM120'], ['s4', 'CHEM120'], ['s4', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'PHYS110'],
['s3', 'CHEM120']],
{'MATH101': 1, 'MATH101H': 6, 'PHYS110': 4, 'CHEM120': 7, 'BIO130': 1, 'HIST140': 7, 'ECON150': 5}],
[8, 3, '8/3']),
('normal control 8',
[[['s4', 'BIO130'], ['s4', 'MATH101H'], ['s2', 'MATH101H'], ['s1', 'CHEM120'], ['s2', 'MATH101'],
['s1', 'MATH101'], ['s5', 'CHEM120'], ['s4', 'CHEM120'], ['s4', 'HIST140'], ['s1', 'MATH101']],
{'MATH101': 4, 'MATH101H': 2, 'PHYS110': 5, 'CHEM120': 1, 'BIO130': 4, 'HIST140': 0, 'ECON150': 3}],
[66, 4, '33/2'])],
[('regression: proximity window 1',
[[['s1', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130']],
{'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 1}],
[32, 2, '16']),
('regression variant: proximity window 2',
[[['s2', 'CHEM120'], ['s2', 'ECON150'], ['s2', 'PHYS110'], ['s1', 'MATH101H'], ['s1', 'HIST140']],
{'MATH101': 6, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 5, 'BIO130': 6, 'HIST140': 5, 'ECON150': 1}],
[19, 2, '19/2']),
('partial repair guard 3',
[[['s4', 'MATH101'], ['s3', 'PHYS110'], ['s1', 'CHEM120'], ['s3', 'MATH101'], ['s5', 'CHEM120'],
['s1', 'MATH101H'], ['s4', 'MATH101H'], ['s4', 'ECON150']],
{'MATH101': 3, 'MATH101H': 7, 'PHYS110': 7, 'CHEM120': 3, 'BIO130': 4, 'HIST140': 2, 'ECON150': 2}],
[23, 4, '23/4']),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 1}],
[16, 1, '16']),
('normal control 5',
[[['s5', 'ECON150'], ['s5', 'MATH101'], ['s4', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'MATH101H']],
{'MATH101': 6, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 4, 'BIO130': 6, 'HIST140': 1, 'ECON150': 3}],
[28, 2, '14']),
('normal control 6',
[[['s4', 'BIO130'], ['s4', 'HIST140'], ['s3', 'MATH101H'], ['s5', 'HIST140'], ['s4', 'PHYS110']],
{'MATH101': 4, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 6, 'HIST140': 5, 'ECON150': 4}],
[17, 3, '17/3']),
('normal control 7',
[[['s4', 'MATH101H'], ['s4', 'BIO130'], ['s2', 'MATH101H'], ['s4', 'PHYS110'], ['s5', 'BIO130'],
['s4', 'MATH101'], ['s2', 'HIST140'], ['s2', 'BIO130']],
{'MATH101': 4, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 5, 'BIO130': 0, 'HIST140': 6, 'ECON150': 5}],
[39, 3, '13']),
('normal control 8',
[[['s4', 'MATH101'], ['s4', 'PHYS110']],
{'MATH101': 5, 'MATH101H': 4, 'PHYS110': 5, 'CHEM120': 2, 'BIO130': 1, 'HIST140': 4, 'ECON150': 2}],
[0, 1, '0'])],
[('regression: proximity window 1',
[[['s3', 'CHEM120'], ['s1', 'MATH101'], ['s2', 'CHEM120'], ['s5', 'HIST140'], ['s5', 'BIO130'],
['s1', 'HIST140'], ['s1', 'CHEM120'], ['s1', 'BIO130'], ['s3', 'BIO130'], ['s2', 'MATH101H'],
['s2', 'MATH101'], ['s2', 'HIST140']],
{'MATH101': 2, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 5, 'BIO130': 4, 'HIST140': 0, 'ECON150': 0}],
[79, 4, '79/4']),
('regression variant: proximity window 2',
[[['s3', 'MATH101H'], ['s3', 'ECON150'], ['s5', 'BIO130'], ['s2', 'HIST140'], ['s1', 'MATH101'],
['s5', 'MATH101'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s1', 'PHYS110'], ['s5', 'MATH101H'],
['s5', 'ECON150'], ['s3', 'PHYS110']],
{'MATH101': 6, 'MATH101H': 3, 'PHYS110': 6, 'CHEM120': 4, 'BIO130': 3, 'HIST140': 5, 'ECON150': 7}],
[94, 4, '47/2']),
('partial repair guard 3',
[[['s3', 'MATH101H'], ['s1', 'PHYS110'], ['s3', 'BIO130'], ['s3', 'HIST140'], ['s4', 'BIO130'],
['s2', 'ECON150'], ['s5', 'PHYS110'], ['s1', 'CHEM120'], ['s1', 'HIST140'], ['s2', 'PHYS110'],
['s5', 'MATH101H'], ['s3', 'PHYS110'], ['s1', 'ECON150']],
{'MATH101': 7, 'MATH101H': 3, 'PHYS110': 1, 'CHEM120': 4, 'BIO130': 7, 'HIST140': 6, 'ECON150': 2}],
[94, 5, '94/5']),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}], [0, 1, '0']),
('boundary control 5', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),
('normal control 6',
[[['s3', 'MATH101H'], ['s2', 'MATH101'], ['s1', 'MATH101'], ['s4', 'CHEM120'], ['s4', 'PHYS110'],
['s4', 'HIST140'], ['s2', 'HIST140'], ['s4', 'HIST140'], ['s1', 'HIST140'], ['s3', 'MATH101'],
['s4', 'ECON150']],
{'MATH101': 4, 'MATH101H': 5, 'PHYS110': 4, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 2, 'ECON150': 0}],
[86, 4, '43/2']),
('normal control 7',
[[['s5', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'BIO130'], ['s5', 'ECON150'], ['s1', 'MATH101H'],
['s4', 'ECON150'], ['s5', 'MATH101'], ['s1', 'HIST140'], ['s1', 'MATH101'], ['s4', 'BIO130'],
['s4', 'MATH101H'], ['s2', 'MATH101'], ['s4', 'MATH101'], ['s1', 'CHEM120'], ['s2', 'CHEM120'],
['s2', 'PHYS110']],
{'MATH101': 4, 'MATH101H': 1, 'PHYS110': 1, 'CHEM120': 5, 'BIO130': 0, 'HIST140': 6, 'ECON150': 2}],
[190, 4, '95/2']),
('normal control 8',
[[['s5', 'ECON150'], ['s5', 'MATH101H'], ['s2', 'MATH101H'], ['s2', 'MATH101'], ['s4', 'BIO130'],
['s3', 'CHEM120'], ['s2', 'MATH101'], ['s4', 'PHYS110'], ['s2', 'ECON150'], ['s3', 'ECON150']],
{'MATH101': 1, 'MATH101H': 3, 'PHYS110': 4, 'CHEM120': 2, 'BIO130': 6, 'HIST140': 4, 'ECON150': 5}],
[38, 4, '19/2'])],
[('regression: proximity window 1',
[[['s1', 'MATH101H'], ['s2', 'BIO130'], ['s1', 'ECON150'], ['s1', 'ECON150'], ['s2', 'ECON150'],
['s3', 'MATH101'], ['s4', 'MATH101H'], ['s2', 'MATH101H'], ['s4', 'ECON150'], ['s2', 'PHYS110']],
{'MATH101': 6, 'MATH101H': 7, 'PHYS110': 4, 'CHEM120': 2, 'BIO130': 4, 'HIST140': 3, 'ECON150': 4}],
[20, 4, '5']),
('regression variant: proximity window 2',
[[['s4', 'MATH101H'], ['s3', 'MATH101'], ['s5', 'MATH101'], ['s3', 'BIO130'], ['s5', 'MATH101H'],
['s2', 'HIST140'], ['s5', 'HIST140'], ['s2', 'CHEM120'], ['s4', 'PHYS110'], ['s4', 'ECON150'],
['s1', 'MATH101'], ['s1', 'MATH101H']],
{'MATH101': 2, 'MATH101H': 7, 'PHYS110': 5, 'CHEM120': 7, 'BIO130': 2, 'HIST140': 2, 'ECON150': 6}],
[44, 5, '44/5']),
('partial repair guard 3',
[[['s5', 'BIO130'], ['s5', 'MATH101H'], ['s3', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'PHYS110'],
['s2', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'PHYS110'], ['s3', 'CHEM120'], ['s1', 'HIST140'],
['s2', 'BIO130'], ['s4', 'ECON150'], ['s2', 'PHYS110']],
{'MATH101': 6, 'MATH101H': 0, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 3, 'ECON150': 5}],
[91, 5, '91/5']),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 1}],
[16, 1, '16']),
('boundary control 5',
[[['s1', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130']],
{'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 1}],
[32, 2, '16']),
('normal control 6',
[[['s1', 'CHEM120'], ['s2', 'HIST140'], ['s1', 'HIST140'], ['s2', 'ECON150'], ['s4', 'PHYS110'],
['s4', 'MATH101H'], ['s3', 'PHYS110'], ['s3', 'CHEM120'], ['s5', 'ECON150'], ['s3', 'CHEM120'],
['s3', 'HIST140'], ['s3', 'MATH101'], ['s4', 'MATH101'], ['s4', 'HIST140']],
{'MATH101': 7, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 4, 'BIO130': 3, 'HIST140': 4, 'ECON150': 4}],
[40, 5, '8']),
('normal control 7',
[[['s4', 'MATH101'], ['s4', 'PHYS110'], ['s5', 'PHYS110'], ['s3', 'PHYS110'], ['s2', 'CHEM120'],
['s3', 'CHEM120'], ['s5', 'CHEM120']],
{'MATH101': 1, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 0, 'ECON150': 1}],
[16, 4, '4']),
('normal control 8',
[[['s5', 'MATH101H'], ['s5', 'PHYS110'], ['s3', 'ECON150'], ['s3', 'PHYS110']],
{'MATH101': 5, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 6, 'BIO130': 1, 'HIST140': 6, 'ECON150': 7}],
[18, 2, '9'])],
[('regression: proximity window 1',
[[['s5', 'PHYS110'], ['s4', 'ECON150'], ['s3', 'MATH101'], ['s3', 'PHYS110'], ['s2', 'CHEM120'],
['s2', 'ECON150'], ['s4', 'MATH101H'], ['s5', 'BIO130'], ['s4', 'HIST140'], ['s3', 'BIO130'],
['s4', 'PHYS110'], ['s3', 'ECON150'], ['s2', 'HIST140'], ['s5', 'MATH101'], ['s1', 'HIST140']],
{'MATH101': 3, 'MATH101H': 0, 'PHYS110': 0, 'CHEM120': 6, 'BIO130': 0, 'HIST140': 0, 'ECON150': 2}],
[82, 5, '82/5']),
('regression variant: proximity window 2',
[[['s2', 'CHEM120'], ['s4', 'ECON150'], ['s4', 'CHEM120'], ['s4', 'HIST140'], ['s5', 'MATH101H'],
['s2', 'MATH101'], ['s5', 'ECON150'], ['s2', 'PHYS110'], ['s2', 'ECON150']],
{'MATH101': 3, 'MATH101H': 3, 'PHYS110': 5, 'CHEM120': 6, 'BIO130': 2, 'HIST140': 4, 'ECON150': 5}],
[100, 3, '100/3']),
('partial repair guard 3',
[[['s1', 'MATH101H'], ['s5', 'HIST140'], ['s5', 'BIO130'], ['s1', 'MATH101'], ['s5', 'BIO130'],
['s5', 'MATH101']],
{'MATH101': 7, 'MATH101H': 2, 'PHYS110': 7, 'CHEM120': 5, 'BIO130': 7, 'HIST140': 0, 'ECON150': 7}],
[1, 2, '1/2']),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}], [0, 1, '0']),
('boundary control 5', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),
('normal control 6',
[[['s1', 'ECON150'], ['s5', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'HIST140'], ['s4', 'MATH101'],
['s4', 'MATH101'], ['s1', 'PHYS110']],
{'MATH101': 1, 'MATH101H': 4, 'PHYS110': 6, 'CHEM120': 4, 'BIO130': 5, 'HIST140': 2, 'ECON150': 3}],
[30, 3, '10']),
('normal control 7',
[[['s4', 'BIO130'], ['s4', 'CHEM120'], ['s4', 'ECON150']],
{'MATH101': 4, 'MATH101H': 4, 'PHYS110': 5, 'CHEM120': 4, 'BIO130': 4, 'HIST140': 1, 'ECON150': 5}],
[32, 1, '32']),
('normal control 8',
[[['s3', 'HIST140'], ['s3', 'MATH101'], ['s4', 'BIO130'], ['s4', 'MATH101'], ['s4', 'CHEM120'],
['s4', 'MATH101'], ['s1', 'HIST140'], ['s1', 'ECON150'], ['s1', 'MATH101'], ['s3', 'MATH101H'],
['s3', 'CHEM120']],
{'MATH101': 6, 'MATH101H': 3, 'PHYS110': 7, 'CHEM120': 6, 'BIO130': 0, 'HIST140': 5, 'ECON150': 3}],
[76, 3, '76/3'])]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: proximity window 1 | [0, 1, '0'] | [0, 1, '0'] | Passed |
| regression variant: proximity window 2 | [14, 5, '14/5'] | [14, 5, '14/5'] | Passed |
| partial repair guard 3 | [76, 3, '76/3'] | [76, 3, '76/3'] | Passed |
| boundary control 4 | [0, 1, '0'] | [0, 1, '0'] | Passed |
| normal control 5 | [49, 4, '49/4'] | [49, 4, '49/4'] | Passed |
| normal control 6 | [153, 5, '153/5'] | [153, 5, '153/5'] | Passed |
| normal control 7 | [8, 3, '8/3'] | [8, 3, '8/3'] | Passed |
| normal control 8 | [66, 4, '33/2'] | [66, 4, '33/2'] | Passed |
SHA-256 / bafd980547c6a681cc49a582cc003405dbc5edef3c4c0f012d163913a983a73a
Verification & scope
Stipulated toy exam-timetabling rule set for a bounded model; it does not claim conformance with any institution's regulations or a benchmark specification, and it performs no search or optimisation. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:52:04.172215+00:00.
Case digest / 6801cf80044279c4dd410873d8d8ae224e161e66f87a867a11c5040aef1fcb9a