FA-94546 / Exam timetabling constraints / Open access
Same-surname candidates ordered by id instead of given name · case 01
Siblings or common surnames are seated out of alphabetical order.
ROOT CAUSE
The sort key omits the given name.
VERIFIED REPAIR
Break surname ties by case-folded given name, then id.
Unsuccessful approach: An unfolded given name sorts lower-case names after capitalised ones.
Case contract
Candidates [id, surname, given, access flag], rooms [room, rows, cols]. Non-access candidates are sorted by case-folded surname, case-folded given name, then id, and take alternate seats (even row and even column indices) room by room in row-major order, labelled room-<row letter><column number>; candidates beyond the seats are UNSEATED. Access candidates go to SEP-1, SEP-2... in the same order. Return id -> seat.
Why this case matters
Seating plans are generated from the timetable's room allocation and must be deterministic and fair.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(cands, rooms):
def key(c):
return (c[1].casefold(), c[0])
main = sorted([c for c in cands if not c[3]], key=key)
sep = sorted([c for c in cands if c[3]], key=key)
seats = []
for room, rows, cols in rooms:
for r in range(0, rows, 2):
for c in range(0, cols, 2):
seats.append('%s-%s%d' % (room, chr(65 + r), c + 1))
out = {}
for k, c in enumerate(main):
out[c[0]] = seats[k] if k < len(seats) else 'UNSEATED'
for k, c in enumerate(sep):
out[c[0]] = 'SEP-%d' % (k + 1)
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: given name tie break 1',
[[['C29', 'Strausz', 'Ben', 0], ['C34', 'Strauß', 'Anna', 1], ['C35', 'Zhou', 'Li', 0],
['C31', 'Mason', 'Amy', 0], ['C13', 'Mason', 'Zed', 0], ['C53', 'Öberg', 'Ola', 0],
['C48', 'strauss', 'Cara', 0], ['C28', 'Mason', 'amy', 0]],
[['H0', 2, 4]]],
{'C28': 'H0-A1',
'C31': 'H0-A3',
'C13': 'UNSEATED',
'C48': 'UNSEATED',
'C29': 'UNSEATED',
'C35': 'UNSEATED',
'C53': 'UNSEATED',
'C34': 'SEP-1'}),
('regression variant: given name tie break 2',
[[['C31', 'Mason', 'Zed', 0], ['C68', 'adams', 'Dan', 0], ['C00', 'Adams', 'eve', 0],
['C61', 'strauss', 'Cara', 0]],
[['H0', 1, 5], ['H1', 4, 3]]],
{'C68': 'H0-A1', 'C00': 'H0-A3', 'C31': 'H0-A5', 'C61': 'H1-A1'}),
('partial repair guard 3',
[[['C35', 'Adams', 'eve', 0], ['C28', 'Öberg', 'Ola', 0], ['C93', 'strauss', 'Cara', 0],
['C58', 'Zhou', 'Li', 0], ['C61', 'Mason', 'amy', 0], ['C45', 'Mason', 'Zed', 0]],
[['H0', 3, 2], ['H1', 5, 1]]],
{'C35': 'H0-A1', 'C61': 'H0-C1', 'C45': 'H1-A1', 'C93': 'H1-C1', 'C58': 'H1-E1', 'C28': 'UNSEATED'}),
('boundary control 4', [[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 1]], [['H1', 1, 1]]],
{'C1': 'H1-A1', 'C2': 'SEP-1'}),
('boundary control 5',
[[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 0], ['C3', 'Cole', 'Bo', 0]], [['H1', 3, 3]]],
{'C1': 'H1-A1', 'C2': 'H1-A3', 'C3': 'H1-C1'}),
('normal control 6',
[[['C45', 'Strauß', 'Anna', 0], ['C69', 'adams', 'Dan', 0], ['C56', 'Zhou', 'Li', 1],
['C58', 'Strausz', 'Ben', 0], ['C99', 'Öberg', 'Ola', 0]],
[['H0', 5, 1]]],
{'C69': 'H0-A1', 'C45': 'H0-C1', 'C58': 'H0-E1', 'C99': 'UNSEATED', 'C56': 'SEP-1'}),
('normal control 7',
[[['C01', 'Mason', 'Amy', 1], ['C07', 'Mason', 'amy', 0], ['C02', 'Adams', 'eve', 0],
['C70', 'Öberg', 'Ola', 0]],
[['H0', 1, 3]]],
{'C02': 'H0-A1', 'C07': 'H0-A3', 'C70': 'UNSEATED', 'C01': 'SEP-1'}),
('normal control 8',
[[['C83', 'Adams', 'eve', 1], ['C59', 'Strauß', 'Anna', 0], ['C08', 'adams', 'Dan', 0]],
[['H0', 3, 1], ['H1', 3, 1]]],
{'C08': 'H0-A1', 'C59': 'H0-C1', 'C83': 'SEP-1'})],
[('regression: given name tie break 1',
[[['C18', 'Mason', 'Amy', 0], ['C17', 'strauss', 'Cara', 0], ['C06', 'Mason', 'Zed', 0],
['C23', 'Zhou', 'Li', 0], ['C04', 'Strausz', 'Ben', 0]],
[['H0', 4, 4]]],
{'C18': 'H0-A1', 'C06': 'H0-A3', 'C17': 'H0-C1', 'C04': 'H0-C3', 'C23': 'UNSEATED'}),
('regression variant: given name tie break 2',
[[['C47', 'Zhou', 'Li', 0], ['C80', 'Mason', 'Amy', 0], ['C46', 'strauss', 'Cara', 0],
['C39', 'adams', 'Dan', 0], ['C17', 'Adams', 'eve', 0], ['C08', 'Strauß', 'Anna', 1],
['C83', 'Strausz', 'Ben', 0], ['C84', 'Öberg', 'Ola', 0]],
[['H0', 4, 5], ['H1', 5, 5]]],
{'C39': 'H0-A1',
'C17': 'H0-A3',
'C80': 'H0-A5',
'C46': 'H0-C1',
'C83': 'H0-C3',
'C47': 'H0-C5',
'C84': 'H1-A1',
'C08': 'SEP-1'}),
('partial repair guard 3',
[[['C98', 'Mason', 'Zed', 0], ['C54', 'Mason', 'amy', 0], ['C38', 'Adams', 'eve', 0],
['C75', 'Strauß', 'Anna', 0], ['C29', 'Strausz', 'Ben', 0], ['C10', 'adams', 'Dan', 0],
['C13', 'Zhou', 'Li', 1]],
[['H0', 1, 5], ['H1', 3, 3]]],
{'C10': 'H0-A1',
'C38': 'H0-A3',
'C54': 'H0-A5',
'C98': 'H1-A1',
'C75': 'H1-A3',
'C29': 'H1-C1',
'C13': 'SEP-1'}),
('boundary control 4', [[['C1', 'Strauß', 'Anna', 0], ['C2', 'Strausz', 'Ben', 0]], [['H1', 1, 3]]],
{'C1': 'H1-A1', 'C2': 'H1-A3'}),
('boundary control 5', [[['C9', 'Mason', 'Amy', 0], ['C1', 'Mason', 'Amy', 0]], [['H1', 2, 3]]],
{'C1': 'H1-A1', 'C9': 'H1-A3'}),
('normal control 6',
[[['C23', 'Zhou', 'Li', 1], ['C36', 'strauss', 'Cara', 1], ['C32', 'Strauß', 'Anna', 0],
['C49', 'adams', 'Dan', 0]],
[['H0', 3, 5]]],
{'C49': 'H0-A1', 'C32': 'H0-A3', 'C36': 'SEP-1', 'C23': 'SEP-2'}),
('normal control 7',
[[['C99', 'strauss', 'Cara', 0], ['C20', 'Adams', 'eve', 0], ['C62', 'Mason', 'Zed', 0],
['C82', 'Öberg', 'Ola', 1], ['C73', 'Zhou', 'Li', 1], ['C08', 'adams', 'Dan', 0]],
[['H0', 5, 4], ['H1', 1, 2]]],
{'C08': 'H0-A1', 'C20': 'H0-A3', 'C62': 'H0-C1', 'C99': 'H0-C3', 'C73': 'SEP-1', 'C82': 'SEP-2'}),
('normal control 8',
[[['C43', 'Adams', 'eve', 0], ['C78', 'Mason', 'amy', 0]], [['H0', 4, 1], ['H1', 5, 4]]],
{'C43': 'H0-A1', 'C78': 'H0-C1'})],
[('regression: given name tie break 1',
[[['C46', 'Öberg', 'Ola', 1], ['C81', 'Mason', 'amy', 1], ['C07', 'Strauß', 'Anna', 0],
['C30', 'Zhou', 'Li', 0], ['C83', 'adams', 'Dan', 0], ['C99', 'Strausz', 'Ben', 0],
['C19', 'Adams', 'eve', 0]],
[['H0', 5, 4], ['H1', 2, 2]]],
{'C83': 'H0-A1',
'C19': 'H0-A3',
'C07': 'H0-C1',
'C99': 'H0-C3',
'C30': 'H0-E1',
'C81': 'SEP-1',
'C46': 'SEP-2'}),
('regression variant: given name tie break 2',
[[['C28', 'adams', 'Dan', 0], ['C05', 'Mason', 'Amy', 0], ['C43', 'Strauß', 'Anna', 1],
['C77', 'Strausz', 'Ben', 0], ['C06', 'Adams', 'eve', 1], ['C83', 'Mason', 'amy', 0],
['C22', 'Öberg', 'Ola', 0], ['C39', 'Mason', 'Zed', 0]],
[['H0', 4, 1], ['H1', 2, 4]]],
{'C28': 'H0-A1',
'C05': 'H0-C1',
'C83': 'H1-A1',
'C39': 'H1-A3',
'C77': 'UNSEATED',
'C22': 'UNSEATED',
'C06': 'SEP-1',
'C43': 'SEP-2'}),
('partial repair guard 3',
[[['C49', 'Strauß', 'Anna', 0], ['C46', 'strauss', 'Cara', 1], ['C55', 'Strausz', 'Ben', 0],
['C79', 'Mason', 'Zed', 0], ['C74', 'Mason', 'amy', 0], ['C03', 'Zhou', 'Li', 0],
['C29', 'Mason', 'Amy', 0], ['C11', 'adams', 'Dan', 0]],
[['H0', 2, 5]]],
{'C11': 'H0-A1',
'C29': 'H0-A3',
'C74': 'H0-A5',
'C79': 'UNSEATED',
'C49': 'UNSEATED',
'C55': 'UNSEATED',
'C03': 'UNSEATED',
'C46': 'SEP-1'}),
('boundary control 4', [[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 1]], [['H1', 1, 1]]],
{'C1': 'H1-A1', 'C2': 'SEP-1'}),
('boundary control 5',
[[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 0], ['C3', 'Cole', 'Bo', 0]], [['H1', 3, 3]]],
{'C1': 'H1-A1', 'C2': 'H1-A3', 'C3': 'H1-C1'}),
('normal control 6',
[[['C66', 'Mason', 'Amy', 0], ['C29', 'Mason', 'amy', 0], ['C78', 'Zhou', 'Li', 1],
['C88', 'Strausz', 'Ben', 0], ['C47', 'Strauß', 'Anna', 0]],
[['H0', 5, 1], ['H1', 2, 1]]],
{'C29': 'H0-A1', 'C66': 'H0-C1', 'C47': 'H0-E1', 'C88': 'H1-A1', 'C78': 'SEP-1'}),
('normal control 7',
[[['C44', 'Zhou', 'Li', 0], ['C27', 'Strauß', 'Anna', 0], ['C18', 'Mason', 'Zed', 1],
['C97', 'Strausz', 'Ben', 1], ['C39', 'Mason', 'Amy', 1]],
[['H0', 1, 3], ['H1', 4, 4]]],
{'C27': 'H0-A1', 'C44': 'H0-A3', 'C39': 'SEP-1', 'C18': 'SEP-2', 'C97': 'SEP-3'}),
('normal control 8',
[[['C34', 'Mason', 'Zed', 1], ['C68', 'strauss', 'Cara', 0], ['C61', 'Mason', 'amy', 0]], [['H0', 2, 3]]],
{'C61': 'H0-A1', 'C68': 'H0-A3', 'C34': 'SEP-1'})],
[('regression: given name tie break 1',
[[['C18', 'Adams', 'eve', 0], ['C47', 'adams', 'Dan', 0], ['C42', 'Strauß', 'Anna', 0],
['C69', 'strauss', 'Cara', 1], ['C55', 'Strausz', 'Ben', 0], ['C61', 'Mason', 'Zed', 0],
['C71', 'Zhou', 'Li', 0]],
[['H0', 5, 2]]],
{'C47': 'H0-A1',
'C18': 'H0-C1',
'C61': 'H0-E1',
'C42': 'UNSEATED',
'C55': 'UNSEATED',
'C71': 'UNSEATED',
'C69': 'SEP-1'}),
('regression variant: given name tie break 2',
[[['C11', 'adams', 'Dan', 0], ['C45', 'Strauß', 'Anna', 1], ['C43', 'Mason', 'Zed', 0],
['C58', 'Zhou', 'Li', 0], ['C85', 'strauss', 'Cara', 0], ['C51', 'Mason', 'amy', 0]],
[['H0', 1, 2], ['H1', 4, 1]]],
{'C11': 'H0-A1', 'C51': 'H1-A1', 'C43': 'H1-C1', 'C85': 'UNSEATED', 'C58': 'UNSEATED', 'C45': 'SEP-1'}),
('partial repair guard 3',
[[['C30', 'Zhou', 'Li', 0], ['C34', 'Mason', 'amy', 0], ['C58', 'Adams', 'eve', 0],
['C32', 'Öberg', 'Ola', 0], ['C84', 'Strausz', 'Ben', 0], ['C22', 'strauss', 'Cara', 0],
['C69', 'Mason', 'Amy', 0]],
[['H0', 5, 5]]],
{'C58': 'H0-A1',
'C34': 'H0-A3',
'C69': 'H0-A5',
'C22': 'H0-C1',
'C84': 'H0-C3',
'C30': 'H0-C5',
'C32': 'H0-E1'}),
('boundary control 4', [[['C1', 'Strauß', 'Anna', 0], ['C2', 'Strausz', 'Ben', 0]], [['H1', 1, 3]]],
{'C1': 'H1-A1', 'C2': 'H1-A3'}),
('boundary control 5', [[['C9', 'Mason', 'Amy', 0], ['C1', 'Mason', 'Amy', 0]], [['H1', 2, 3]]],
{'C1': 'H1-A1', 'C9': 'H1-A3'}),
('normal control 6',
[[['C17', 'Strauß', 'Anna', 0], ['C46', 'Strausz', 'Ben', 0], ['C87', 'Adams', 'eve', 0],
['C91', 'Zhou', 'Li', 0], ['C82', 'Mason', 'Amy', 0], ['C66', 'Mason', 'amy', 0]],
[['H0', 1, 5], ['H1', 1, 1]]],
{'C87': 'H0-A1', 'C66': 'H0-A3', 'C82': 'H0-A5', 'C17': 'H1-A1', 'C46': 'UNSEATED', 'C91': 'UNSEATED'}),
('normal control 7',
[[['C74', 'Mason', 'amy', 0], ['C73', 'Strausz', 'Ben', 0], ['C01', 'Zhou', 'Li', 0],
['C14', 'Strauß', 'Anna', 1], ['C41', 'Mason', 'Amy', 0], ['C37', 'Öberg', 'Ola', 0],
['C25', 'strauss', 'Cara', 0], ['C86', 'Mason', 'Zed', 0]],
[['H0', 5, 4]]],
{'C41': 'H0-A1',
'C74': 'H0-A3',
'C86': 'H0-C1',
'C25': 'H0-C3',
'C73': 'H0-E1',
'C01': 'H0-E3',
'C37': 'UNSEATED',
'C14': 'SEP-1'}),
('normal control 8',
[[['C77', 'Zhou', 'Li', 1], ['C33', 'Adams', 'eve', 0], ['C11', 'Mason', 'amy', 0],
['C15', 'Mason', 'Amy', 0], ['C12', 'Öberg', 'Ola', 0], ['C52', 'Strauß', 'Anna', 0],
['C72', 'Mason', 'Zed', 0], ['C81', 'strauss', 'Cara', 0]],
[['H0', 2, 3]]],
{'C33': 'H0-A1',
'C11': 'H0-A3',
'C15': 'UNSEATED',
'C72': 'UNSEATED',
'C52': 'UNSEATED',
'C81': 'UNSEATED',
'C12': 'UNSEATED',
'C77': 'SEP-1'})],
[('regression: given name tie break 1',
[[['C35', 'Adams', 'eve', 0], ['C28', 'Öberg', 'Ola', 0], ['C93', 'strauss', 'Cara', 0],
['C58', 'Zhou', 'Li', 0], ['C61', 'Mason', 'amy', 0], ['C45', 'Mason', 'Zed', 0]],
[['H0', 3, 2], ['H1', 5, 1]]],
{'C35': 'H0-A1', 'C61': 'H0-C1', 'C45': 'H1-A1', 'C93': 'H1-C1', 'C58': 'H1-E1', 'C28': 'UNSEATED'}),
('regression variant: given name tie break 2',
[[['C72', 'Mason', 'Zed', 0], ['C88', 'Mason', 'Amy', 0], ['C24', 'Zhou', 'Li', 0],
['C33', 'Öberg', 'Ola', 0]],
[['H0', 3, 3], ['H1', 3, 3]]],
{'C88': 'H0-A1', 'C72': 'H0-A3', 'C24': 'H0-C1', 'C33': 'H0-C3'}),
('partial repair guard 3',
[[['C46', 'Mason', 'Zed', 0], ['C28', 'strauss', 'Cara', 0], ['C11', 'Zhou', 'Li', 0],
['C58', 'Mason', 'Amy', 1], ['C08', 'Strauß', 'Anna', 0], ['C07', 'Mason', 'amy', 0],
['C09', 'Öberg', 'Ola', 1]],
[['H0', 1, 3]]],
{'C07': 'H0-A1',
'C46': 'H0-A3',
'C08': 'UNSEATED',
'C28': 'UNSEATED',
'C11': 'UNSEATED',
'C58': 'SEP-1',
'C09': 'SEP-2'}),
('boundary control 4', [[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 1]], [['H1', 1, 1]]],
{'C1': 'H1-A1', 'C2': 'SEP-1'}),
('boundary control 5',
[[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 0], ['C3', 'Cole', 'Bo', 0]], [['H1', 3, 3]]],
{'C1': 'H1-A1', 'C2': 'H1-A3', 'C3': 'H1-C1'}),
('normal control 6',
[[['C11', 'Mason', 'amy', 0], ['C85', 'Zhou', 'Li', 0], ['C29', 'adams', 'Dan', 0],
['C31', 'Öberg', 'Ola', 1], ['C73', 'Adams', 'eve', 0]],
[['H0', 1, 2], ['H1', 1, 5]]],
{'C29': 'H0-A1', 'C73': 'H1-A1', 'C11': 'H1-A3', 'C85': 'H1-A5', 'C31': 'SEP-1'}),
('normal control 7',
[[['C42', 'strauss', 'Cara', 0], ['C15', 'Mason', 'Zed', 0], ['C32', 'Zhou', 'Li', 0]], [['H0', 4, 2]]],
{'C15': 'H0-A1', 'C42': 'H0-C1', 'C32': 'UNSEATED'}),
('normal control 8',
[[['C25', 'strauss', 'Cara', 0], ['C88', 'Mason', 'Amy', 1], ['C73', 'Adams', 'eve', 0]],
[['H0', 3, 5], ['H1', 2, 5]]],
{'C73': 'H0-A1', 'C25': 'H0-A3', 'C88': 'SEP-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: given name tie break 1 | {'C13': 'H0-A1', 'C28': 'H0-A3', 'C29': 'UNSEATED', 'C31': 'UNSEATED', 'C34': 'SEP-1', 'C35': 'UNSEATED', 'C48': 'UNSEATED', 'C53': 'UNSEATED'} | {'C13': 'UNSEATED', 'C28': 'H0-A1', 'C29': 'UNSEATED', 'C31': 'H0-A3', 'C34': 'SEP-1', 'C35': 'UNSEATED', 'C48': 'UNSEATED', 'C53': 'UNSEATED'} | Failed |
| regression variant: given name tie break 2 | {'C00': 'H0-A1', 'C31': 'H0-A5', 'C61': 'H1-A1', 'C68': 'H0-A3'} | {'C00': 'H0-A3', 'C31': 'H0-A5', 'C61': 'H1-A1', 'C68': 'H0-A1'} | Failed |
| partial repair guard 3 | {'C28': 'UNSEATED', 'C35': 'H0-A1', 'C45': 'H0-C1', 'C58': 'H1-E1', 'C61': 'H1-A1', 'C93': 'H1-C1'} | {'C28': 'UNSEATED', 'C35': 'H0-A1', 'C45': 'H1-A1', 'C58': 'H1-E1', 'C61': 'H0-C1', 'C93': 'H1-C1'} | Failed |
| boundary control 4 | {'C1': 'H1-A1', 'C2': 'SEP-1'} | {'C1': 'H1-A1', 'C2': 'SEP-1'} | Passed |
| boundary control 5 | {'C1': 'H1-A1', 'C2': 'H1-A3', 'C3': 'H1-C1'} | {'C1': 'H1-A1', 'C2': 'H1-A3', 'C3': 'H1-C1'} | Passed |
| normal control 6 | {'C45': 'H0-C1', 'C56': 'SEP-1', 'C58': 'H0-E1', 'C69': 'H0-A1', 'C99': 'UNSEATED'} | {'C45': 'H0-C1', 'C56': 'SEP-1', 'C58': 'H0-E1', 'C69': 'H0-A1', 'C99': 'UNSEATED'} | Passed |
| normal control 7 | {'C01': 'SEP-1', 'C02': 'H0-A1', 'C07': 'H0-A3', 'C70': 'UNSEATED'} | {'C01': 'SEP-1', 'C02': 'H0-A1', 'C07': 'H0-A3', 'C70': 'UNSEATED'} | Passed |
| normal control 8 | {'C08': 'H0-A1', 'C59': 'H0-C1', 'C83': 'SEP-1'} | {'C08': 'H0-A1', 'C59': 'H0-C1', 'C83': 'SEP-1'} | Passed |
SHA-256 / 23609dd8659734b8163ddd02a666b5d4ac4fe7a5a41f83bce73d09a823ac5c14
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(cands, rooms):
def key(c):
return (c[1].casefold(), c[2], c[0])
main = sorted([c for c in cands if not c[3]], key=key)
sep = sorted([c for c in cands if c[3]], key=key)
seats = []
for room, rows, cols in rooms:
for r in range(0, rows, 2):
for c in range(0, cols, 2):
seats.append('%s-%s%d' % (room, chr(65 + r), c + 1))
out = {}
for k, c in enumerate(main):
out[c[0]] = seats[k] if k < len(seats) else 'UNSEATED'
for k, c in enumerate(sep):
out[c[0]] = 'SEP-%d' % (k + 1)
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: given name tie break 1',
[[['C29', 'Strausz', 'Ben', 0], ['C34', 'Strauß', 'Anna', 1], ['C35', 'Zhou', 'Li', 0],
['C31', 'Mason', 'Amy', 0], ['C13', 'Mason', 'Zed', 0], ['C53', 'Öberg', 'Ola', 0],
['C48', 'strauss', 'Cara', 0], ['C28', 'Mason', 'amy', 0]],
[['H0', 2, 4]]],
{'C28': 'H0-A1',
'C31': 'H0-A3',
'C13': 'UNSEATED',
'C48': 'UNSEATED',
'C29': 'UNSEATED',
'C35': 'UNSEATED',
'C53': 'UNSEATED',
'C34': 'SEP-1'}),
('regression variant: given name tie break 2',
[[['C31', 'Mason', 'Zed', 0], ['C68', 'adams', 'Dan', 0], ['C00', 'Adams', 'eve', 0],
['C61', 'strauss', 'Cara', 0]],
[['H0', 1, 5], ['H1', 4, 3]]],
{'C68': 'H0-A1', 'C00': 'H0-A3', 'C31': 'H0-A5', 'C61': 'H1-A1'}),
('partial repair guard 3',
[[['C35', 'Adams', 'eve', 0], ['C28', 'Öberg', 'Ola', 0], ['C93', 'strauss', 'Cara', 0],
['C58', 'Zhou', 'Li', 0], ['C61', 'Mason', 'amy', 0], ['C45', 'Mason', 'Zed', 0]],
[['H0', 3, 2], ['H1', 5, 1]]],
{'C35': 'H0-A1', 'C61': 'H0-C1', 'C45': 'H1-A1', 'C93': 'H1-C1', 'C58': 'H1-E1', 'C28': 'UNSEATED'}),
('boundary control 4', [[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 1]], [['H1', 1, 1]]],
{'C1': 'H1-A1', 'C2': 'SEP-1'}),
('boundary control 5',
[[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 0], ['C3', 'Cole', 'Bo', 0]], [['H1', 3, 3]]],
{'C1': 'H1-A1', 'C2': 'H1-A3', 'C3': 'H1-C1'}),
('normal control 6',
[[['C45', 'Strauß', 'Anna', 0], ['C69', 'adams', 'Dan', 0], ['C56', 'Zhou', 'Li', 1],
['C58', 'Strausz', 'Ben', 0], ['C99', 'Öberg', 'Ola', 0]],
[['H0', 5, 1]]],
{'C69': 'H0-A1', 'C45': 'H0-C1', 'C58': 'H0-E1', 'C99': 'UNSEATED', 'C56': 'SEP-1'}),
('normal control 7',
[[['C01', 'Mason', 'Amy', 1], ['C07', 'Mason', 'amy', 0], ['C02', 'Adams', 'eve', 0],
['C70', 'Öberg', 'Ola', 0]],
[['H0', 1, 3]]],
{'C02': 'H0-A1', 'C07': 'H0-A3', 'C70': 'UNSEATED', 'C01': 'SEP-1'}),
('normal control 8',
[[['C83', 'Adams', 'eve', 1], ['C59', 'Strauß', 'Anna', 0], ['C08', 'adams', 'Dan', 0]],
[['H0', 3, 1], ['H1', 3, 1]]],
{'C08': 'H0-A1', 'C59': 'H0-C1', 'C83': 'SEP-1'})],
[('regression: given name tie break 1',
[[['C18', 'Mason', 'Amy', 0], ['C17', 'strauss', 'Cara', 0], ['C06', 'Mason', 'Zed', 0],
['C23', 'Zhou', 'Li', 0], ['C04', 'Strausz', 'Ben', 0]],
[['H0', 4, 4]]],
{'C18': 'H0-A1', 'C06': 'H0-A3', 'C17': 'H0-C1', 'C04': 'H0-C3', 'C23': 'UNSEATED'}),
('regression variant: given name tie break 2',
[[['C47', 'Zhou', 'Li', 0], ['C80', 'Mason', 'Amy', 0], ['C46', 'strauss', 'Cara', 0],
['C39', 'adams', 'Dan', 0], ['C17', 'Adams', 'eve', 0], ['C08', 'Strauß', 'Anna', 1],
['C83', 'Strausz', 'Ben', 0], ['C84', 'Öberg', 'Ola', 0]],
[['H0', 4, 5], ['H1', 5, 5]]],
{'C39': 'H0-A1',
'C17': 'H0-A3',
'C80': 'H0-A5',
'C46': 'H0-C1',
'C83': 'H0-C3',
'C47': 'H0-C5',
'C84': 'H1-A1',
'C08': 'SEP-1'}),
('partial repair guard 3',
[[['C98', 'Mason', 'Zed', 0], ['C54', 'Mason', 'amy', 0], ['C38', 'Adams', 'eve', 0],
['C75', 'Strauß', 'Anna', 0], ['C29', 'Strausz', 'Ben', 0], ['C10', 'adams', 'Dan', 0],
['C13', 'Zhou', 'Li', 1]],
[['H0', 1, 5], ['H1', 3, 3]]],
{'C10': 'H0-A1',
'C38': 'H0-A3',
'C54': 'H0-A5',
'C98': 'H1-A1',
'C75': 'H1-A3',
'C29': 'H1-C1',
'C13': 'SEP-1'}),
('boundary control 4', [[['C1', 'Strauß', 'Anna', 0], ['C2', 'Strausz', 'Ben', 0]], [['H1', 1, 3]]],
{'C1': 'H1-A1', 'C2': 'H1-A3'}),
('boundary control 5', [[['C9', 'Mason', 'Amy', 0], ['C1', 'Mason', 'Amy', 0]], [['H1', 2, 3]]],
{'C1': 'H1-A1', 'C9': 'H1-A3'}),
('normal control 6',
[[['C23', 'Zhou', 'Li', 1], ['C36', 'strauss', 'Cara', 1], ['C32', 'Strauß', 'Anna', 0],
['C49', 'adams', 'Dan', 0]],
[['H0', 3, 5]]],
{'C49': 'H0-A1', 'C32': 'H0-A3', 'C36': 'SEP-1', 'C23': 'SEP-2'}),
('normal control 7',
[[['C99', 'strauss', 'Cara', 0], ['C20', 'Adams', 'eve', 0], ['C62', 'Mason', 'Zed', 0],
['C82', 'Öberg', 'Ola', 1], ['C73', 'Zhou', 'Li', 1], ['C08', 'adams', 'Dan', 0]],
[['H0', 5, 4], ['H1', 1, 2]]],
{'C08': 'H0-A1', 'C20': 'H0-A3', 'C62': 'H0-C1', 'C99': 'H0-C3', 'C73': 'SEP-1', 'C82': 'SEP-2'}),
('normal control 8',
[[['C43', 'Adams', 'eve', 0], ['C78', 'Mason', 'amy', 0]], [['H0', 4, 1], ['H1', 5, 4]]],
{'C43': 'H0-A1', 'C78': 'H0-C1'})],
[('regression: given name tie break 1',
[[['C46', 'Öberg', 'Ola', 1], ['C81', 'Mason', 'amy', 1], ['C07', 'Strauß', 'Anna', 0],
['C30', 'Zhou', 'Li', 0], ['C83', 'adams', 'Dan', 0], ['C99', 'Strausz', 'Ben', 0],
['C19', 'Adams', 'eve', 0]],
[['H0', 5, 4], ['H1', 2, 2]]],
{'C83': 'H0-A1',
'C19': 'H0-A3',
'C07': 'H0-C1',
'C99': 'H0-C3',
'C30': 'H0-E1',
'C81': 'SEP-1',
'C46': 'SEP-2'}),
('regression variant: given name tie break 2',
[[['C28', 'adams', 'Dan', 0], ['C05', 'Mason', 'Amy', 0], ['C43', 'Strauß', 'Anna', 1],
['C77', 'Strausz', 'Ben', 0], ['C06', 'Adams', 'eve', 1], ['C83', 'Mason', 'amy', 0],
['C22', 'Öberg', 'Ola', 0], ['C39', 'Mason', 'Zed', 0]],
[['H0', 4, 1], ['H1', 2, 4]]],
{'C28': 'H0-A1',
'C05': 'H0-C1',
'C83': 'H1-A1',
'C39': 'H1-A3',
'C77': 'UNSEATED',
'C22': 'UNSEATED',
'C06': 'SEP-1',
'C43': 'SEP-2'}),
('partial repair guard 3',
[[['C49', 'Strauß', 'Anna', 0], ['C46', 'strauss', 'Cara', 1], ['C55', 'Strausz', 'Ben', 0],
['C79', 'Mason', 'Zed', 0], ['C74', 'Mason', 'amy', 0], ['C03', 'Zhou', 'Li', 0],
['C29', 'Mason', 'Amy', 0], ['C11', 'adams', 'Dan', 0]],
[['H0', 2, 5]]],
{'C11': 'H0-A1',
'C29': 'H0-A3',
'C74': 'H0-A5',
'C79': 'UNSEATED',
'C49': 'UNSEATED',
'C55': 'UNSEATED',
'C03': 'UNSEATED',
'C46': 'SEP-1'}),
('boundary control 4', [[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 1]], [['H1', 1, 1]]],
{'C1': 'H1-A1', 'C2': 'SEP-1'}),
('boundary control 5',
[[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 0], ['C3', 'Cole', 'Bo', 0]], [['H1', 3, 3]]],
{'C1': 'H1-A1', 'C2': 'H1-A3', 'C3': 'H1-C1'}),
('normal control 6',
[[['C66', 'Mason', 'Amy', 0], ['C29', 'Mason', 'amy', 0], ['C78', 'Zhou', 'Li', 1],
['C88', 'Strausz', 'Ben', 0], ['C47', 'Strauß', 'Anna', 0]],
[['H0', 5, 1], ['H1', 2, 1]]],
{'C29': 'H0-A1', 'C66': 'H0-C1', 'C47': 'H0-E1', 'C88': 'H1-A1', 'C78': 'SEP-1'}),
('normal control 7',
[[['C44', 'Zhou', 'Li', 0], ['C27', 'Strauß', 'Anna', 0], ['C18', 'Mason', 'Zed', 1],
['C97', 'Strausz', 'Ben', 1], ['C39', 'Mason', 'Amy', 1]],
[['H0', 1, 3], ['H1', 4, 4]]],
{'C27': 'H0-A1', 'C44': 'H0-A3', 'C39': 'SEP-1', 'C18': 'SEP-2', 'C97': 'SEP-3'}),
('normal control 8',
[[['C34', 'Mason', 'Zed', 1], ['C68', 'strauss', 'Cara', 0], ['C61', 'Mason', 'amy', 0]], [['H0', 2, 3]]],
{'C61': 'H0-A1', 'C68': 'H0-A3', 'C34': 'SEP-1'})],
[('regression: given name tie break 1',
[[['C18', 'Adams', 'eve', 0], ['C47', 'adams', 'Dan', 0], ['C42', 'Strauß', 'Anna', 0],
['C69', 'strauss', 'Cara', 1], ['C55', 'Strausz', 'Ben', 0], ['C61', 'Mason', 'Zed', 0],
['C71', 'Zhou', 'Li', 0]],
[['H0', 5, 2]]],
{'C47': 'H0-A1',
'C18': 'H0-C1',
'C61': 'H0-E1',
'C42': 'UNSEATED',
'C55': 'UNSEATED',
'C71': 'UNSEATED',
'C69': 'SEP-1'}),
('regression variant: given name tie break 2',
[[['C11', 'adams', 'Dan', 0], ['C45', 'Strauß', 'Anna', 1], ['C43', 'Mason', 'Zed', 0],
['C58', 'Zhou', 'Li', 0], ['C85', 'strauss', 'Cara', 0], ['C51', 'Mason', 'amy', 0]],
[['H0', 1, 2], ['H1', 4, 1]]],
{'C11': 'H0-A1', 'C51': 'H1-A1', 'C43': 'H1-C1', 'C85': 'UNSEATED', 'C58': 'UNSEATED', 'C45': 'SEP-1'}),
('partial repair guard 3',
[[['C30', 'Zhou', 'Li', 0], ['C34', 'Mason', 'amy', 0], ['C58', 'Adams', 'eve', 0],
['C32', 'Öberg', 'Ola', 0], ['C84', 'Strausz', 'Ben', 0], ['C22', 'strauss', 'Cara', 0],
['C69', 'Mason', 'Amy', 0]],
[['H0', 5, 5]]],
{'C58': 'H0-A1',
'C34': 'H0-A3',
'C69': 'H0-A5',
'C22': 'H0-C1',
'C84': 'H0-C3',
'C30': 'H0-C5',
'C32': 'H0-E1'}),
('boundary control 4', [[['C1', 'Strauß', 'Anna', 0], ['C2', 'Strausz', 'Ben', 0]], [['H1', 1, 3]]],
{'C1': 'H1-A1', 'C2': 'H1-A3'}),
('boundary control 5', [[['C9', 'Mason', 'Amy', 0], ['C1', 'Mason', 'Amy', 0]], [['H1', 2, 3]]],
{'C1': 'H1-A1', 'C9': 'H1-A3'}),
('normal control 6',
[[['C17', 'Strauß', 'Anna', 0], ['C46', 'Strausz', 'Ben', 0], ['C87', 'Adams', 'eve', 0],
['C91', 'Zhou', 'Li', 0], ['C82', 'Mason', 'Amy', 0], ['C66', 'Mason', 'amy', 0]],
[['H0', 1, 5], ['H1', 1, 1]]],
{'C87': 'H0-A1', 'C66': 'H0-A3', 'C82': 'H0-A5', 'C17': 'H1-A1', 'C46': 'UNSEATED', 'C91': 'UNSEATED'}),
('normal control 7',
[[['C74', 'Mason', 'amy', 0], ['C73', 'Strausz', 'Ben', 0], ['C01', 'Zhou', 'Li', 0],
['C14', 'Strauß', 'Anna', 1], ['C41', 'Mason', 'Amy', 0], ['C37', 'Öberg', 'Ola', 0],
['C25', 'strauss', 'Cara', 0], ['C86', 'Mason', 'Zed', 0]],
[['H0', 5, 4]]],
{'C41': 'H0-A1',
'C74': 'H0-A3',
'C86': 'H0-C1',
'C25': 'H0-C3',
'C73': 'H0-E1',
'C01': 'H0-E3',
'C37': 'UNSEATED',
'C14': 'SEP-1'}),
('normal control 8',
[[['C77', 'Zhou', 'Li', 1], ['C33', 'Adams', 'eve', 0], ['C11', 'Mason', 'amy', 0],
['C15', 'Mason', 'Amy', 0], ['C12', 'Öberg', 'Ola', 0], ['C52', 'Strauß', 'Anna', 0],
['C72', 'Mason', 'Zed', 0], ['C81', 'strauss', 'Cara', 0]],
[['H0', 2, 3]]],
{'C33': 'H0-A1',
'C11': 'H0-A3',
'C15': 'UNSEATED',
'C72': 'UNSEATED',
'C52': 'UNSEATED',
'C81': 'UNSEATED',
'C12': 'UNSEATED',
'C77': 'SEP-1'})],
[('regression: given name tie break 1',
[[['C35', 'Adams', 'eve', 0], ['C28', 'Öberg', 'Ola', 0], ['C93', 'strauss', 'Cara', 0],
['C58', 'Zhou', 'Li', 0], ['C61', 'Mason', 'amy', 0], ['C45', 'Mason', 'Zed', 0]],
[['H0', 3, 2], ['H1', 5, 1]]],
{'C35': 'H0-A1', 'C61': 'H0-C1', 'C45': 'H1-A1', 'C93': 'H1-C1', 'C58': 'H1-E1', 'C28': 'UNSEATED'}),
('regression variant: given name tie break 2',
[[['C72', 'Mason', 'Zed', 0], ['C88', 'Mason', 'Amy', 0], ['C24', 'Zhou', 'Li', 0],
['C33', 'Öberg', 'Ola', 0]],
[['H0', 3, 3], ['H1', 3, 3]]],
{'C88': 'H0-A1', 'C72': 'H0-A3', 'C24': 'H0-C1', 'C33': 'H0-C3'}),
('partial repair guard 3',
[[['C46', 'Mason', 'Zed', 0], ['C28', 'strauss', 'Cara', 0], ['C11', 'Zhou', 'Li', 0],
['C58', 'Mason', 'Amy', 1], ['C08', 'Strauß', 'Anna', 0], ['C07', 'Mason', 'amy', 0],
['C09', 'Öberg', 'Ola', 1]],
[['H0', 1, 3]]],
{'C07': 'H0-A1',
'C46': 'H0-A3',
'C08': 'UNSEATED',
'C28': 'UNSEATED',
'C11': 'UNSEATED',
'C58': 'SEP-1',
'C09': 'SEP-2'}),
('boundary control 4', [[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 1]], [['H1', 1, 1]]],
{'C1': 'H1-A1', 'C2': 'SEP-1'}),
('boundary control 5',
[[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 0], ['C3', 'Cole', 'Bo', 0]], [['H1', 3, 3]]],
{'C1': 'H1-A1', 'C2': 'H1-A3', 'C3': 'H1-C1'}),
('normal control 6',
[[['C11', 'Mason', 'amy', 0], ['C85', 'Zhou', 'Li', 0], ['C29', 'adams', 'Dan', 0],
['C31', 'Öberg', 'Ola', 1], ['C73', 'Adams', 'eve', 0]],
[['H0', 1, 2], ['H1', 1, 5]]],
{'C29': 'H0-A1', 'C73': 'H1-A1', 'C11': 'H1-A3', 'C85': 'H1-A5', 'C31': 'SEP-1'}),
('normal control 7',
[[['C42', 'strauss', 'Cara', 0], ['C15', 'Mason', 'Zed', 0], ['C32', 'Zhou', 'Li', 0]], [['H0', 4, 2]]],
{'C15': 'H0-A1', 'C42': 'H0-C1', 'C32': 'UNSEATED'}),
('normal control 8',
[[['C25', 'strauss', 'Cara', 0], ['C88', 'Mason', 'Amy', 1], ['C73', 'Adams', 'eve', 0]],
[['H0', 3, 5], ['H1', 2, 5]]],
{'C73': 'H0-A1', 'C25': 'H0-A3', 'C88': 'SEP-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: given name tie break 1 | {'C13': 'H0-A3', 'C28': 'UNSEATED', 'C29': 'UNSEATED', 'C31': 'H0-A1', 'C34': 'SEP-1', 'C35': 'UNSEATED', 'C48': 'UNSEATED', 'C53': 'UNSEATED'} | {'C13': 'UNSEATED', 'C28': 'H0-A1', 'C29': 'UNSEATED', 'C31': 'H0-A3', 'C34': 'SEP-1', 'C35': 'UNSEATED', 'C48': 'UNSEATED', 'C53': 'UNSEATED'} | Failed |
| regression variant: given name tie break 2 | {'C00': 'H0-A3', 'C31': 'H0-A5', 'C61': 'H1-A1', 'C68': 'H0-A1'} | {'C00': 'H0-A3', 'C31': 'H0-A5', 'C61': 'H1-A1', 'C68': 'H0-A1'} | Passed |
| partial repair guard 3 | {'C28': 'UNSEATED', 'C35': 'H0-A1', 'C45': 'H0-C1', 'C58': 'H1-E1', 'C61': 'H1-A1', 'C93': 'H1-C1'} | {'C28': 'UNSEATED', 'C35': 'H0-A1', 'C45': 'H1-A1', 'C58': 'H1-E1', 'C61': 'H0-C1', 'C93': 'H1-C1'} | Failed |
| boundary control 4 | {'C1': 'H1-A1', 'C2': 'SEP-1'} | {'C1': 'H1-A1', 'C2': 'SEP-1'} | Passed |
| boundary control 5 | {'C1': 'H1-A1', 'C2': 'H1-A3', 'C3': 'H1-C1'} | {'C1': 'H1-A1', 'C2': 'H1-A3', 'C3': 'H1-C1'} | Passed |
| normal control 6 | {'C45': 'H0-C1', 'C56': 'SEP-1', 'C58': 'H0-E1', 'C69': 'H0-A1', 'C99': 'UNSEATED'} | {'C45': 'H0-C1', 'C56': 'SEP-1', 'C58': 'H0-E1', 'C69': 'H0-A1', 'C99': 'UNSEATED'} | Passed |
| normal control 7 | {'C01': 'SEP-1', 'C02': 'H0-A1', 'C07': 'H0-A3', 'C70': 'UNSEATED'} | {'C01': 'SEP-1', 'C02': 'H0-A1', 'C07': 'H0-A3', 'C70': 'UNSEATED'} | Passed |
| normal control 8 | {'C08': 'H0-A1', 'C59': 'H0-C1', 'C83': 'SEP-1'} | {'C08': 'H0-A1', 'C59': 'H0-C1', 'C83': 'SEP-1'} | Passed |
SHA-256 / 4a8b0d369a70cf134ea3128f76f2067bc294441a0b5786006bacc9b36eabb200
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(cands, rooms):
def key(c):
return (c[1].casefold(), c[2].casefold(), c[0])
main = sorted([c for c in cands if not c[3]], key=key)
sep = sorted([c for c in cands if c[3]], key=key)
seats = []
for room, rows, cols in rooms:
for r in range(0, rows, 2):
for c in range(0, cols, 2):
seats.append('%s-%s%d' % (room, chr(65 + r), c + 1))
out = {}
for k, c in enumerate(main):
out[c[0]] = seats[k] if k < len(seats) else 'UNSEATED'
for k, c in enumerate(sep):
out[c[0]] = 'SEP-%d' % (k + 1)
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: given name tie break 1',
[[['C29', 'Strausz', 'Ben', 0], ['C34', 'Strauß', 'Anna', 1], ['C35', 'Zhou', 'Li', 0],
['C31', 'Mason', 'Amy', 0], ['C13', 'Mason', 'Zed', 0], ['C53', 'Öberg', 'Ola', 0],
['C48', 'strauss', 'Cara', 0], ['C28', 'Mason', 'amy', 0]],
[['H0', 2, 4]]],
{'C28': 'H0-A1',
'C31': 'H0-A3',
'C13': 'UNSEATED',
'C48': 'UNSEATED',
'C29': 'UNSEATED',
'C35': 'UNSEATED',
'C53': 'UNSEATED',
'C34': 'SEP-1'}),
('regression variant: given name tie break 2',
[[['C31', 'Mason', 'Zed', 0], ['C68', 'adams', 'Dan', 0], ['C00', 'Adams', 'eve', 0],
['C61', 'strauss', 'Cara', 0]],
[['H0', 1, 5], ['H1', 4, 3]]],
{'C68': 'H0-A1', 'C00': 'H0-A3', 'C31': 'H0-A5', 'C61': 'H1-A1'}),
('partial repair guard 3',
[[['C35', 'Adams', 'eve', 0], ['C28', 'Öberg', 'Ola', 0], ['C93', 'strauss', 'Cara', 0],
['C58', 'Zhou', 'Li', 0], ['C61', 'Mason', 'amy', 0], ['C45', 'Mason', 'Zed', 0]],
[['H0', 3, 2], ['H1', 5, 1]]],
{'C35': 'H0-A1', 'C61': 'H0-C1', 'C45': 'H1-A1', 'C93': 'H1-C1', 'C58': 'H1-E1', 'C28': 'UNSEATED'}),
('boundary control 4', [[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 1]], [['H1', 1, 1]]],
{'C1': 'H1-A1', 'C2': 'SEP-1'}),
('boundary control 5',
[[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 0], ['C3', 'Cole', 'Bo', 0]], [['H1', 3, 3]]],
{'C1': 'H1-A1', 'C2': 'H1-A3', 'C3': 'H1-C1'}),
('normal control 6',
[[['C45', 'Strauß', 'Anna', 0], ['C69', 'adams', 'Dan', 0], ['C56', 'Zhou', 'Li', 1],
['C58', 'Strausz', 'Ben', 0], ['C99', 'Öberg', 'Ola', 0]],
[['H0', 5, 1]]],
{'C69': 'H0-A1', 'C45': 'H0-C1', 'C58': 'H0-E1', 'C99': 'UNSEATED', 'C56': 'SEP-1'}),
('normal control 7',
[[['C01', 'Mason', 'Amy', 1], ['C07', 'Mason', 'amy', 0], ['C02', 'Adams', 'eve', 0],
['C70', 'Öberg', 'Ola', 0]],
[['H0', 1, 3]]],
{'C02': 'H0-A1', 'C07': 'H0-A3', 'C70': 'UNSEATED', 'C01': 'SEP-1'}),
('normal control 8',
[[['C83', 'Adams', 'eve', 1], ['C59', 'Strauß', 'Anna', 0], ['C08', 'adams', 'Dan', 0]],
[['H0', 3, 1], ['H1', 3, 1]]],
{'C08': 'H0-A1', 'C59': 'H0-C1', 'C83': 'SEP-1'})],
[('regression: given name tie break 1',
[[['C18', 'Mason', 'Amy', 0], ['C17', 'strauss', 'Cara', 0], ['C06', 'Mason', 'Zed', 0],
['C23', 'Zhou', 'Li', 0], ['C04', 'Strausz', 'Ben', 0]],
[['H0', 4, 4]]],
{'C18': 'H0-A1', 'C06': 'H0-A3', 'C17': 'H0-C1', 'C04': 'H0-C3', 'C23': 'UNSEATED'}),
('regression variant: given name tie break 2',
[[['C47', 'Zhou', 'Li', 0], ['C80', 'Mason', 'Amy', 0], ['C46', 'strauss', 'Cara', 0],
['C39', 'adams', 'Dan', 0], ['C17', 'Adams', 'eve', 0], ['C08', 'Strauß', 'Anna', 1],
['C83', 'Strausz', 'Ben', 0], ['C84', 'Öberg', 'Ola', 0]],
[['H0', 4, 5], ['H1', 5, 5]]],
{'C39': 'H0-A1',
'C17': 'H0-A3',
'C80': 'H0-A5',
'C46': 'H0-C1',
'C83': 'H0-C3',
'C47': 'H0-C5',
'C84': 'H1-A1',
'C08': 'SEP-1'}),
('partial repair guard 3',
[[['C98', 'Mason', 'Zed', 0], ['C54', 'Mason', 'amy', 0], ['C38', 'Adams', 'eve', 0],
['C75', 'Strauß', 'Anna', 0], ['C29', 'Strausz', 'Ben', 0], ['C10', 'adams', 'Dan', 0],
['C13', 'Zhou', 'Li', 1]],
[['H0', 1, 5], ['H1', 3, 3]]],
{'C10': 'H0-A1',
'C38': 'H0-A3',
'C54': 'H0-A5',
'C98': 'H1-A1',
'C75': 'H1-A3',
'C29': 'H1-C1',
'C13': 'SEP-1'}),
('boundary control 4', [[['C1', 'Strauß', 'Anna', 0], ['C2', 'Strausz', 'Ben', 0]], [['H1', 1, 3]]],
{'C1': 'H1-A1', 'C2': 'H1-A3'}),
('boundary control 5', [[['C9', 'Mason', 'Amy', 0], ['C1', 'Mason', 'Amy', 0]], [['H1', 2, 3]]],
{'C1': 'H1-A1', 'C9': 'H1-A3'}),
('normal control 6',
[[['C23', 'Zhou', 'Li', 1], ['C36', 'strauss', 'Cara', 1], ['C32', 'Strauß', 'Anna', 0],
['C49', 'adams', 'Dan', 0]],
[['H0', 3, 5]]],
{'C49': 'H0-A1', 'C32': 'H0-A3', 'C36': 'SEP-1', 'C23': 'SEP-2'}),
('normal control 7',
[[['C99', 'strauss', 'Cara', 0], ['C20', 'Adams', 'eve', 0], ['C62', 'Mason', 'Zed', 0],
['C82', 'Öberg', 'Ola', 1], ['C73', 'Zhou', 'Li', 1], ['C08', 'adams', 'Dan', 0]],
[['H0', 5, 4], ['H1', 1, 2]]],
{'C08': 'H0-A1', 'C20': 'H0-A3', 'C62': 'H0-C1', 'C99': 'H0-C3', 'C73': 'SEP-1', 'C82': 'SEP-2'}),
('normal control 8',
[[['C43', 'Adams', 'eve', 0], ['C78', 'Mason', 'amy', 0]], [['H0', 4, 1], ['H1', 5, 4]]],
{'C43': 'H0-A1', 'C78': 'H0-C1'})],
[('regression: given name tie break 1',
[[['C46', 'Öberg', 'Ola', 1], ['C81', 'Mason', 'amy', 1], ['C07', 'Strauß', 'Anna', 0],
['C30', 'Zhou', 'Li', 0], ['C83', 'adams', 'Dan', 0], ['C99', 'Strausz', 'Ben', 0],
['C19', 'Adams', 'eve', 0]],
[['H0', 5, 4], ['H1', 2, 2]]],
{'C83': 'H0-A1',
'C19': 'H0-A3',
'C07': 'H0-C1',
'C99': 'H0-C3',
'C30': 'H0-E1',
'C81': 'SEP-1',
'C46': 'SEP-2'}),
('regression variant: given name tie break 2',
[[['C28', 'adams', 'Dan', 0], ['C05', 'Mason', 'Amy', 0], ['C43', 'Strauß', 'Anna', 1],
['C77', 'Strausz', 'Ben', 0], ['C06', 'Adams', 'eve', 1], ['C83', 'Mason', 'amy', 0],
['C22', 'Öberg', 'Ola', 0], ['C39', 'Mason', 'Zed', 0]],
[['H0', 4, 1], ['H1', 2, 4]]],
{'C28': 'H0-A1',
'C05': 'H0-C1',
'C83': 'H1-A1',
'C39': 'H1-A3',
'C77': 'UNSEATED',
'C22': 'UNSEATED',
'C06': 'SEP-1',
'C43': 'SEP-2'}),
('partial repair guard 3',
[[['C49', 'Strauß', 'Anna', 0], ['C46', 'strauss', 'Cara', 1], ['C55', 'Strausz', 'Ben', 0],
['C79', 'Mason', 'Zed', 0], ['C74', 'Mason', 'amy', 0], ['C03', 'Zhou', 'Li', 0],
['C29', 'Mason', 'Amy', 0], ['C11', 'adams', 'Dan', 0]],
[['H0', 2, 5]]],
{'C11': 'H0-A1',
'C29': 'H0-A3',
'C74': 'H0-A5',
'C79': 'UNSEATED',
'C49': 'UNSEATED',
'C55': 'UNSEATED',
'C03': 'UNSEATED',
'C46': 'SEP-1'}),
('boundary control 4', [[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 1]], [['H1', 1, 1]]],
{'C1': 'H1-A1', 'C2': 'SEP-1'}),
('boundary control 5',
[[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 0], ['C3', 'Cole', 'Bo', 0]], [['H1', 3, 3]]],
{'C1': 'H1-A1', 'C2': 'H1-A3', 'C3': 'H1-C1'}),
('normal control 6',
[[['C66', 'Mason', 'Amy', 0], ['C29', 'Mason', 'amy', 0], ['C78', 'Zhou', 'Li', 1],
['C88', 'Strausz', 'Ben', 0], ['C47', 'Strauß', 'Anna', 0]],
[['H0', 5, 1], ['H1', 2, 1]]],
{'C29': 'H0-A1', 'C66': 'H0-C1', 'C47': 'H0-E1', 'C88': 'H1-A1', 'C78': 'SEP-1'}),
('normal control 7',
[[['C44', 'Zhou', 'Li', 0], ['C27', 'Strauß', 'Anna', 0], ['C18', 'Mason', 'Zed', 1],
['C97', 'Strausz', 'Ben', 1], ['C39', 'Mason', 'Amy', 1]],
[['H0', 1, 3], ['H1', 4, 4]]],
{'C27': 'H0-A1', 'C44': 'H0-A3', 'C39': 'SEP-1', 'C18': 'SEP-2', 'C97': 'SEP-3'}),
('normal control 8',
[[['C34', 'Mason', 'Zed', 1], ['C68', 'strauss', 'Cara', 0], ['C61', 'Mason', 'amy', 0]], [['H0', 2, 3]]],
{'C61': 'H0-A1', 'C68': 'H0-A3', 'C34': 'SEP-1'})],
[('regression: given name tie break 1',
[[['C18', 'Adams', 'eve', 0], ['C47', 'adams', 'Dan', 0], ['C42', 'Strauß', 'Anna', 0],
['C69', 'strauss', 'Cara', 1], ['C55', 'Strausz', 'Ben', 0], ['C61', 'Mason', 'Zed', 0],
['C71', 'Zhou', 'Li', 0]],
[['H0', 5, 2]]],
{'C47': 'H0-A1',
'C18': 'H0-C1',
'C61': 'H0-E1',
'C42': 'UNSEATED',
'C55': 'UNSEATED',
'C71': 'UNSEATED',
'C69': 'SEP-1'}),
('regression variant: given name tie break 2',
[[['C11', 'adams', 'Dan', 0], ['C45', 'Strauß', 'Anna', 1], ['C43', 'Mason', 'Zed', 0],
['C58', 'Zhou', 'Li', 0], ['C85', 'strauss', 'Cara', 0], ['C51', 'Mason', 'amy', 0]],
[['H0', 1, 2], ['H1', 4, 1]]],
{'C11': 'H0-A1', 'C51': 'H1-A1', 'C43': 'H1-C1', 'C85': 'UNSEATED', 'C58': 'UNSEATED', 'C45': 'SEP-1'}),
('partial repair guard 3',
[[['C30', 'Zhou', 'Li', 0], ['C34', 'Mason', 'amy', 0], ['C58', 'Adams', 'eve', 0],
['C32', 'Öberg', 'Ola', 0], ['C84', 'Strausz', 'Ben', 0], ['C22', 'strauss', 'Cara', 0],
['C69', 'Mason', 'Amy', 0]],
[['H0', 5, 5]]],
{'C58': 'H0-A1',
'C34': 'H0-A3',
'C69': 'H0-A5',
'C22': 'H0-C1',
'C84': 'H0-C3',
'C30': 'H0-C5',
'C32': 'H0-E1'}),
('boundary control 4', [[['C1', 'Strauß', 'Anna', 0], ['C2', 'Strausz', 'Ben', 0]], [['H1', 1, 3]]],
{'C1': 'H1-A1', 'C2': 'H1-A3'}),
('boundary control 5', [[['C9', 'Mason', 'Amy', 0], ['C1', 'Mason', 'Amy', 0]], [['H1', 2, 3]]],
{'C1': 'H1-A1', 'C9': 'H1-A3'}),
('normal control 6',
[[['C17', 'Strauß', 'Anna', 0], ['C46', 'Strausz', 'Ben', 0], ['C87', 'Adams', 'eve', 0],
['C91', 'Zhou', 'Li', 0], ['C82', 'Mason', 'Amy', 0], ['C66', 'Mason', 'amy', 0]],
[['H0', 1, 5], ['H1', 1, 1]]],
{'C87': 'H0-A1', 'C66': 'H0-A3', 'C82': 'H0-A5', 'C17': 'H1-A1', 'C46': 'UNSEATED', 'C91': 'UNSEATED'}),
('normal control 7',
[[['C74', 'Mason', 'amy', 0], ['C73', 'Strausz', 'Ben', 0], ['C01', 'Zhou', 'Li', 0],
['C14', 'Strauß', 'Anna', 1], ['C41', 'Mason', 'Amy', 0], ['C37', 'Öberg', 'Ola', 0],
['C25', 'strauss', 'Cara', 0], ['C86', 'Mason', 'Zed', 0]],
[['H0', 5, 4]]],
{'C41': 'H0-A1',
'C74': 'H0-A3',
'C86': 'H0-C1',
'C25': 'H0-C3',
'C73': 'H0-E1',
'C01': 'H0-E3',
'C37': 'UNSEATED',
'C14': 'SEP-1'}),
('normal control 8',
[[['C77', 'Zhou', 'Li', 1], ['C33', 'Adams', 'eve', 0], ['C11', 'Mason', 'amy', 0],
['C15', 'Mason', 'Amy', 0], ['C12', 'Öberg', 'Ola', 0], ['C52', 'Strauß', 'Anna', 0],
['C72', 'Mason', 'Zed', 0], ['C81', 'strauss', 'Cara', 0]],
[['H0', 2, 3]]],
{'C33': 'H0-A1',
'C11': 'H0-A3',
'C15': 'UNSEATED',
'C72': 'UNSEATED',
'C52': 'UNSEATED',
'C81': 'UNSEATED',
'C12': 'UNSEATED',
'C77': 'SEP-1'})],
[('regression: given name tie break 1',
[[['C35', 'Adams', 'eve', 0], ['C28', 'Öberg', 'Ola', 0], ['C93', 'strauss', 'Cara', 0],
['C58', 'Zhou', 'Li', 0], ['C61', 'Mason', 'amy', 0], ['C45', 'Mason', 'Zed', 0]],
[['H0', 3, 2], ['H1', 5, 1]]],
{'C35': 'H0-A1', 'C61': 'H0-C1', 'C45': 'H1-A1', 'C93': 'H1-C1', 'C58': 'H1-E1', 'C28': 'UNSEATED'}),
('regression variant: given name tie break 2',
[[['C72', 'Mason', 'Zed', 0], ['C88', 'Mason', 'Amy', 0], ['C24', 'Zhou', 'Li', 0],
['C33', 'Öberg', 'Ola', 0]],
[['H0', 3, 3], ['H1', 3, 3]]],
{'C88': 'H0-A1', 'C72': 'H0-A3', 'C24': 'H0-C1', 'C33': 'H0-C3'}),
('partial repair guard 3',
[[['C46', 'Mason', 'Zed', 0], ['C28', 'strauss', 'Cara', 0], ['C11', 'Zhou', 'Li', 0],
['C58', 'Mason', 'Amy', 1], ['C08', 'Strauß', 'Anna', 0], ['C07', 'Mason', 'amy', 0],
['C09', 'Öberg', 'Ola', 1]],
[['H0', 1, 3]]],
{'C07': 'H0-A1',
'C46': 'H0-A3',
'C08': 'UNSEATED',
'C28': 'UNSEATED',
'C11': 'UNSEATED',
'C58': 'SEP-1',
'C09': 'SEP-2'}),
('boundary control 4', [[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 1]], [['H1', 1, 1]]],
{'C1': 'H1-A1', 'C2': 'SEP-1'}),
('boundary control 5',
[[['C1', 'Adams', 'Eve', 0], ['C2', 'Baker', 'Al', 0], ['C3', 'Cole', 'Bo', 0]], [['H1', 3, 3]]],
{'C1': 'H1-A1', 'C2': 'H1-A3', 'C3': 'H1-C1'}),
('normal control 6',
[[['C11', 'Mason', 'amy', 0], ['C85', 'Zhou', 'Li', 0], ['C29', 'adams', 'Dan', 0],
['C31', 'Öberg', 'Ola', 1], ['C73', 'Adams', 'eve', 0]],
[['H0', 1, 2], ['H1', 1, 5]]],
{'C29': 'H0-A1', 'C73': 'H1-A1', 'C11': 'H1-A3', 'C85': 'H1-A5', 'C31': 'SEP-1'}),
('normal control 7',
[[['C42', 'strauss', 'Cara', 0], ['C15', 'Mason', 'Zed', 0], ['C32', 'Zhou', 'Li', 0]], [['H0', 4, 2]]],
{'C15': 'H0-A1', 'C42': 'H0-C1', 'C32': 'UNSEATED'}),
('normal control 8',
[[['C25', 'strauss', 'Cara', 0], ['C88', 'Mason', 'Amy', 1], ['C73', 'Adams', 'eve', 0]],
[['H0', 3, 5], ['H1', 2, 5]]],
{'C73': 'H0-A1', 'C25': 'H0-A3', 'C88': 'SEP-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: given name tie break 1 | {'C13': 'UNSEATED', 'C28': 'H0-A1', 'C29': 'UNSEATED', 'C31': 'H0-A3', 'C34': 'SEP-1', 'C35': 'UNSEATED', 'C48': 'UNSEATED', 'C53': 'UNSEATED'} | {'C13': 'UNSEATED', 'C28': 'H0-A1', 'C29': 'UNSEATED', 'C31': 'H0-A3', 'C34': 'SEP-1', 'C35': 'UNSEATED', 'C48': 'UNSEATED', 'C53': 'UNSEATED'} | Passed |
| regression variant: given name tie break 2 | {'C00': 'H0-A3', 'C31': 'H0-A5', 'C61': 'H1-A1', 'C68': 'H0-A1'} | {'C00': 'H0-A3', 'C31': 'H0-A5', 'C61': 'H1-A1', 'C68': 'H0-A1'} | Passed |
| partial repair guard 3 | {'C28': 'UNSEATED', 'C35': 'H0-A1', 'C45': 'H1-A1', 'C58': 'H1-E1', 'C61': 'H0-C1', 'C93': 'H1-C1'} | {'C28': 'UNSEATED', 'C35': 'H0-A1', 'C45': 'H1-A1', 'C58': 'H1-E1', 'C61': 'H0-C1', 'C93': 'H1-C1'} | Passed |
| boundary control 4 | {'C1': 'H1-A1', 'C2': 'SEP-1'} | {'C1': 'H1-A1', 'C2': 'SEP-1'} | Passed |
| boundary control 5 | {'C1': 'H1-A1', 'C2': 'H1-A3', 'C3': 'H1-C1'} | {'C1': 'H1-A1', 'C2': 'H1-A3', 'C3': 'H1-C1'} | Passed |
| normal control 6 | {'C45': 'H0-C1', 'C56': 'SEP-1', 'C58': 'H0-E1', 'C69': 'H0-A1', 'C99': 'UNSEATED'} | {'C45': 'H0-C1', 'C56': 'SEP-1', 'C58': 'H0-E1', 'C69': 'H0-A1', 'C99': 'UNSEATED'} | Passed |
| normal control 7 | {'C01': 'SEP-1', 'C02': 'H0-A1', 'C07': 'H0-A3', 'C70': 'UNSEATED'} | {'C01': 'SEP-1', 'C02': 'H0-A1', 'C07': 'H0-A3', 'C70': 'UNSEATED'} | Passed |
| normal control 8 | {'C08': 'H0-A1', 'C59': 'H0-C1', 'C83': 'SEP-1'} | {'C08': 'H0-A1', 'C59': 'H0-C1', 'C83': 'SEP-1'} | Passed |
SHA-256 / 0bf9369ee7d293d5f403cc322153ecfcb7bced70c0863ad8f6273df1342cb71a
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:05.341217+00:00.
Case digest / b4bd24b80bf48e3f56380fed4757b5b546e3db849cd09f2b680588f4c7313401