FA-94461 / Exam timetabling constraints / Open access
Invigilator count floors the candidate ratio · case 01
Rooms with fewer candidates than the ratio get no invigilator.
ROOT CAUSE
Floor division is used for the ratio.
VERIFIED REPAIR
Use ceiling division of candidates by ratio.
Unsuccessful approach: Adding one to the floor over-staffs rooms at exact multiples.
Case contract
rooms [room, venue, candidates, has access-arrangement candidate]. A room with candidates needs ceil(candidates / ratio) invigilators plus one if it has an access arrangement; an empty room needs none. Each venue with any invigilators also needs one chief invigilator. Return [per room, per venue including chief, grand total].
Why this case matters
Invigilation staffing follows directly from the room plan of a timetable.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(rooms, ratio):
per = {}
venue = {}
for r, v, n, acc in rooms:
k = 0
if n > 0:
k = n // ratio
if acc:
k += 1
per[r] = k
venue.setdefault(v, 0)
venue[v] += k
for v in venue:
if venue[v] > 0:
venue[v] += 1
return [per, venue, sum(venue.values())]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: ratio ceiling 1', [[['R1', 'main', 31, False]], 30], [{'R1': 2}, {'main': 3}, 3]),
('regression variant: ratio ceiling 2',
[[['R0', 'lab', 25, False], ['R1', 'main', 1, False], ['R2', 'main', 0, True], ['R3', 'annex', 31, False],
['R4', 'annex', 60, True]],
25],
[{'R0': 1, 'R1': 1, 'R2': 0, 'R3': 2, 'R4': 4}, {'lab': 2, 'main': 2, 'annex': 7}, 11]),
('partial repair guard 3',
[[['R0', 'main', 60, False], ['R1', 'main', 0, False], ['R2', 'lab', 15, True],
['R3', 'annex', 30, False]],
30],
[{'R0': 2, 'R1': 0, 'R2': 2, 'R3': 1}, {'main': 3, 'lab': 3, 'annex': 2}, 8]),
('boundary control 4', [[['R1', 'main', 0, False], ['R2', 'annex', 5, False]], 30],
[{'R1': 0, 'R2': 1}, {'main': 0, 'annex': 2}, 2]),
('normal control 5',
[[['R0', 'annex', 31, True], ['R1', 'main', 25, False], ['R2', 'main', 25, False],
['R3', 'annex', 31, False]],
25],
[{'R0': 3, 'R1': 1, 'R2': 1, 'R3': 2}, {'annex': 6, 'main': 3}, 9]),
('normal control 6', [[['R0', 'annex', 61, False]], 30], [{'R0': 3}, {'annex': 4}, 4]),
('normal control 7',
[[['R0', 'main', 31, False], ['R1', 'main', 31, False], ['R2', 'lab', 60, True],
['R3', 'annex', 60, False]],
25],
[{'R0': 2, 'R1': 2, 'R2': 4, 'R3': 3}, {'main': 5, 'lab': 5, 'annex': 4}, 14]),
('normal control 8', [[['R0', 'main', 60, True], ['R1', 'lab', 61, False], ['R2', 'lab', 25, False]], 30],
[{'R0': 3, 'R1': 3, 'R2': 1}, {'main': 4, 'lab': 5}, 9])],
[('regression: ratio ceiling 1', [[['R1', 'main', 0, False], ['R2', 'annex', 5, False]], 30],
[{'R1': 0, 'R2': 1}, {'main': 0, 'annex': 2}, 2]),
('regression variant: ratio ceiling 2',
[[['R0', 'lab', 1, True], ['R1', 'lab', 31, True], ['R2', 'lab', 0, True]], 30],
[{'R0': 2, 'R1': 3, 'R2': 0}, {'lab': 6}, 6]),
('partial repair guard 3', [[['R0', 'annex', 0, True], ['R1', 'lab', 30, False]], 30],
[{'R0': 0, 'R1': 1}, {'annex': 0, 'lab': 2}, 2]),
('boundary control 4', [[['R1', 'main', 31, False]], 30], [{'R1': 2}, {'main': 3}, 3]),
('normal control 5',
[[['R0', 'main', 0, False], ['R1', 'main', 60, False], ['R2', 'main', 0, False],
['R3', 'annex', 30, False]],
30],
[{'R0': 0, 'R1': 2, 'R2': 0, 'R3': 1}, {'main': 3, 'annex': 2}, 5]),
('normal control 6',
[[['R0', 'main', 31, False], ['R1', 'main', 15, False], ['R2', 'annex', 31, False],
['R3', 'main', 0, True], ['R4', 'main', 0, False]],
25],
[{'R0': 2, 'R1': 1, 'R2': 2, 'R3': 0, 'R4': 0}, {'main': 4, 'annex': 3}, 7]),
('normal control 7',
[[['R0', 'lab', 0, False], ['R1', 'main', 25, False], ['R2', 'lab', 60, False], ['R3', 'annex', 0, False],
['R4', 'annex', 31, False]],
25],
[{'R0': 0, 'R1': 1, 'R2': 3, 'R3': 0, 'R4': 2}, {'lab': 4, 'main': 2, 'annex': 3}, 9]),
('normal control 8',
[[['R0', 'lab', 0, False], ['R1', 'lab', 15, False], ['R2', 'annex', 0, False], ['R3', 'annex', 30, False],
['R4', 'main', 31, False]],
25],
[{'R0': 0, 'R1': 1, 'R2': 0, 'R3': 2, 'R4': 2}, {'lab': 2, 'annex': 3, 'main': 3}, 8])],
[('regression: ratio ceiling 1', [[['R1', 'main', 12, True], ['R2', 'main', 40, False]], 25],
[{'R1': 2, 'R2': 2}, {'main': 5}, 5]),
('regression variant: ratio ceiling 2', [[['R0', 'lab', 0, False], ['R1', 'main', 31, False]], 30],
[{'R0': 0, 'R1': 2}, {'lab': 0, 'main': 3}, 3]),
('partial repair guard 3',
[[['R0', 'lab', 31, False], ['R1', 'main', 60, True], ['R2', 'lab', 0, False], ['R3', 'annex', 1, False],
['R4', 'annex', 15, False]],
30],
[{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 1, 'R4': 1}, {'lab': 3, 'main': 4, 'annex': 3}, 10]),
('normal control 4',
[[['R0', 'lab', 25, False], ['R1', 'annex', 61, True], ['R2', 'annex', 1, False],
['R3', 'main', 0, False]],
25],
[{'R0': 1, 'R1': 4, 'R2': 1, 'R3': 0}, {'lab': 2, 'annex': 6, 'main': 0}, 8]),
('normal control 5', [[['R0', 'main', 0, False]], 30], [{'R0': 0}, {'main': 0}, 0]),
('normal control 6',
[[['R0', 'main', 0, False], ['R1', 'annex', 1, False], ['R2', 'main', 15, False], ['R3', 'lab', 0, False],
['R4', 'main', 31, False]],
25],
[{'R0': 0, 'R1': 1, 'R2': 1, 'R3': 0, 'R4': 2}, {'main': 4, 'annex': 2, 'lab': 0}, 6]),
('normal control 7',
[[['R0', 'main', 61, False], ['R1', 'lab', 60, True], ['R2', 'annex', 30, False], ['R3', 'lab', 25, False],
['R4', 'main', 61, False]],
25],
[{'R0': 3, 'R1': 4, 'R2': 2, 'R3': 1, 'R4': 3}, {'main': 7, 'lab': 6, 'annex': 3}, 16]),
('normal control 8',
[[['R0', 'annex', 30, False], ['R1', 'annex', 0, True], ['R2', 'main', 0, True], ['R3', 'lab', 0, False],
['R4', 'annex', 0, False]],
25],
[{'R0': 2, 'R1': 0, 'R2': 0, 'R3': 0, 'R4': 0}, {'annex': 3, 'main': 0, 'lab': 0}, 3])],
[('regression: ratio ceiling 1', [[['R0', 'lab', 60, False], ['R1', 'lab', 25, True]], 30],
[{'R0': 2, 'R1': 2}, {'lab': 5}, 5]),
('regression variant: ratio ceiling 2', [[['R0', 'annex', 25, True]], 30], [{'R0': 2}, {'annex': 3}, 3]),
('partial repair guard 3', [[['R0', 'annex', 30, True], ['R1', 'annex', 15, False]], 30],
[{'R0': 2, 'R1': 1}, {'annex': 4}, 4]),
('boundary control 4', [[['R1', 'main', 0, True]], 30], [{'R1': 0}, {'main': 0}, 0]),
('normal control 5', [[['R0', 'main', 0, False], ['R1', 'main', 15, False], ['R2', 'lab', 61, True]], 25],
[{'R0': 0, 'R1': 1, 'R2': 4}, {'main': 2, 'lab': 5}, 7]),
('normal control 6',
[[['R0', 'annex', 15, False], ['R1', 'lab', 1, False], ['R2', 'lab', 0, False],
['R3', 'annex', 25, False]],
30],
[{'R0': 1, 'R1': 1, 'R2': 0, 'R3': 1}, {'annex': 3, 'lab': 2}, 5]),
('normal control 7',
[[['R0', 'annex', 31, False], ['R1', 'lab', 60, False], ['R2', 'main', 0, False], ['R3', 'lab', 1, False],
['R4', 'annex', 15, False]],
25],
[{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 1, 'R4': 1}, {'annex': 4, 'lab': 5, 'main': 0}, 9]),
('normal control 8',
[[['R0', 'main', 30, False], ['R1', 'annex', 61, False], ['R2', 'main', 61, True],
['R3', 'annex', 60, False], ['R4', 'annex', 1, True]],
30],
[{'R0': 1, 'R1': 3, 'R2': 4, 'R3': 2, 'R4': 2}, {'main': 6, 'annex': 8}, 14])],
[('regression: ratio ceiling 1',
[[['R0', 'annex', 31, False], ['R1', 'lab', 25, True], ['R2', 'lab', 61, False], ['R3', 'annex', 1, True]],
30],
[{'R0': 2, 'R1': 2, 'R2': 3, 'R3': 2}, {'annex': 5, 'lab': 6}, 11]),
('regression variant: ratio ceiling 2',
[[['R0', 'annex', 61, False], ['R1', 'lab', 15, False], ['R2', 'annex', 1, True],
['R3', 'annex', 61, False]],
30],
[{'R0': 3, 'R1': 1, 'R2': 2, 'R3': 3}, {'annex': 9, 'lab': 2}, 11]),
('partial repair guard 3',
[[['R0', 'main', 25, False], ['R1', 'lab', 0, False], ['R2', 'main', 1, False], ['R3', 'main', 60, True],
['R4', 'main', 15, True]],
25],
[{'R0': 1, 'R1': 0, 'R2': 1, 'R3': 4, 'R4': 2}, {'main': 9, 'lab': 0}, 9]),
('boundary control 4', [[['R1', 'main', 30, False]], 30], [{'R1': 1}, {'main': 2}, 2]),
('normal control 5',
[[['R0', 'main', 61, True], ['R1', 'annex', 15, False], ['R2', 'main', 30, False], ['R3', 'lab', 1, False],
['R4', 'main', 31, True]],
30],
[{'R0': 4, 'R1': 1, 'R2': 1, 'R3': 1, 'R4': 3}, {'main': 9, 'annex': 2, 'lab': 2}, 13]),
('normal control 6', [[['R0', 'lab', 0, False], ['R1', 'main', 25, True]], 30],
[{'R0': 0, 'R1': 2}, {'lab': 0, 'main': 3}, 3]),
('normal control 7', [[['R0', 'lab', 31, True], ['R1', 'lab', 61, False], ['R2', 'main', 61, False]], 25],
[{'R0': 3, 'R1': 3, 'R2': 3}, {'lab': 7, 'main': 4}, 11]),
('normal control 8',
[[['R0', 'annex', 0, True], ['R1', 'main', 0, False], ['R2', 'main', 15, False], ['R3', 'lab', 1, True],
['R4', 'annex', 25, False]],
30],
[{'R0': 0, 'R1': 0, 'R2': 1, 'R3': 2, 'R4': 1}, {'annex': 2, 'main': 2, 'lab': 3}, 7])]]
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: ratio ceiling 1 | [{'R1': 1}, {'main': 2}, 2] | [{'R1': 2}, {'main': 3}, 3] | Failed |
| regression variant: ratio ceiling 2 | [{'R0': 1, 'R1': 0, 'R2': 0, 'R3': 1, 'R4': 3}, {'annex': 5, 'lab': 2, 'main': 0}, 7] | [{'R0': 1, 'R1': 1, 'R2': 0, 'R3': 2, 'R4': 4}, {'annex': 7, 'lab': 2, 'main': 2}, 11] | Failed |
| partial repair guard 3 | [{'R0': 2, 'R1': 0, 'R2': 1, 'R3': 1}, {'annex': 2, 'lab': 2, 'main': 3}, 7] | [{'R0': 2, 'R1': 0, 'R2': 2, 'R3': 1}, {'annex': 2, 'lab': 3, 'main': 3}, 8] | Failed |
| boundary control 4 | [{'R1': 0, 'R2': 0}, {'annex': 0, 'main': 0}, 0] | [{'R1': 0, 'R2': 1}, {'annex': 2, 'main': 0}, 2] | Failed |
| normal control 5 | [{'R0': 2, 'R1': 1, 'R2': 1, 'R3': 1}, {'annex': 4, 'main': 3}, 7] | [{'R0': 3, 'R1': 1, 'R2': 1, 'R3': 2}, {'annex': 6, 'main': 3}, 9] | Failed |
| normal control 6 | [{'R0': 2}, {'annex': 3}, 3] | [{'R0': 3}, {'annex': 4}, 4] | Failed |
| normal control 7 | [{'R0': 1, 'R1': 1, 'R2': 3, 'R3': 2}, {'annex': 3, 'lab': 4, 'main': 3}, 10] | [{'R0': 2, 'R1': 2, 'R2': 4, 'R3': 3}, {'annex': 4, 'lab': 5, 'main': 5}, 14] | Failed |
| normal control 8 | [{'R0': 3, 'R1': 2, 'R2': 0}, {'lab': 3, 'main': 4}, 7] | [{'R0': 3, 'R1': 3, 'R2': 1}, {'lab': 5, 'main': 4}, 9] | Failed |
SHA-256 / ded634fca8615ad9e5cef454ac5b64bf83ec7f449c61f16214283495a104753f
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(rooms, ratio):
per = {}
venue = {}
for r, v, n, acc in rooms:
k = 0
if n > 0:
k = n // ratio + 1
if acc:
k += 1
per[r] = k
venue.setdefault(v, 0)
venue[v] += k
for v in venue:
if venue[v] > 0:
venue[v] += 1
return [per, venue, sum(venue.values())]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: ratio ceiling 1', [[['R1', 'main', 31, False]], 30], [{'R1': 2}, {'main': 3}, 3]),
('regression variant: ratio ceiling 2',
[[['R0', 'lab', 25, False], ['R1', 'main', 1, False], ['R2', 'main', 0, True], ['R3', 'annex', 31, False],
['R4', 'annex', 60, True]],
25],
[{'R0': 1, 'R1': 1, 'R2': 0, 'R3': 2, 'R4': 4}, {'lab': 2, 'main': 2, 'annex': 7}, 11]),
('partial repair guard 3',
[[['R0', 'main', 60, False], ['R1', 'main', 0, False], ['R2', 'lab', 15, True],
['R3', 'annex', 30, False]],
30],
[{'R0': 2, 'R1': 0, 'R2': 2, 'R3': 1}, {'main': 3, 'lab': 3, 'annex': 2}, 8]),
('boundary control 4', [[['R1', 'main', 0, False], ['R2', 'annex', 5, False]], 30],
[{'R1': 0, 'R2': 1}, {'main': 0, 'annex': 2}, 2]),
('normal control 5',
[[['R0', 'annex', 31, True], ['R1', 'main', 25, False], ['R2', 'main', 25, False],
['R3', 'annex', 31, False]],
25],
[{'R0': 3, 'R1': 1, 'R2': 1, 'R3': 2}, {'annex': 6, 'main': 3}, 9]),
('normal control 6', [[['R0', 'annex', 61, False]], 30], [{'R0': 3}, {'annex': 4}, 4]),
('normal control 7',
[[['R0', 'main', 31, False], ['R1', 'main', 31, False], ['R2', 'lab', 60, True],
['R3', 'annex', 60, False]],
25],
[{'R0': 2, 'R1': 2, 'R2': 4, 'R3': 3}, {'main': 5, 'lab': 5, 'annex': 4}, 14]),
('normal control 8', [[['R0', 'main', 60, True], ['R1', 'lab', 61, False], ['R2', 'lab', 25, False]], 30],
[{'R0': 3, 'R1': 3, 'R2': 1}, {'main': 4, 'lab': 5}, 9])],
[('regression: ratio ceiling 1', [[['R1', 'main', 0, False], ['R2', 'annex', 5, False]], 30],
[{'R1': 0, 'R2': 1}, {'main': 0, 'annex': 2}, 2]),
('regression variant: ratio ceiling 2',
[[['R0', 'lab', 1, True], ['R1', 'lab', 31, True], ['R2', 'lab', 0, True]], 30],
[{'R0': 2, 'R1': 3, 'R2': 0}, {'lab': 6}, 6]),
('partial repair guard 3', [[['R0', 'annex', 0, True], ['R1', 'lab', 30, False]], 30],
[{'R0': 0, 'R1': 1}, {'annex': 0, 'lab': 2}, 2]),
('boundary control 4', [[['R1', 'main', 31, False]], 30], [{'R1': 2}, {'main': 3}, 3]),
('normal control 5',
[[['R0', 'main', 0, False], ['R1', 'main', 60, False], ['R2', 'main', 0, False],
['R3', 'annex', 30, False]],
30],
[{'R0': 0, 'R1': 2, 'R2': 0, 'R3': 1}, {'main': 3, 'annex': 2}, 5]),
('normal control 6',
[[['R0', 'main', 31, False], ['R1', 'main', 15, False], ['R2', 'annex', 31, False],
['R3', 'main', 0, True], ['R4', 'main', 0, False]],
25],
[{'R0': 2, 'R1': 1, 'R2': 2, 'R3': 0, 'R4': 0}, {'main': 4, 'annex': 3}, 7]),
('normal control 7',
[[['R0', 'lab', 0, False], ['R1', 'main', 25, False], ['R2', 'lab', 60, False], ['R3', 'annex', 0, False],
['R4', 'annex', 31, False]],
25],
[{'R0': 0, 'R1': 1, 'R2': 3, 'R3': 0, 'R4': 2}, {'lab': 4, 'main': 2, 'annex': 3}, 9]),
('normal control 8',
[[['R0', 'lab', 0, False], ['R1', 'lab', 15, False], ['R2', 'annex', 0, False], ['R3', 'annex', 30, False],
['R4', 'main', 31, False]],
25],
[{'R0': 0, 'R1': 1, 'R2': 0, 'R3': 2, 'R4': 2}, {'lab': 2, 'annex': 3, 'main': 3}, 8])],
[('regression: ratio ceiling 1', [[['R1', 'main', 12, True], ['R2', 'main', 40, False]], 25],
[{'R1': 2, 'R2': 2}, {'main': 5}, 5]),
('regression variant: ratio ceiling 2', [[['R0', 'lab', 0, False], ['R1', 'main', 31, False]], 30],
[{'R0': 0, 'R1': 2}, {'lab': 0, 'main': 3}, 3]),
('partial repair guard 3',
[[['R0', 'lab', 31, False], ['R1', 'main', 60, True], ['R2', 'lab', 0, False], ['R3', 'annex', 1, False],
['R4', 'annex', 15, False]],
30],
[{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 1, 'R4': 1}, {'lab': 3, 'main': 4, 'annex': 3}, 10]),
('normal control 4',
[[['R0', 'lab', 25, False], ['R1', 'annex', 61, True], ['R2', 'annex', 1, False],
['R3', 'main', 0, False]],
25],
[{'R0': 1, 'R1': 4, 'R2': 1, 'R3': 0}, {'lab': 2, 'annex': 6, 'main': 0}, 8]),
('normal control 5', [[['R0', 'main', 0, False]], 30], [{'R0': 0}, {'main': 0}, 0]),
('normal control 6',
[[['R0', 'main', 0, False], ['R1', 'annex', 1, False], ['R2', 'main', 15, False], ['R3', 'lab', 0, False],
['R4', 'main', 31, False]],
25],
[{'R0': 0, 'R1': 1, 'R2': 1, 'R3': 0, 'R4': 2}, {'main': 4, 'annex': 2, 'lab': 0}, 6]),
('normal control 7',
[[['R0', 'main', 61, False], ['R1', 'lab', 60, True], ['R2', 'annex', 30, False], ['R3', 'lab', 25, False],
['R4', 'main', 61, False]],
25],
[{'R0': 3, 'R1': 4, 'R2': 2, 'R3': 1, 'R4': 3}, {'main': 7, 'lab': 6, 'annex': 3}, 16]),
('normal control 8',
[[['R0', 'annex', 30, False], ['R1', 'annex', 0, True], ['R2', 'main', 0, True], ['R3', 'lab', 0, False],
['R4', 'annex', 0, False]],
25],
[{'R0': 2, 'R1': 0, 'R2': 0, 'R3': 0, 'R4': 0}, {'annex': 3, 'main': 0, 'lab': 0}, 3])],
[('regression: ratio ceiling 1', [[['R0', 'lab', 60, False], ['R1', 'lab', 25, True]], 30],
[{'R0': 2, 'R1': 2}, {'lab': 5}, 5]),
('regression variant: ratio ceiling 2', [[['R0', 'annex', 25, True]], 30], [{'R0': 2}, {'annex': 3}, 3]),
('partial repair guard 3', [[['R0', 'annex', 30, True], ['R1', 'annex', 15, False]], 30],
[{'R0': 2, 'R1': 1}, {'annex': 4}, 4]),
('boundary control 4', [[['R1', 'main', 0, True]], 30], [{'R1': 0}, {'main': 0}, 0]),
('normal control 5', [[['R0', 'main', 0, False], ['R1', 'main', 15, False], ['R2', 'lab', 61, True]], 25],
[{'R0': 0, 'R1': 1, 'R2': 4}, {'main': 2, 'lab': 5}, 7]),
('normal control 6',
[[['R0', 'annex', 15, False], ['R1', 'lab', 1, False], ['R2', 'lab', 0, False],
['R3', 'annex', 25, False]],
30],
[{'R0': 1, 'R1': 1, 'R2': 0, 'R3': 1}, {'annex': 3, 'lab': 2}, 5]),
('normal control 7',
[[['R0', 'annex', 31, False], ['R1', 'lab', 60, False], ['R2', 'main', 0, False], ['R3', 'lab', 1, False],
['R4', 'annex', 15, False]],
25],
[{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 1, 'R4': 1}, {'annex': 4, 'lab': 5, 'main': 0}, 9]),
('normal control 8',
[[['R0', 'main', 30, False], ['R1', 'annex', 61, False], ['R2', 'main', 61, True],
['R3', 'annex', 60, False], ['R4', 'annex', 1, True]],
30],
[{'R0': 1, 'R1': 3, 'R2': 4, 'R3': 2, 'R4': 2}, {'main': 6, 'annex': 8}, 14])],
[('regression: ratio ceiling 1',
[[['R0', 'annex', 31, False], ['R1', 'lab', 25, True], ['R2', 'lab', 61, False], ['R3', 'annex', 1, True]],
30],
[{'R0': 2, 'R1': 2, 'R2': 3, 'R3': 2}, {'annex': 5, 'lab': 6}, 11]),
('regression variant: ratio ceiling 2',
[[['R0', 'annex', 61, False], ['R1', 'lab', 15, False], ['R2', 'annex', 1, True],
['R3', 'annex', 61, False]],
30],
[{'R0': 3, 'R1': 1, 'R2': 2, 'R3': 3}, {'annex': 9, 'lab': 2}, 11]),
('partial repair guard 3',
[[['R0', 'main', 25, False], ['R1', 'lab', 0, False], ['R2', 'main', 1, False], ['R3', 'main', 60, True],
['R4', 'main', 15, True]],
25],
[{'R0': 1, 'R1': 0, 'R2': 1, 'R3': 4, 'R4': 2}, {'main': 9, 'lab': 0}, 9]),
('boundary control 4', [[['R1', 'main', 30, False]], 30], [{'R1': 1}, {'main': 2}, 2]),
('normal control 5',
[[['R0', 'main', 61, True], ['R1', 'annex', 15, False], ['R2', 'main', 30, False], ['R3', 'lab', 1, False],
['R4', 'main', 31, True]],
30],
[{'R0': 4, 'R1': 1, 'R2': 1, 'R3': 1, 'R4': 3}, {'main': 9, 'annex': 2, 'lab': 2}, 13]),
('normal control 6', [[['R0', 'lab', 0, False], ['R1', 'main', 25, True]], 30],
[{'R0': 0, 'R1': 2}, {'lab': 0, 'main': 3}, 3]),
('normal control 7', [[['R0', 'lab', 31, True], ['R1', 'lab', 61, False], ['R2', 'main', 61, False]], 25],
[{'R0': 3, 'R1': 3, 'R2': 3}, {'lab': 7, 'main': 4}, 11]),
('normal control 8',
[[['R0', 'annex', 0, True], ['R1', 'main', 0, False], ['R2', 'main', 15, False], ['R3', 'lab', 1, True],
['R4', 'annex', 25, False]],
30],
[{'R0': 0, 'R1': 0, 'R2': 1, 'R3': 2, 'R4': 1}, {'annex': 2, 'main': 2, 'lab': 3}, 7])]]
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: ratio ceiling 1 | [{'R1': 2}, {'main': 3}, 3] | [{'R1': 2}, {'main': 3}, 3] | Passed |
| regression variant: ratio ceiling 2 | [{'R0': 2, 'R1': 1, 'R2': 0, 'R3': 2, 'R4': 4}, {'annex': 7, 'lab': 3, 'main': 2}, 12] | [{'R0': 1, 'R1': 1, 'R2': 0, 'R3': 2, 'R4': 4}, {'annex': 7, 'lab': 2, 'main': 2}, 11] | Failed |
| partial repair guard 3 | [{'R0': 3, 'R1': 0, 'R2': 2, 'R3': 2}, {'annex': 3, 'lab': 3, 'main': 4}, 10] | [{'R0': 2, 'R1': 0, 'R2': 2, 'R3': 1}, {'annex': 2, 'lab': 3, 'main': 3}, 8] | Failed |
| boundary control 4 | [{'R1': 0, 'R2': 1}, {'annex': 2, 'main': 0}, 2] | [{'R1': 0, 'R2': 1}, {'annex': 2, 'main': 0}, 2] | Passed |
| normal control 5 | [{'R0': 3, 'R1': 2, 'R2': 2, 'R3': 2}, {'annex': 6, 'main': 5}, 11] | [{'R0': 3, 'R1': 1, 'R2': 1, 'R3': 2}, {'annex': 6, 'main': 3}, 9] | Failed |
| normal control 6 | [{'R0': 3}, {'annex': 4}, 4] | [{'R0': 3}, {'annex': 4}, 4] | Passed |
| normal control 7 | [{'R0': 2, 'R1': 2, 'R2': 4, 'R3': 3}, {'annex': 4, 'lab': 5, 'main': 5}, 14] | [{'R0': 2, 'R1': 2, 'R2': 4, 'R3': 3}, {'annex': 4, 'lab': 5, 'main': 5}, 14] | Passed |
| normal control 8 | [{'R0': 4, 'R1': 3, 'R2': 1}, {'lab': 5, 'main': 5}, 10] | [{'R0': 3, 'R1': 3, 'R2': 1}, {'lab': 5, 'main': 4}, 9] | Failed |
SHA-256 / 5d1d9e68fb379d9feecc4279e57da69dabf96290b8e8d0182de64e6c9868f2bf
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(rooms, ratio):
per = {}
venue = {}
for r, v, n, acc in rooms:
k = 0
if n > 0:
k = -(-n // ratio)
if acc:
k += 1
per[r] = k
venue.setdefault(v, 0)
venue[v] += k
for v in venue:
if venue[v] > 0:
venue[v] += 1
return [per, venue, sum(venue.values())]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: ratio ceiling 1', [[['R1', 'main', 31, False]], 30], [{'R1': 2}, {'main': 3}, 3]),
('regression variant: ratio ceiling 2',
[[['R0', 'lab', 25, False], ['R1', 'main', 1, False], ['R2', 'main', 0, True], ['R3', 'annex', 31, False],
['R4', 'annex', 60, True]],
25],
[{'R0': 1, 'R1': 1, 'R2': 0, 'R3': 2, 'R4': 4}, {'lab': 2, 'main': 2, 'annex': 7}, 11]),
('partial repair guard 3',
[[['R0', 'main', 60, False], ['R1', 'main', 0, False], ['R2', 'lab', 15, True],
['R3', 'annex', 30, False]],
30],
[{'R0': 2, 'R1': 0, 'R2': 2, 'R3': 1}, {'main': 3, 'lab': 3, 'annex': 2}, 8]),
('boundary control 4', [[['R1', 'main', 0, False], ['R2', 'annex', 5, False]], 30],
[{'R1': 0, 'R2': 1}, {'main': 0, 'annex': 2}, 2]),
('normal control 5',
[[['R0', 'annex', 31, True], ['R1', 'main', 25, False], ['R2', 'main', 25, False],
['R3', 'annex', 31, False]],
25],
[{'R0': 3, 'R1': 1, 'R2': 1, 'R3': 2}, {'annex': 6, 'main': 3}, 9]),
('normal control 6', [[['R0', 'annex', 61, False]], 30], [{'R0': 3}, {'annex': 4}, 4]),
('normal control 7',
[[['R0', 'main', 31, False], ['R1', 'main', 31, False], ['R2', 'lab', 60, True],
['R3', 'annex', 60, False]],
25],
[{'R0': 2, 'R1': 2, 'R2': 4, 'R3': 3}, {'main': 5, 'lab': 5, 'annex': 4}, 14]),
('normal control 8', [[['R0', 'main', 60, True], ['R1', 'lab', 61, False], ['R2', 'lab', 25, False]], 30],
[{'R0': 3, 'R1': 3, 'R2': 1}, {'main': 4, 'lab': 5}, 9])],
[('regression: ratio ceiling 1', [[['R1', 'main', 0, False], ['R2', 'annex', 5, False]], 30],
[{'R1': 0, 'R2': 1}, {'main': 0, 'annex': 2}, 2]),
('regression variant: ratio ceiling 2',
[[['R0', 'lab', 1, True], ['R1', 'lab', 31, True], ['R2', 'lab', 0, True]], 30],
[{'R0': 2, 'R1': 3, 'R2': 0}, {'lab': 6}, 6]),
('partial repair guard 3', [[['R0', 'annex', 0, True], ['R1', 'lab', 30, False]], 30],
[{'R0': 0, 'R1': 1}, {'annex': 0, 'lab': 2}, 2]),
('boundary control 4', [[['R1', 'main', 31, False]], 30], [{'R1': 2}, {'main': 3}, 3]),
('normal control 5',
[[['R0', 'main', 0, False], ['R1', 'main', 60, False], ['R2', 'main', 0, False],
['R3', 'annex', 30, False]],
30],
[{'R0': 0, 'R1': 2, 'R2': 0, 'R3': 1}, {'main': 3, 'annex': 2}, 5]),
('normal control 6',
[[['R0', 'main', 31, False], ['R1', 'main', 15, False], ['R2', 'annex', 31, False],
['R3', 'main', 0, True], ['R4', 'main', 0, False]],
25],
[{'R0': 2, 'R1': 1, 'R2': 2, 'R3': 0, 'R4': 0}, {'main': 4, 'annex': 3}, 7]),
('normal control 7',
[[['R0', 'lab', 0, False], ['R1', 'main', 25, False], ['R2', 'lab', 60, False], ['R3', 'annex', 0, False],
['R4', 'annex', 31, False]],
25],
[{'R0': 0, 'R1': 1, 'R2': 3, 'R3': 0, 'R4': 2}, {'lab': 4, 'main': 2, 'annex': 3}, 9]),
('normal control 8',
[[['R0', 'lab', 0, False], ['R1', 'lab', 15, False], ['R2', 'annex', 0, False], ['R3', 'annex', 30, False],
['R4', 'main', 31, False]],
25],
[{'R0': 0, 'R1': 1, 'R2': 0, 'R3': 2, 'R4': 2}, {'lab': 2, 'annex': 3, 'main': 3}, 8])],
[('regression: ratio ceiling 1', [[['R1', 'main', 12, True], ['R2', 'main', 40, False]], 25],
[{'R1': 2, 'R2': 2}, {'main': 5}, 5]),
('regression variant: ratio ceiling 2', [[['R0', 'lab', 0, False], ['R1', 'main', 31, False]], 30],
[{'R0': 0, 'R1': 2}, {'lab': 0, 'main': 3}, 3]),
('partial repair guard 3',
[[['R0', 'lab', 31, False], ['R1', 'main', 60, True], ['R2', 'lab', 0, False], ['R3', 'annex', 1, False],
['R4', 'annex', 15, False]],
30],
[{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 1, 'R4': 1}, {'lab': 3, 'main': 4, 'annex': 3}, 10]),
('normal control 4',
[[['R0', 'lab', 25, False], ['R1', 'annex', 61, True], ['R2', 'annex', 1, False],
['R3', 'main', 0, False]],
25],
[{'R0': 1, 'R1': 4, 'R2': 1, 'R3': 0}, {'lab': 2, 'annex': 6, 'main': 0}, 8]),
('normal control 5', [[['R0', 'main', 0, False]], 30], [{'R0': 0}, {'main': 0}, 0]),
('normal control 6',
[[['R0', 'main', 0, False], ['R1', 'annex', 1, False], ['R2', 'main', 15, False], ['R3', 'lab', 0, False],
['R4', 'main', 31, False]],
25],
[{'R0': 0, 'R1': 1, 'R2': 1, 'R3': 0, 'R4': 2}, {'main': 4, 'annex': 2, 'lab': 0}, 6]),
('normal control 7',
[[['R0', 'main', 61, False], ['R1', 'lab', 60, True], ['R2', 'annex', 30, False], ['R3', 'lab', 25, False],
['R4', 'main', 61, False]],
25],
[{'R0': 3, 'R1': 4, 'R2': 2, 'R3': 1, 'R4': 3}, {'main': 7, 'lab': 6, 'annex': 3}, 16]),
('normal control 8',
[[['R0', 'annex', 30, False], ['R1', 'annex', 0, True], ['R2', 'main', 0, True], ['R3', 'lab', 0, False],
['R4', 'annex', 0, False]],
25],
[{'R0': 2, 'R1': 0, 'R2': 0, 'R3': 0, 'R4': 0}, {'annex': 3, 'main': 0, 'lab': 0}, 3])],
[('regression: ratio ceiling 1', [[['R0', 'lab', 60, False], ['R1', 'lab', 25, True]], 30],
[{'R0': 2, 'R1': 2}, {'lab': 5}, 5]),
('regression variant: ratio ceiling 2', [[['R0', 'annex', 25, True]], 30], [{'R0': 2}, {'annex': 3}, 3]),
('partial repair guard 3', [[['R0', 'annex', 30, True], ['R1', 'annex', 15, False]], 30],
[{'R0': 2, 'R1': 1}, {'annex': 4}, 4]),
('boundary control 4', [[['R1', 'main', 0, True]], 30], [{'R1': 0}, {'main': 0}, 0]),
('normal control 5', [[['R0', 'main', 0, False], ['R1', 'main', 15, False], ['R2', 'lab', 61, True]], 25],
[{'R0': 0, 'R1': 1, 'R2': 4}, {'main': 2, 'lab': 5}, 7]),
('normal control 6',
[[['R0', 'annex', 15, False], ['R1', 'lab', 1, False], ['R2', 'lab', 0, False],
['R3', 'annex', 25, False]],
30],
[{'R0': 1, 'R1': 1, 'R2': 0, 'R3': 1}, {'annex': 3, 'lab': 2}, 5]),
('normal control 7',
[[['R0', 'annex', 31, False], ['R1', 'lab', 60, False], ['R2', 'main', 0, False], ['R3', 'lab', 1, False],
['R4', 'annex', 15, False]],
25],
[{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 1, 'R4': 1}, {'annex': 4, 'lab': 5, 'main': 0}, 9]),
('normal control 8',
[[['R0', 'main', 30, False], ['R1', 'annex', 61, False], ['R2', 'main', 61, True],
['R3', 'annex', 60, False], ['R4', 'annex', 1, True]],
30],
[{'R0': 1, 'R1': 3, 'R2': 4, 'R3': 2, 'R4': 2}, {'main': 6, 'annex': 8}, 14])],
[('regression: ratio ceiling 1',
[[['R0', 'annex', 31, False], ['R1', 'lab', 25, True], ['R2', 'lab', 61, False], ['R3', 'annex', 1, True]],
30],
[{'R0': 2, 'R1': 2, 'R2': 3, 'R3': 2}, {'annex': 5, 'lab': 6}, 11]),
('regression variant: ratio ceiling 2',
[[['R0', 'annex', 61, False], ['R1', 'lab', 15, False], ['R2', 'annex', 1, True],
['R3', 'annex', 61, False]],
30],
[{'R0': 3, 'R1': 1, 'R2': 2, 'R3': 3}, {'annex': 9, 'lab': 2}, 11]),
('partial repair guard 3',
[[['R0', 'main', 25, False], ['R1', 'lab', 0, False], ['R2', 'main', 1, False], ['R3', 'main', 60, True],
['R4', 'main', 15, True]],
25],
[{'R0': 1, 'R1': 0, 'R2': 1, 'R3': 4, 'R4': 2}, {'main': 9, 'lab': 0}, 9]),
('boundary control 4', [[['R1', 'main', 30, False]], 30], [{'R1': 1}, {'main': 2}, 2]),
('normal control 5',
[[['R0', 'main', 61, True], ['R1', 'annex', 15, False], ['R2', 'main', 30, False], ['R3', 'lab', 1, False],
['R4', 'main', 31, True]],
30],
[{'R0': 4, 'R1': 1, 'R2': 1, 'R3': 1, 'R4': 3}, {'main': 9, 'annex': 2, 'lab': 2}, 13]),
('normal control 6', [[['R0', 'lab', 0, False], ['R1', 'main', 25, True]], 30],
[{'R0': 0, 'R1': 2}, {'lab': 0, 'main': 3}, 3]),
('normal control 7', [[['R0', 'lab', 31, True], ['R1', 'lab', 61, False], ['R2', 'main', 61, False]], 25],
[{'R0': 3, 'R1': 3, 'R2': 3}, {'lab': 7, 'main': 4}, 11]),
('normal control 8',
[[['R0', 'annex', 0, True], ['R1', 'main', 0, False], ['R2', 'main', 15, False], ['R3', 'lab', 1, True],
['R4', 'annex', 25, False]],
30],
[{'R0': 0, 'R1': 0, 'R2': 1, 'R3': 2, 'R4': 1}, {'annex': 2, 'main': 2, 'lab': 3}, 7])]]
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: ratio ceiling 1 | [{'R1': 2}, {'main': 3}, 3] | [{'R1': 2}, {'main': 3}, 3] | Passed |
| regression variant: ratio ceiling 2 | [{'R0': 1, 'R1': 1, 'R2': 0, 'R3': 2, 'R4': 4}, {'annex': 7, 'lab': 2, 'main': 2}, 11] | [{'R0': 1, 'R1': 1, 'R2': 0, 'R3': 2, 'R4': 4}, {'annex': 7, 'lab': 2, 'main': 2}, 11] | Passed |
| partial repair guard 3 | [{'R0': 2, 'R1': 0, 'R2': 2, 'R3': 1}, {'annex': 2, 'lab': 3, 'main': 3}, 8] | [{'R0': 2, 'R1': 0, 'R2': 2, 'R3': 1}, {'annex': 2, 'lab': 3, 'main': 3}, 8] | Passed |
| boundary control 4 | [{'R1': 0, 'R2': 1}, {'annex': 2, 'main': 0}, 2] | [{'R1': 0, 'R2': 1}, {'annex': 2, 'main': 0}, 2] | Passed |
| normal control 5 | [{'R0': 3, 'R1': 1, 'R2': 1, 'R3': 2}, {'annex': 6, 'main': 3}, 9] | [{'R0': 3, 'R1': 1, 'R2': 1, 'R3': 2}, {'annex': 6, 'main': 3}, 9] | Passed |
| normal control 6 | [{'R0': 3}, {'annex': 4}, 4] | [{'R0': 3}, {'annex': 4}, 4] | Passed |
| normal control 7 | [{'R0': 2, 'R1': 2, 'R2': 4, 'R3': 3}, {'annex': 4, 'lab': 5, 'main': 5}, 14] | [{'R0': 2, 'R1': 2, 'R2': 4, 'R3': 3}, {'annex': 4, 'lab': 5, 'main': 5}, 14] | Passed |
| normal control 8 | [{'R0': 3, 'R1': 3, 'R2': 1}, {'lab': 5, 'main': 4}, 9] | [{'R0': 3, 'R1': 3, 'R2': 1}, {'lab': 5, 'main': 4}, 9] | Passed |
SHA-256 / 9001eb719db0f24f2dcc9400a698da90336cc61c5fae3f8ad402f94c7266c2d4
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.610064+00:00.
Case digest / 0d6ae2f6535941500683dc8712f70b0c62ca0b053d071905b928a89cd2cd3545