FA-94786 / Exam timetabling constraints / Open access
Evening slot detected from the day number · case 01
Evening-morning sequences are only found on one particular day.
ROOT CAUSE
The last-slot test divides instead of taking the remainder.
VERIFIED REPAIR
The last slot of a day is p % spd == spd - 1.
Unsuccessful approach: Treating the last two slots as evening flags same-day adjacent periods.
Case contract
sits [student, period] with spd periods per day (day = p // spd). Report ["day", student, day] when a student has more than maxday distinct periods on a day, and ["eve_morn", student, day] when a student sits the last period of a day and the first period of the next day. Rows by student: day findings by day, then evening-morning findings.
Why this case matters
Daily exam limits and evening-then-morning sequences are common student-welfare rules.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(sits, spd, maxday):
by = {}
for st, p in sits:
by.setdefault(st, set()).add(p)
out = []
for st in sorted(by):
ps = by[st]
days = {}
for p in ps:
days[p // spd] = days.get(p // spd, 0) + 1
for d in sorted(days):
if days[d] > maxday:
out.append(['day', st, d])
for p in sorted(ps):
if p // spd == spd - 1 and p + 1 in ps:
out.append(['eve_morn', st, p // spd])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: last slot detection 1', [[['s1', 2], ['s1', 3]], 3, 2], [['eve_morn', 's1', 0]]),
('regression variant: last slot detection 2',
[[['s2', 3], ['s1', 4], ['s3', 2], ['s2', 2], ['s2', 4]], 2, 2], [['eve_morn', 's2', 1]]),
('partial repair guard 3',
[[['s2', 4], ['s3', 3], ['s2', 4], ['s2', 5], ['s3', 5], ['s1', 1], ['s3', 3], ['s2', 2]], 2, 2], []),
('boundary control 4', [[['s1', 0], ['s1', 1], ['s1', 2]], 3, 2], [['day', 's1', 0]]),
('normal control 5', [[['s1', 6], ['s1', 3], ['s1', 6], ['s3', 0], ['s1', 8]], 3, 2], []),
('normal control 6',
[[['s3', 6], ['s2', 0], ['s3', 0], ['s2', 1], ['s1', 3], ['s2', 1], ['s1', 6], ['s2', 7]], 3, 1],
[['day', 's2', 0]]),
('normal control 7', [[['s3', 0], ['s2', 10], ['s3', 0], ['s3', 5], ['s1', 4]], 4, 1], []),
('normal control 8', [[['s2', 5], ['s1', 4], ['s1', 5], ['s2', 5], ['s3', 4], ['s2', 4]], 2, 2], [])],
[('regression: last slot detection 1', [[['s1', 5], ['s1', 6]], 3, 2], [['eve_morn', 's1', 1]]),
('regression variant: last slot detection 2',
[[['s3', 2], ['s1', 5], ['s1', 2], ['s1', 0], ['s1', 4], ['s1', 1], ['s2', 3], ['s2', 0]], 2, 2],
[['eve_morn', 's1', 0]]),
('partial repair guard 3', [[['s2', 3], ['s1', 4], ['s3', 2], ['s2', 2], ['s2', 4]], 2, 2],
[['eve_morn', 's2', 1]]),
('boundary control 4', [[['s1', 1], ['s1', 2]], 3, 2], []),
('normal control 5', [[['s3', 6], ['s2', 0], ['s2', 0], ['s2', 5], ['s3', 4], ['s1', 4], ['s3', 3]], 3, 2],
[]),
('normal control 6', [[['s2', 5], ['s3', 0], ['s1', 5], ['s1', 2], ['s1', 5]], 2, 1], []),
('normal control 7', [[['s2', 0], ['s1', 3], ['s2', 4], ['s1', 5]], 2, 1], []),
('normal control 8', [[['s1', 11], ['s2', 11], ['s3', 6], ['s1', 2]], 4, 1], [])],
[('regression: last slot detection 1', [[['s2', 2], ['s1', 0], ['s2', 3], ['s3', 2], ['s3', 3]], 2, 1],
[['day', 's2', 1], ['day', 's3', 1]]),
('regression variant: last slot detection 2',
[[['s2', 3], ['s1', 3], ['s2', 1], ['s1', 4], ['s3', 8], ['s3', 1], ['s1', 2]], 4, 2],
[['eve_morn', 's1', 0]]),
('partial repair guard 3',
[[['s3', 2], ['s1', 2], ['s2', 8], ['s2', 0], ['s3', 1], ['s3', 7], ['s1', 2], ['s1', 7]], 3, 1],
[['day', 's3', 0]]),
('boundary control 4', [[['s1', 5], ['s1', 6]], 3, 2], [['eve_morn', 's1', 1]]),
('normal control 5', [[['s3', 0], ['s3', 5], ['s1', 5], ['s3', 3], ['s2', 3], ['s3', 3]], 3, 2], []),
('normal control 6', [[['s3', 11], ['s3', 10]], 4, 2], []),
('normal control 7', [[['s1', 1], ['s1', 2], ['s1', 6]], 4, 2], []),
('normal control 8', [[['s3', 2], ['s1', 0], ['s3', 3], ['s2', 2], ['s2', 2], ['s1', 8], ['s2', 8]], 3, 2],
[['eve_morn', 's3', 0]])],
[('regression: last slot detection 1',
[[['s2', 6], ['s3', 0], ['s2', 5], ['s2', 8], ['s3', 8], ['s1', 3]], 3, 1],
[['day', 's2', 2], ['eve_morn', 's2', 1]]),
('regression variant: last slot detection 2',
[[['s2', 3], ['s1', 3], ['s2', 2], ['s2', 4], ['s2', 3], ['s3', 5]], 2, 1],
[['day', 's2', 1], ['eve_morn', 's2', 1]]),
('partial repair guard 3', [[['s1', 1], ['s3', 0], ['s3', 2], ['s3', 1], ['s3', 4]], 2, 1],
[['day', 's3', 0], ['eve_morn', 's3', 0]]),
('boundary control 4', [[['s1', 0], ['s1', 1]], 3, 2], []),
('normal control 5', [[['s2', 9], ['s2', 9], ['s2', 11], ['s1', 10]], 4, 1], [['day', 's2', 2]]),
('normal control 6', [[['s3', 11], ['s3', 10]], 4, 2], []),
('normal control 7',
[[['s3', 8], ['s1', 3], ['s1', 3], ['s1', 5], ['s3', 6], ['s1', 8], ['s3', 8], ['s3', 0]], 3, 2], []),
('normal control 8', [[['s1', 3], ['s3', 2], ['s1', 3]], 3, 1], [])],
[('regression: last slot detection 1',
[[['s3', 7], ['s2', 5], ['s1', 6], ['s2', 4], ['s1', 2], ['s3', 8], ['s3', 3], ['s3', 2]], 3, 2],
[['eve_morn', 's3', 0]]),
('regression variant: last slot detection 2',
[[['s1', 3], ['s3', 8], ['s1', 11], ['s3', 10], ['s3', 7], ['s1', 1]], 4, 1],
[['day', 's1', 0], ['day', 's3', 2], ['eve_morn', 's3', 1]]),
('partial repair guard 3',
[[['s2', 4], ['s3', 3], ['s1', 2], ['s1', 3], ['s2', 0], ['s1', 1], ['s1', 1], ['s3', 5]], 2, 2],
[['eve_morn', 's1', 0]]),
('boundary control 4', [[['s1', 2], ['s1', 3]], 3, 2], [['eve_morn', 's1', 0]]),
('normal control 5', [[['s1', 1], ['s3', 2]], 4, 1], []),
('normal control 6', [[['s1', 4], ['s2', 3], ['s1', 1]], 4, 1], []),
('normal control 7', [[['s3', 3], ['s2', 4]], 4, 1], []),
('normal control 8', [[['s2', 5], ['s3', 8], ['s3', 4], ['s1', 7], ['s3', 5], ['s3', 2]], 3, 2], [])]]
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: last slot detection 1 | [] | [['eve_morn', 's1', 0]] | Failed |
| regression variant: last slot detection 2 | [['eve_morn', 's2', 1], ['eve_morn', 's2', 1]] | [['eve_morn', 's2', 1]] | Failed |
| partial repair guard 3 | [] | [] | Passed |
| boundary control 4 | [['day', 's1', 0]] | [['day', 's1', 0]] | Passed |
| normal control 5 | [] | [] | Passed |
| normal control 6 | [['day', 's2', 0]] | [['day', 's2', 0]] | Passed |
| normal control 7 | [] | [] | Passed |
| normal control 8 | [] | [] | Passed |
SHA-256 / 10ed00fd65f410cffab898cb076c7b0c9b269b9b8b91d90c8c4c27c4e9938487
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(sits, spd, maxday):
by = {}
for st, p in sits:
by.setdefault(st, set()).add(p)
out = []
for st in sorted(by):
ps = by[st]
days = {}
for p in ps:
days[p // spd] = days.get(p // spd, 0) + 1
for d in sorted(days):
if days[d] > maxday:
out.append(['day', st, d])
for p in sorted(ps):
if p % spd >= spd - 2 and p + 1 in ps:
out.append(['eve_morn', st, p // spd])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: last slot detection 1', [[['s1', 2], ['s1', 3]], 3, 2], [['eve_morn', 's1', 0]]),
('regression variant: last slot detection 2',
[[['s2', 3], ['s1', 4], ['s3', 2], ['s2', 2], ['s2', 4]], 2, 2], [['eve_morn', 's2', 1]]),
('partial repair guard 3',
[[['s2', 4], ['s3', 3], ['s2', 4], ['s2', 5], ['s3', 5], ['s1', 1], ['s3', 3], ['s2', 2]], 2, 2], []),
('boundary control 4', [[['s1', 0], ['s1', 1], ['s1', 2]], 3, 2], [['day', 's1', 0]]),
('normal control 5', [[['s1', 6], ['s1', 3], ['s1', 6], ['s3', 0], ['s1', 8]], 3, 2], []),
('normal control 6',
[[['s3', 6], ['s2', 0], ['s3', 0], ['s2', 1], ['s1', 3], ['s2', 1], ['s1', 6], ['s2', 7]], 3, 1],
[['day', 's2', 0]]),
('normal control 7', [[['s3', 0], ['s2', 10], ['s3', 0], ['s3', 5], ['s1', 4]], 4, 1], []),
('normal control 8', [[['s2', 5], ['s1', 4], ['s1', 5], ['s2', 5], ['s3', 4], ['s2', 4]], 2, 2], [])],
[('regression: last slot detection 1', [[['s1', 5], ['s1', 6]], 3, 2], [['eve_morn', 's1', 1]]),
('regression variant: last slot detection 2',
[[['s3', 2], ['s1', 5], ['s1', 2], ['s1', 0], ['s1', 4], ['s1', 1], ['s2', 3], ['s2', 0]], 2, 2],
[['eve_morn', 's1', 0]]),
('partial repair guard 3', [[['s2', 3], ['s1', 4], ['s3', 2], ['s2', 2], ['s2', 4]], 2, 2],
[['eve_morn', 's2', 1]]),
('boundary control 4', [[['s1', 1], ['s1', 2]], 3, 2], []),
('normal control 5', [[['s3', 6], ['s2', 0], ['s2', 0], ['s2', 5], ['s3', 4], ['s1', 4], ['s3', 3]], 3, 2],
[]),
('normal control 6', [[['s2', 5], ['s3', 0], ['s1', 5], ['s1', 2], ['s1', 5]], 2, 1], []),
('normal control 7', [[['s2', 0], ['s1', 3], ['s2', 4], ['s1', 5]], 2, 1], []),
('normal control 8', [[['s1', 11], ['s2', 11], ['s3', 6], ['s1', 2]], 4, 1], [])],
[('regression: last slot detection 1', [[['s2', 2], ['s1', 0], ['s2', 3], ['s3', 2], ['s3', 3]], 2, 1],
[['day', 's2', 1], ['day', 's3', 1]]),
('regression variant: last slot detection 2',
[[['s2', 3], ['s1', 3], ['s2', 1], ['s1', 4], ['s3', 8], ['s3', 1], ['s1', 2]], 4, 2],
[['eve_morn', 's1', 0]]),
('partial repair guard 3',
[[['s3', 2], ['s1', 2], ['s2', 8], ['s2', 0], ['s3', 1], ['s3', 7], ['s1', 2], ['s1', 7]], 3, 1],
[['day', 's3', 0]]),
('boundary control 4', [[['s1', 5], ['s1', 6]], 3, 2], [['eve_morn', 's1', 1]]),
('normal control 5', [[['s3', 0], ['s3', 5], ['s1', 5], ['s3', 3], ['s2', 3], ['s3', 3]], 3, 2], []),
('normal control 6', [[['s3', 11], ['s3', 10]], 4, 2], []),
('normal control 7', [[['s1', 1], ['s1', 2], ['s1', 6]], 4, 2], []),
('normal control 8', [[['s3', 2], ['s1', 0], ['s3', 3], ['s2', 2], ['s2', 2], ['s1', 8], ['s2', 8]], 3, 2],
[['eve_morn', 's3', 0]])],
[('regression: last slot detection 1',
[[['s2', 6], ['s3', 0], ['s2', 5], ['s2', 8], ['s3', 8], ['s1', 3]], 3, 1],
[['day', 's2', 2], ['eve_morn', 's2', 1]]),
('regression variant: last slot detection 2',
[[['s2', 3], ['s1', 3], ['s2', 2], ['s2', 4], ['s2', 3], ['s3', 5]], 2, 1],
[['day', 's2', 1], ['eve_morn', 's2', 1]]),
('partial repair guard 3', [[['s1', 1], ['s3', 0], ['s3', 2], ['s3', 1], ['s3', 4]], 2, 1],
[['day', 's3', 0], ['eve_morn', 's3', 0]]),
('boundary control 4', [[['s1', 0], ['s1', 1]], 3, 2], []),
('normal control 5', [[['s2', 9], ['s2', 9], ['s2', 11], ['s1', 10]], 4, 1], [['day', 's2', 2]]),
('normal control 6', [[['s3', 11], ['s3', 10]], 4, 2], []),
('normal control 7',
[[['s3', 8], ['s1', 3], ['s1', 3], ['s1', 5], ['s3', 6], ['s1', 8], ['s3', 8], ['s3', 0]], 3, 2], []),
('normal control 8', [[['s1', 3], ['s3', 2], ['s1', 3]], 3, 1], [])],
[('regression: last slot detection 1',
[[['s3', 7], ['s2', 5], ['s1', 6], ['s2', 4], ['s1', 2], ['s3', 8], ['s3', 3], ['s3', 2]], 3, 2],
[['eve_morn', 's3', 0]]),
('regression variant: last slot detection 2',
[[['s1', 3], ['s3', 8], ['s1', 11], ['s3', 10], ['s3', 7], ['s1', 1]], 4, 1],
[['day', 's1', 0], ['day', 's3', 2], ['eve_morn', 's3', 1]]),
('partial repair guard 3',
[[['s2', 4], ['s3', 3], ['s1', 2], ['s1', 3], ['s2', 0], ['s1', 1], ['s1', 1], ['s3', 5]], 2, 2],
[['eve_morn', 's1', 0]]),
('boundary control 4', [[['s1', 2], ['s1', 3]], 3, 2], [['eve_morn', 's1', 0]]),
('normal control 5', [[['s1', 1], ['s3', 2]], 4, 1], []),
('normal control 6', [[['s1', 4], ['s2', 3], ['s1', 1]], 4, 1], []),
('normal control 7', [[['s3', 3], ['s2', 4]], 4, 1], []),
('normal control 8', [[['s2', 5], ['s3', 8], ['s3', 4], ['s1', 7], ['s3', 5], ['s3', 2]], 3, 2], [])]]
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: last slot detection 1 | [['eve_morn', 's1', 0]] | [['eve_morn', 's1', 0]] | Passed |
| regression variant: last slot detection 2 | [['eve_morn', 's2', 1], ['eve_morn', 's2', 1]] | [['eve_morn', 's2', 1]] | Failed |
| partial repair guard 3 | [['eve_morn', 's2', 2]] | [] | Failed |
| boundary control 4 | [['day', 's1', 0], ['eve_morn', 's1', 0]] | [['day', 's1', 0]] | Failed |
| normal control 5 | [] | [] | Passed |
| normal control 6 | [['day', 's2', 0]] | [['day', 's2', 0]] | Passed |
| normal control 7 | [] | [] | Passed |
| normal control 8 | [['eve_morn', 's1', 2], ['eve_morn', 's2', 2]] | [] | Failed |
SHA-256 / 06f37081fc63240f8df39348571e5f1aeaf6f5c4db609e171b06be3aa04282d2
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(sits, spd, maxday):
by = {}
for st, p in sits:
by.setdefault(st, set()).add(p)
out = []
for st in sorted(by):
ps = by[st]
days = {}
for p in ps:
days[p // spd] = days.get(p // spd, 0) + 1
for d in sorted(days):
if days[d] > maxday:
out.append(['day', st, d])
for p in sorted(ps):
if p % spd == spd - 1 and p + 1 in ps:
out.append(['eve_morn', st, p // spd])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: last slot detection 1', [[['s1', 2], ['s1', 3]], 3, 2], [['eve_morn', 's1', 0]]),
('regression variant: last slot detection 2',
[[['s2', 3], ['s1', 4], ['s3', 2], ['s2', 2], ['s2', 4]], 2, 2], [['eve_morn', 's2', 1]]),
('partial repair guard 3',
[[['s2', 4], ['s3', 3], ['s2', 4], ['s2', 5], ['s3', 5], ['s1', 1], ['s3', 3], ['s2', 2]], 2, 2], []),
('boundary control 4', [[['s1', 0], ['s1', 1], ['s1', 2]], 3, 2], [['day', 's1', 0]]),
('normal control 5', [[['s1', 6], ['s1', 3], ['s1', 6], ['s3', 0], ['s1', 8]], 3, 2], []),
('normal control 6',
[[['s3', 6], ['s2', 0], ['s3', 0], ['s2', 1], ['s1', 3], ['s2', 1], ['s1', 6], ['s2', 7]], 3, 1],
[['day', 's2', 0]]),
('normal control 7', [[['s3', 0], ['s2', 10], ['s3', 0], ['s3', 5], ['s1', 4]], 4, 1], []),
('normal control 8', [[['s2', 5], ['s1', 4], ['s1', 5], ['s2', 5], ['s3', 4], ['s2', 4]], 2, 2], [])],
[('regression: last slot detection 1', [[['s1', 5], ['s1', 6]], 3, 2], [['eve_morn', 's1', 1]]),
('regression variant: last slot detection 2',
[[['s3', 2], ['s1', 5], ['s1', 2], ['s1', 0], ['s1', 4], ['s1', 1], ['s2', 3], ['s2', 0]], 2, 2],
[['eve_morn', 's1', 0]]),
('partial repair guard 3', [[['s2', 3], ['s1', 4], ['s3', 2], ['s2', 2], ['s2', 4]], 2, 2],
[['eve_morn', 's2', 1]]),
('boundary control 4', [[['s1', 1], ['s1', 2]], 3, 2], []),
('normal control 5', [[['s3', 6], ['s2', 0], ['s2', 0], ['s2', 5], ['s3', 4], ['s1', 4], ['s3', 3]], 3, 2],
[]),
('normal control 6', [[['s2', 5], ['s3', 0], ['s1', 5], ['s1', 2], ['s1', 5]], 2, 1], []),
('normal control 7', [[['s2', 0], ['s1', 3], ['s2', 4], ['s1', 5]], 2, 1], []),
('normal control 8', [[['s1', 11], ['s2', 11], ['s3', 6], ['s1', 2]], 4, 1], [])],
[('regression: last slot detection 1', [[['s2', 2], ['s1', 0], ['s2', 3], ['s3', 2], ['s3', 3]], 2, 1],
[['day', 's2', 1], ['day', 's3', 1]]),
('regression variant: last slot detection 2',
[[['s2', 3], ['s1', 3], ['s2', 1], ['s1', 4], ['s3', 8], ['s3', 1], ['s1', 2]], 4, 2],
[['eve_morn', 's1', 0]]),
('partial repair guard 3',
[[['s3', 2], ['s1', 2], ['s2', 8], ['s2', 0], ['s3', 1], ['s3', 7], ['s1', 2], ['s1', 7]], 3, 1],
[['day', 's3', 0]]),
('boundary control 4', [[['s1', 5], ['s1', 6]], 3, 2], [['eve_morn', 's1', 1]]),
('normal control 5', [[['s3', 0], ['s3', 5], ['s1', 5], ['s3', 3], ['s2', 3], ['s3', 3]], 3, 2], []),
('normal control 6', [[['s3', 11], ['s3', 10]], 4, 2], []),
('normal control 7', [[['s1', 1], ['s1', 2], ['s1', 6]], 4, 2], []),
('normal control 8', [[['s3', 2], ['s1', 0], ['s3', 3], ['s2', 2], ['s2', 2], ['s1', 8], ['s2', 8]], 3, 2],
[['eve_morn', 's3', 0]])],
[('regression: last slot detection 1',
[[['s2', 6], ['s3', 0], ['s2', 5], ['s2', 8], ['s3', 8], ['s1', 3]], 3, 1],
[['day', 's2', 2], ['eve_morn', 's2', 1]]),
('regression variant: last slot detection 2',
[[['s2', 3], ['s1', 3], ['s2', 2], ['s2', 4], ['s2', 3], ['s3', 5]], 2, 1],
[['day', 's2', 1], ['eve_morn', 's2', 1]]),
('partial repair guard 3', [[['s1', 1], ['s3', 0], ['s3', 2], ['s3', 1], ['s3', 4]], 2, 1],
[['day', 's3', 0], ['eve_morn', 's3', 0]]),
('boundary control 4', [[['s1', 0], ['s1', 1]], 3, 2], []),
('normal control 5', [[['s2', 9], ['s2', 9], ['s2', 11], ['s1', 10]], 4, 1], [['day', 's2', 2]]),
('normal control 6', [[['s3', 11], ['s3', 10]], 4, 2], []),
('normal control 7',
[[['s3', 8], ['s1', 3], ['s1', 3], ['s1', 5], ['s3', 6], ['s1', 8], ['s3', 8], ['s3', 0]], 3, 2], []),
('normal control 8', [[['s1', 3], ['s3', 2], ['s1', 3]], 3, 1], [])],
[('regression: last slot detection 1',
[[['s3', 7], ['s2', 5], ['s1', 6], ['s2', 4], ['s1', 2], ['s3', 8], ['s3', 3], ['s3', 2]], 3, 2],
[['eve_morn', 's3', 0]]),
('regression variant: last slot detection 2',
[[['s1', 3], ['s3', 8], ['s1', 11], ['s3', 10], ['s3', 7], ['s1', 1]], 4, 1],
[['day', 's1', 0], ['day', 's3', 2], ['eve_morn', 's3', 1]]),
('partial repair guard 3',
[[['s2', 4], ['s3', 3], ['s1', 2], ['s1', 3], ['s2', 0], ['s1', 1], ['s1', 1], ['s3', 5]], 2, 2],
[['eve_morn', 's1', 0]]),
('boundary control 4', [[['s1', 2], ['s1', 3]], 3, 2], [['eve_morn', 's1', 0]]),
('normal control 5', [[['s1', 1], ['s3', 2]], 4, 1], []),
('normal control 6', [[['s1', 4], ['s2', 3], ['s1', 1]], 4, 1], []),
('normal control 7', [[['s3', 3], ['s2', 4]], 4, 1], []),
('normal control 8', [[['s2', 5], ['s3', 8], ['s3', 4], ['s1', 7], ['s3', 5], ['s3', 2]], 3, 2], [])]]
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: last slot detection 1 | [['eve_morn', 's1', 0]] | [['eve_morn', 's1', 0]] | Passed |
| regression variant: last slot detection 2 | [['eve_morn', 's2', 1]] | [['eve_morn', 's2', 1]] | Passed |
| partial repair guard 3 | [] | [] | Passed |
| boundary control 4 | [['day', 's1', 0]] | [['day', 's1', 0]] | Passed |
| normal control 5 | [] | [] | Passed |
| normal control 6 | [['day', 's2', 0]] | [['day', 's2', 0]] | Passed |
| normal control 7 | [] | [] | Passed |
| normal control 8 | [] | [] | Passed |
SHA-256 / d7e13a3d5eea09f90c0f3121b976eb6b5cc367a8536edb571543659a6cd93e99
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.622488+00:00.
Case digest / c91ca490d6a1282a718cf75e30bbe084849eef51d67f3774ba883312783eabb6