FA-94731 / Exam timetabling constraints / Open access
Room swap inside the same venue notifies candidates · case 01
Candidates receive change notices for internal room reshuffles.
ROOT CAUSE
The change test compares rooms instead of venues.
VERIFIED REPAIR
Notify on venue changes only.
Unsuccessful approach: Using the room code prefix as the venue misclassifies rooms whose codes differ within one venue.
Case contract
old/new timetables map exam -> [period, room]; rooms room -> venue; enrol [student, exam] rows (may repeat). Reasons: added, removed, moved (period changed; takes precedence), venue (same period, different venue). A room change within the same venue needs no notice. Return distinct [student, exam, reason] rows sorted by student, exam.
Why this case matters
Republishing a timetable must notify exactly the affected candidates.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(old, new, rooms, enrol):
reasons = {}
for ex in set(old) | set(new):
if ex not in old:
reasons[ex] = 'added'
elif ex not in new:
reasons[ex] = 'removed'
elif old[ex][0] != new[ex][0]:
reasons[ex] = 'moved'
elif old[ex][1] != new[ex][1]:
reasons[ex] = 'venue'
out = sorted(set((st, ex, reasons[ex]) for st, ex in enrol if ex in reasons))
return [list(t) for t in out]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: venue not room 1',
[{'A': [0, 'H1']}, {'A': [0, 'H2']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A']]],
[]),
('regression variant: venue not room 2',
[{'MATH101': [3, 'L1'], 'PHYS110': [1, 'L1'], 'CHEM120': [0, 'H1'], 'BIO130': [1, 'H2']},
{'MATH101': [3, 'L1'],
'MATH101H': [1, 'H2'],
'PHYS110': [1, 'L2'],
'CHEM120': [0, 'H1'],
'BIO130': [2, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'BIO130'], ['s1', 'ECON150'], ['s4', 'HIST140'], ['s5', 'MATH101'], ['s5', 'HIST140'],
['s5', 'PHYS110'], ['s1', 'ECON150'], ['s3', 'MATH101H'], ['s4', 'PHYS110'], ['s3', 'CHEM120'],
['s5', 'MATH101H']]],
[['s1', 'BIO130', 'moved'], ['s3', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']]),
('partial repair guard 3',
[{'MATH101': [3, 'H2'], 'MATH101H': [2, 'H2'], 'PHYS110': [3, 'H2'], 'BIO130': [1, 'H2']},
{'MATH101': [3, 'H2'],
'MATH101H': [2, 'G1'],
'PHYS110': [0, 'L1'],
'CHEM120': [0, 'L2'],
'BIO130': [1, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'HIST140'], ['s2', 'CHEM120'], ['s4', 'MATH101H'], ['s1', 'CHEM120'], ['s4', 'ECON150'],
['s1', 'MATH101'], ['s4', 'BIO130'], ['s4', 'HIST140'], ['s1', 'ECON150'], ['s3', 'MATH101'],
['s1', 'HIST140']]],
[['s1', 'CHEM120', 'added'], ['s2', 'CHEM120', 'added']]),
('boundary control 4',
[{'A': [0, 'H1']}, {'A': [0, 'G1']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A'], ['s1', 'A']]],
[]),
('normal control 5',
[{'MATH101': [1, 'H1'], 'PHYS110': [3, 'L1'], 'CHEM120': [3, 'L1'], 'BIO130': [0, 'H2']},
{'MATH101': [1, 'H1'],
'MATH101H': [1, 'H1'],
'PHYS110': [3, 'L1'],
'CHEM120': [3, 'L1'],
'BIO130': [3, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'HIST140'], ['s2', 'HIST140'], ['s2', 'MATH101'], ['s1', 'CHEM120'], ['s1', 'MATH101'],
['s2', 'MATH101H'], ['s4', 'PHYS110']]],
[['s2', 'MATH101H', 'added']]),
('normal control 6',
[{'MATH101H': [3, 'G1'], 'CHEM120': [0, 'H1']},
{'MATH101H': [3, 'G1'], 'PHYS110': [1, 'L1'], 'BIO130': [3, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s4', 'CHEM120'], ['s4', 'HIST140'], ['s4', 'CHEM120'], ['s4', 'MATH101']]],
[['s4', 'CHEM120', 'removed']]),
('normal control 7',
[{'MATH101': [2, 'L1'], 'PHYS110': [1, 'L2'], 'CHEM120': [0, 'H1'], 'BIO130': [1, 'L1']},
{'MATH101': [2, 'L1'],
'MATH101H': [2, 'H2'],
'PHYS110': [1, 'L2'],
'CHEM120': [0, 'H1'],
'BIO130': [1, 'L1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s5', 'PHYS110'], ['s5', 'ECON150'], ['s1', 'MATH101H'], ['s1', 'ECON150'], ['s1', 'BIO130'],
['s5', 'MATH101H'], ['s1', 'MATH101']]],
[['s1', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']]),
('normal control 8',
[{'MATH101': [2, 'H1'],
'MATH101H': [1, 'H1'],
'PHYS110': [3, 'H2'],
'CHEM120': [2, 'L2'],
'BIO130': [2, 'G1']},
{'MATH101': [2, 'H1'], 'MATH101H': [1, 'H1'], 'CHEM120': [3, 'G1'], 'BIO130': [3, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'MATH101H'], ['s3', 'HIST140'], ['s2', 'PHYS110'], ['s4', 'BIO130'], ['s1', 'ECON150'],
['s5', 'CHEM120'], ['s4', 'HIST140'], ['s4', 'MATH101'], ['s2', 'HIST140'], ['s1', 'MATH101H'],
['s3', 'PHYS110']]],
[['s2', 'PHYS110', 'removed'], ['s3', 'PHYS110', 'removed'], ['s4', 'BIO130', 'moved'],
['s5', 'CHEM120', 'moved']])],
[('regression: venue not room 1',
[{'A': [0, 'H1']}, {'A': [0, 'G1']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A'], ['s1', 'A']]],
[]),
('regression variant: venue not room 2',
[{'PHYS110': [3, 'G1'], 'CHEM120': [2, 'H1'], 'BIO130': [1, 'G1']},
{'MATH101': [1, 'H1'], 'MATH101H': [0, 'L2'], 'PHYS110': [3, 'H1'], 'CHEM120': [2, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s4', 'ECON150'], ['s3', 'HIST140'], ['s4', 'BIO130'], ['s2', 'CHEM120'], ['s4', 'CHEM120'],
['s3', 'MATH101H'], ['s5', 'MATH101H'], ['s3', 'PHYS110'], ['s4', 'HIST140'], ['s3', 'ECON150'],
['s5', 'HIST140'], ['s2', 'MATH101'], ['s5', 'MATH101'], ['s1', 'BIO130'], ['s5', 'CHEM120'],
['s1', 'CHEM120']]],
[['s1', 'BIO130', 'removed'], ['s2', 'MATH101', 'added'], ['s3', 'MATH101H', 'added'],
['s4', 'BIO130', 'removed'], ['s5', 'MATH101', 'added'], ['s5', 'MATH101H', 'added']]),
('partial repair guard 3',
[{'MATH101': [3, 'L1'], 'MATH101H': [1, 'L1'], 'CHEM120': [0, 'H2'], 'BIO130': [2, 'H2']},
{'MATH101H': [1, 'L1'], 'CHEM120': [0, 'H2'], 'BIO130': [2, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'BIO130'], ['s4', 'ECON150'], ['s1', 'BIO130'], ['s1', 'MATH101'], ['s2', 'CHEM120']]],
[['s1', 'MATH101', 'removed']]),
('boundary control 4',
[{'A': [0, 'H1']}, {'A': [1, 'L1']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A']]],
[['s1', 'A', 'moved']]),
('normal control 5',
[{'MATH101': [2, 'L2'],
'MATH101H': [2, 'L1'],
'PHYS110': [3, 'L1'],
'CHEM120': [0, 'G1'],
'BIO130': [2, 'H1']},
{'MATH101': [2, 'L2'], 'MATH101H': [0, 'H1'], 'PHYS110': [3, 'L1'], 'CHEM120': [0, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'MATH101'], ['s3', 'PHYS110'], ['s2', 'PHYS110'], ['s3', 'ECON150'], ['s3', 'MATH101H'],
['s2', 'MATH101H'], ['s2', 'MATH101H'], ['s5', 'PHYS110'], ['s2', 'BIO130']]],
[['s2', 'BIO130', 'removed'], ['s2', 'MATH101H', 'moved'], ['s3', 'MATH101H', 'moved']]),
('normal control 6',
[{'MATH101': [2, 'G1'], 'MATH101H': [0, 'H1'], 'PHYS110': [3, 'H2'], 'CHEM120': [1, 'H2']},
{'MATH101': [2, 'G1'],
'MATH101H': [0, 'H1'],
'PHYS110': [3, 'H2'],
'CHEM120': [1, 'H2'],
'BIO130': [0, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'BIO130'], ['s5', 'BIO130'], ['s5', 'MATH101H'], ['s4', 'HIST140'], ['s3', 'MATH101'],
['s4', 'ECON150'], ['s3', 'PHYS110'], ['s2', 'MATH101'], ['s5', 'CHEM120'], ['s2', 'MATH101']]],
[['s3', 'BIO130', 'added'], ['s5', 'BIO130', 'added']]),
('normal control 7',
[{'MATH101': [3, 'L1'],
'MATH101H': [3, 'G1'],
'PHYS110': [1, 'L2'],
'CHEM120': [3, 'H1'],
'BIO130': [3, 'G1']},
{'MATH101': [3, 'L1'],
'MATH101H': [2, 'H2'],
'PHYS110': [1, 'L2'],
'CHEM120': [3, 'H1'],
'BIO130': [3, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'CHEM120'], ['s3', 'BIO130'], ['s1', 'MATH101H'], ['s5', 'HIST140'], ['s5', 'BIO130'],
['s5', 'MATH101H'], ['s5', 'CHEM120'], ['s3', 'BIO130'], ['s1', 'PHYS110']]],
[['s1', 'MATH101H', 'moved'], ['s5', 'MATH101H', 'moved']]),
('normal control 8',
[{'MATH101': [3, 'L2'],
'MATH101H': [0, 'H1'],
'PHYS110': [2, 'G1'],
'CHEM120': [1, 'H2'],
'BIO130': [1, 'G1']},
{'MATH101': [0, 'L1'],
'MATH101H': [0, 'H1'],
'PHYS110': [2, 'G1'],
'CHEM120': [1, 'H2'],
'BIO130': [3, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'MATH101H'], ['s3', 'BIO130'], ['s3', 'ECON150'], ['s3', 'MATH101'], ['s1', 'CHEM120'],
['s3', 'MATH101H'], ['s1', 'HIST140']]],
[['s3', 'BIO130', 'moved'], ['s3', 'MATH101', 'moved']])],
[('regression: venue not room 1',
[{'MATH101': [0, 'L2'], 'MATH101H': [1, 'G1'], 'PHYS110': [1, 'L1'], 'BIO130': [2, 'H2']},
{'MATH101': [2, 'L1'], 'MATH101H': [0, 'H1'], 'PHYS110': [1, 'L1'], 'BIO130': [2, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'ECON150'], ['s2', 'BIO130'], ['s2', 'PHYS110']]],
[]),
('regression variant: venue not room 2',
[{'MATH101': [0, 'L2'],
'MATH101H': [3, 'H2'],
'PHYS110': [0, 'H1'],
'CHEM120': [2, 'H1'],
'BIO130': [0, 'H1']},
{'MATH101': [0, 'L2'], 'PHYS110': [0, 'G1'], 'CHEM120': [1, 'H1'], 'BIO130': [0, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'PHYS110'], ['s3', 'ECON150'], ['s3', 'MATH101'], ['s3', 'CHEM120'], ['s3', 'ECON150']]],
[['s3', 'CHEM120', 'moved']]),
('partial repair guard 3',
[{'MATH101': [0, 'H1'],
'MATH101H': [0, 'H2'],
'PHYS110': [0, 'G1'],
'CHEM120': [2, 'L2'],
'BIO130': [0, 'L2']},
{'MATH101': [0, 'G1'], 'MATH101H': [0, 'H2'], 'PHYS110': [0, 'G1'], 'CHEM120': [0, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s5', 'PHYS110'], ['s3', 'BIO130'], ['s1', 'PHYS110'], ['s4', 'HIST140'], ['s2', 'MATH101'],
['s4', 'MATH101H'], ['s1', 'PHYS110'], ['s4', 'MATH101'], ['s4', 'PHYS110'], ['s3', 'CHEM120'],
['s5', 'BIO130'], ['s1', 'ECON150']]],
[['s3', 'BIO130', 'removed'], ['s3', 'CHEM120', 'moved'], ['s5', 'BIO130', 'removed']]),
('boundary control 4',
[{'A': [0, 'H1'], 'B': [1, 'L1']}, {'A': [2, 'H1'], 'B': [1, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'A'], ['s1', 'B'], ['s1', 'A']]],
[['s1', 'A', 'moved'], ['s1', 'B', 'venue'], ['s2', 'A', 'moved']]),
('normal control 5',
[{'MATH101': [1, 'L1'],
'MATH101H': [0, 'L1'],
'PHYS110': [0, 'L2'],
'CHEM120': [1, 'H2'],
'BIO130': [1, 'L1']},
{'MATH101': [1, 'L1'], 'PHYS110': [0, 'L2'], 'CHEM120': [1, 'H2'], 'BIO130': [1, 'L1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s5', 'BIO130']]],
[]),
('normal control 6',
[{'MATH101': [0, 'H2'], 'MATH101H': [1, 'H1'], 'PHYS110': [2, 'L2'], 'BIO130': [3, 'H1']},
{'MATH101': [0, 'L1'],
'MATH101H': [1, 'H1'],
'PHYS110': [3, 'G1'],
'CHEM120': [2, 'L2'],
'BIO130': [3, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'MATH101H'], ['s4', 'ECON150'], ['s1', 'PHYS110'], ['s4', 'CHEM120'], ['s4', 'BIO130'],
['s4', 'CHEM120'], ['s1', 'CHEM120'], ['s5', 'MATH101'], ['s4', 'HIST140']]],
[['s1', 'CHEM120', 'added'], ['s1', 'PHYS110', 'moved'], ['s4', 'BIO130', 'venue'],
['s4', 'CHEM120', 'added'], ['s5', 'MATH101', 'venue']]),
('normal control 7',
[{'MATH101': [3, 'G1'], 'PHYS110': [1, 'L1'], 'CHEM120': [2, 'H1'], 'BIO130': [1, 'H2']},
{'MATH101': [3, 'G1'],
'MATH101H': [2, 'L1'],
'PHYS110': [1, 'H2'],
'CHEM120': [2, 'H1'],
'BIO130': [1, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'MATH101H'], ['s5', 'ECON150'], ['s3', 'MATH101'], ['s1', 'BIO130'], ['s1', 'CHEM120'],
['s4', 'ECON150'], ['s5', 'MATH101H'], ['s1', 'ECON150'], ['s1', 'MATH101'], ['s3', 'ECON150'],
['s4', 'HIST140'], ['s4', 'BIO130'], ['s2', 'MATH101'], ['s2', 'CHEM120'], ['s3', 'CHEM120']]],
[['s2', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']]),
('normal control 8',
[{'MATH101': [0, 'L2'], 'MATH101H': [3, 'L1'], 'CHEM120': [1, 'H2'], 'BIO130': [1, 'L1']},
{'MATH101': [0, 'L2'], 'PHYS110': [1, 'L2'], 'CHEM120': [1, 'H2'], 'BIO130': [1, 'L1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s1', 'ECON150']]],
[])],
[('regression: venue not room 1',
[{'MATH101': [0, 'H2'], 'MATH101H': [2, 'H2'], 'PHYS110': [3, 'H2'], 'CHEM120': [3, 'H1']},
{'MATH101': [2, 'G1'],
'MATH101H': [2, 'H2'],
'PHYS110': [3, 'H2'],
'CHEM120': [3, 'H2'],
'BIO130': [1, 'L1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'CHEM120'], ['s5', 'ECON150'], ['s2', 'MATH101H'], ['s4', 'MATH101H'], ['s1', 'CHEM120'],
['s2', 'CHEM120'], ['s4', 'BIO130'], ['s1', 'PHYS110'], ['s2', 'PHYS110'], ['s3', 'HIST140'],
['s2', 'MATH101'], ['s3', 'PHYS110']]],
[['s2', 'MATH101', 'moved'], ['s4', 'BIO130', 'added']]),
('regression variant: venue not room 2',
[{'MATH101': [3, 'L2'], 'PHYS110': [2, 'G1'], 'CHEM120': [1, 'L1'], 'BIO130': [1, 'G1']},
{'MATH101': [3, 'L1'],
'MATH101H': [3, 'L1'],
'PHYS110': [2, 'G1'],
'CHEM120': [2, 'G1'],
'BIO130': [1, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s5', 'HIST140'], ['s5', 'PHYS110'], ['s5', 'BIO130'], ['s2', 'MATH101'], ['s2', 'ECON150'],
['s1', 'ECON150'], ['s5', 'MATH101H'], ['s2', 'MATH101H'], ['s2', 'BIO130']]],
[['s2', 'BIO130', 'venue'], ['s2', 'MATH101H', 'added'], ['s5', 'BIO130', 'venue'],
['s5', 'MATH101H', 'added']]),
('partial repair guard 3',
[{'MATH101': [1, 'G1'],
'MATH101H': [1, 'G1'],
'PHYS110': [3, 'H2'],
'CHEM120': [0, 'L2'],
'BIO130': [3, 'L2']},
{'MATH101': [1, 'H1'], 'PHYS110': [2, 'H2'], 'CHEM120': [0, 'L2'], 'BIO130': [3, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'HIST140'], ['s2', 'HIST140'], ['s2', 'ECON150'], ['s3', 'MATH101'], ['s2', 'BIO130']]],
[]),
('boundary control 4',
[{'A': [0, 'H1']}, {}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A']]],
[['s1', 'A', 'removed']]),
('normal control 5',
[{'MATH101H': [1, 'H1'], 'PHYS110': [2, 'L1'], 'CHEM120': [2, 'H1'], 'BIO130': [1, 'L2']},
{'MATH101': [2, 'H1'],
'MATH101H': [1, 'H1'],
'PHYS110': [2, 'L1'],
'CHEM120': [0, 'G1'],
'BIO130': [1, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s5', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'ECON150'], ['s5', 'PHYS110']]],
[]),
('normal control 6',
[{'MATH101': [3, 'G1'],
'MATH101H': [0, 'H1'],
'PHYS110': [0, 'L1'],
'CHEM120': [1, 'H1'],
'BIO130': [3, 'G1']},
{'MATH101': [2, 'G1'],
'MATH101H': [1, 'L1'],
'PHYS110': [0, 'L1'],
'CHEM120': [3, 'L1'],
'BIO130': [3, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s4', 'ECON150'], ['s5', 'PHYS110'], ['s4', 'MATH101H'], ['s1', 'ECON150'], ['s1', 'MATH101H'],
['s5', 'ECON150'], ['s3', 'ECON150'], ['s5', 'MATH101H'], ['s5', 'CHEM120'], ['s1', 'BIO130'],
['s2', 'MATH101'], ['s2', 'MATH101H'], ['s1', 'PHYS110'], ['s4', 'PHYS110'], ['s3', 'MATH101H'],
['s2', 'CHEM120'], ['s2', 'PHYS110']]],
[['s1', 'MATH101H', 'moved'], ['s2', 'CHEM120', 'moved'], ['s2', 'MATH101', 'moved'],
['s2', 'MATH101H', 'moved'], ['s3', 'MATH101H', 'moved'], ['s4', 'MATH101H', 'moved'],
['s5', 'CHEM120', 'moved'], ['s5', 'MATH101H', 'moved']]),
('normal control 7',
[{'MATH101': [3, 'L2'],
'MATH101H': [0, 'G1'],
'PHYS110': [2, 'L1'],
'CHEM120': [2, 'H1'],
'BIO130': [2, 'H1']},
{'MATH101': [3, 'L2'],
'MATH101H': [1, 'G1'],
'PHYS110': [3, 'L1'],
'CHEM120': [1, 'L1'],
'BIO130': [2, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s4', 'MATH101H'], ['s5', 'MATH101'], ['s2', 'CHEM120'], ['s2', 'MATH101'], ['s5', 'CHEM120'],
['s2', 'MATH101H'], ['s1', 'HIST140'], ['s5', 'MATH101'], ['s1', 'BIO130'], ['s4', 'BIO130']]],
[['s2', 'CHEM120', 'moved'], ['s2', 'MATH101H', 'moved'], ['s4', 'MATH101H', 'moved'],
['s5', 'CHEM120', 'moved']]),
('normal control 8',
[{'MATH101': [0, 'L2'],
'MATH101H': [3, 'L2'],
'PHYS110': [3, 'G1'],
'CHEM120': [2, 'H1'],
'BIO130': [1, 'H2']},
{'MATH101H': [0, 'L1'], 'PHYS110': [3, 'G1'], 'CHEM120': [3, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'CHEM120'], ['s5', 'PHYS110'], ['s2', 'MATH101'], ['s4', 'BIO130'], ['s3', 'ECON150'],
['s2', 'BIO130'], ['s5', 'CHEM120'], ['s4', 'ECON150'], ['s4', 'MATH101'], ['s1', 'BIO130'],
['s1', 'MATH101'], ['s5', 'MATH101'], ['s2', 'MATH101H'], ['s3', 'MATH101H'], ['s1', 'CHEM120'],
['s5', 'MATH101H'], ['s3', 'CHEM120']]],
[['s1', 'BIO130', 'removed'], ['s1', 'CHEM120', 'moved'], ['s1', 'MATH101', 'removed'],
['s2', 'BIO130', 'removed'], ['s2', 'CHEM120', 'moved'], ['s2', 'MATH101', 'removed'],
['s2', 'MATH101H', 'moved'], ['s3', 'CHEM120', 'moved'], ['s3', 'MATH101H', 'moved'],
['s4', 'BIO130', 'removed'], ['s4', 'MATH101', 'removed'], ['s5', 'CHEM120', 'moved'],
['s5', 'MATH101', 'removed'], ['s5', 'MATH101H', 'moved']])],
[('regression: venue not room 1',
[{'MATH101': [1, 'G1'],
'MATH101H': [2, 'H2'],
'PHYS110': [3, 'H2'],
'CHEM120': [1, 'H2'],
'BIO130': [2, 'H1']},
{'MATH101': [1, 'G1'],
'MATH101H': [2, 'H2'],
'PHYS110': [3, 'H2'],
'CHEM120': [1, 'H2'],
'BIO130': [2, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'HIST140'], ['s5', 'MATH101H'], ['s2', 'PHYS110'], ['s3', 'HIST140'], ['s4', 'MATH101'],
['s3', 'HIST140'], ['s4', 'HIST140'], ['s2', 'MATH101'], ['s5', 'HIST140'], ['s2', 'CHEM120'],
['s4', 'ECON150'], ['s4', 'PHYS110'], ['s3', 'ECON150'], ['s5', 'BIO130'], ['s3', 'MATH101H'],
['s3', 'CHEM120'], ['s1', 'MATH101H']]],
[]),
('regression variant: venue not room 2',
[{'MATH101': [3, 'L1'],
'MATH101H': [1, 'G1'],
'PHYS110': [2, 'G1'],
'CHEM120': [3, 'H2'],
'BIO130': [0, 'L1']},
{'MATH101': [2, 'G1'], 'MATH101H': [3, 'L2'], 'PHYS110': [2, 'G1'], 'CHEM120': [3, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'PHYS110'], ['s2', 'CHEM120'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s2', 'MATH101']]],
[['s2', 'MATH101', 'moved']]),
('partial repair guard 3',
[{'MATH101': [3, 'L2'], 'MATH101H': [1, 'L2'], 'PHYS110': [3, 'H1'], 'CHEM120': [2, 'L2']},
{'MATH101': [3, 'L2'], 'MATH101H': [1, 'L2'], 'PHYS110': [3, 'G1'], 'CHEM120': [0, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s1', 'PHYS110']]],
[]),
('boundary control 4',
[{'A': [0, 'H1']}, {'A': [0, 'H2']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A']]],
[]),
('normal control 5',
[{'MATH101': [0, 'H1'],
'MATH101H': [1, 'L1'],
'PHYS110': [0, 'H2'],
'CHEM120': [3, 'L1'],
'BIO130': [2, 'L1']},
{'MATH101': [0, 'H1'],
'MATH101H': [3, 'H1'],
'PHYS110': [0, 'H2'],
'CHEM120': [3, 'L1'],
'BIO130': [2, 'L1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s4', 'MATH101'], ['s4', 'PHYS110'], ['s5', 'MATH101H'], ['s4', 'MATH101H'], ['s4', 'PHYS110']]],
[['s4', 'MATH101H', 'moved'], ['s5', 'MATH101H', 'moved']]),
('normal control 6',
[{'MATH101': [2, 'L2'],
'MATH101H': [1, 'H1'],
'PHYS110': [3, 'H2'],
'CHEM120': [2, 'H2'],
'BIO130': [0, 'H1']},
{'MATH101': [1, 'G1'], 'PHYS110': [3, 'L2'], 'CHEM120': [2, 'H2'], 'BIO130': [3, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s2', 'HIST140']]],
[]),
('normal control 7',
[{'MATH101H': [1, 'L1'], 'PHYS110': [1, 'H1'], 'CHEM120': [1, 'H2']},
{'MATH101': [3, 'L1'],
'MATH101H': [1, 'L1'],
'PHYS110': [2, 'L2'],
'CHEM120': [1, 'H1'],
'BIO130': [0, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'MATH101H'], ['s3', 'CHEM120'], ['s1', 'CHEM120'], ['s4', 'PHYS110'], ['s2', 'CHEM120'],
['s4', 'CHEM120'], ['s1', 'ECON150'], ['s1', 'MATH101'], ['s4', 'MATH101H'], ['s4', 'HIST140'],
['s2', 'HIST140'], ['s3', 'ECON150'], ['s2', 'MATH101']]],
[['s1', 'MATH101', 'added'], ['s2', 'MATH101', 'added'], ['s4', 'PHYS110', 'moved']]),
('normal control 8',
[{'MATH101': [3, 'L1'], 'MATH101H': [2, 'L2'], 'PHYS110': [3, 'H2'], 'CHEM120': [1, 'H1']},
{'MATH101H': [3, 'L1'], 'PHYS110': [0, 'H1'], 'CHEM120': [1, 'H1'], 'BIO130': [0, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'PHYS110'], ['s3', 'CHEM120'], ['s1', 'MATH101H'], ['s3', 'ECON150'], ['s3', 'BIO130'],
['s3', 'PHYS110'], ['s5', 'ECON150'], ['s1', 'MATH101']]],
[['s1', 'MATH101', 'removed'], ['s1', 'MATH101H', 'moved'], ['s1', 'PHYS110', 'moved'],
['s3', 'BIO130', 'added'], ['s3', 'PHYS110', 'moved']])]]
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: venue not room 1 | [['s1', 'A', 'venue']] | [] | Failed |
| regression variant: venue not room 2 | [['s1', 'BIO130', 'moved'], ['s3', 'MATH101H', 'added'], ['s4', 'PHYS110', 'venue'], ['s5', 'MATH101H', 'added'], ['s5', 'PHYS110', 'venue']] | [['s1', 'BIO130', 'moved'], ['s3', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']] | Failed |
| partial repair guard 3 | [['s1', 'CHEM120', 'added'], ['s2', 'CHEM120', 'added'], ['s4', 'MATH101H', 'venue']] | [['s1', 'CHEM120', 'added'], ['s2', 'CHEM120', 'added']] | Failed |
| boundary control 4 | [['s1', 'A', 'venue']] | [] | Failed |
| normal control 5 | [['s2', 'MATH101H', 'added']] | [['s2', 'MATH101H', 'added']] | Passed |
| normal control 6 | [['s4', 'CHEM120', 'removed']] | [['s4', 'CHEM120', 'removed']] | Passed |
| normal control 7 | [['s1', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']] | [['s1', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']] | Passed |
| normal control 8 | [['s2', 'PHYS110', 'removed'], ['s3', 'PHYS110', 'removed'], ['s4', 'BIO130', 'moved'], ['s5', 'CHEM120', 'moved']] | [['s2', 'PHYS110', 'removed'], ['s3', 'PHYS110', 'removed'], ['s4', 'BIO130', 'moved'], ['s5', 'CHEM120', 'moved']] | Passed |
SHA-256 / e4dda71ecbf3290109669eafdd87b71eb19d03f9f21b79792f6675a0a4084275
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(old, new, rooms, enrol):
reasons = {}
for ex in set(old) | set(new):
if ex not in old:
reasons[ex] = 'added'
elif ex not in new:
reasons[ex] = 'removed'
elif old[ex][0] != new[ex][0]:
reasons[ex] = 'moved'
elif old[ex][1][0] != new[ex][1][0]:
reasons[ex] = 'venue'
out = sorted(set((st, ex, reasons[ex]) for st, ex in enrol if ex in reasons))
return [list(t) for t in out]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: venue not room 1',
[{'A': [0, 'H1']}, {'A': [0, 'H2']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A']]],
[]),
('regression variant: venue not room 2',
[{'MATH101': [3, 'L1'], 'PHYS110': [1, 'L1'], 'CHEM120': [0, 'H1'], 'BIO130': [1, 'H2']},
{'MATH101': [3, 'L1'],
'MATH101H': [1, 'H2'],
'PHYS110': [1, 'L2'],
'CHEM120': [0, 'H1'],
'BIO130': [2, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'BIO130'], ['s1', 'ECON150'], ['s4', 'HIST140'], ['s5', 'MATH101'], ['s5', 'HIST140'],
['s5', 'PHYS110'], ['s1', 'ECON150'], ['s3', 'MATH101H'], ['s4', 'PHYS110'], ['s3', 'CHEM120'],
['s5', 'MATH101H']]],
[['s1', 'BIO130', 'moved'], ['s3', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']]),
('partial repair guard 3',
[{'MATH101': [3, 'H2'], 'MATH101H': [2, 'H2'], 'PHYS110': [3, 'H2'], 'BIO130': [1, 'H2']},
{'MATH101': [3, 'H2'],
'MATH101H': [2, 'G1'],
'PHYS110': [0, 'L1'],
'CHEM120': [0, 'L2'],
'BIO130': [1, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'HIST140'], ['s2', 'CHEM120'], ['s4', 'MATH101H'], ['s1', 'CHEM120'], ['s4', 'ECON150'],
['s1', 'MATH101'], ['s4', 'BIO130'], ['s4', 'HIST140'], ['s1', 'ECON150'], ['s3', 'MATH101'],
['s1', 'HIST140']]],
[['s1', 'CHEM120', 'added'], ['s2', 'CHEM120', 'added']]),
('boundary control 4',
[{'A': [0, 'H1']}, {'A': [0, 'G1']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A'], ['s1', 'A']]],
[]),
('normal control 5',
[{'MATH101': [1, 'H1'], 'PHYS110': [3, 'L1'], 'CHEM120': [3, 'L1'], 'BIO130': [0, 'H2']},
{'MATH101': [1, 'H1'],
'MATH101H': [1, 'H1'],
'PHYS110': [3, 'L1'],
'CHEM120': [3, 'L1'],
'BIO130': [3, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'HIST140'], ['s2', 'HIST140'], ['s2', 'MATH101'], ['s1', 'CHEM120'], ['s1', 'MATH101'],
['s2', 'MATH101H'], ['s4', 'PHYS110']]],
[['s2', 'MATH101H', 'added']]),
('normal control 6',
[{'MATH101H': [3, 'G1'], 'CHEM120': [0, 'H1']},
{'MATH101H': [3, 'G1'], 'PHYS110': [1, 'L1'], 'BIO130': [3, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s4', 'CHEM120'], ['s4', 'HIST140'], ['s4', 'CHEM120'], ['s4', 'MATH101']]],
[['s4', 'CHEM120', 'removed']]),
('normal control 7',
[{'MATH101': [2, 'L1'], 'PHYS110': [1, 'L2'], 'CHEM120': [0, 'H1'], 'BIO130': [1, 'L1']},
{'MATH101': [2, 'L1'],
'MATH101H': [2, 'H2'],
'PHYS110': [1, 'L2'],
'CHEM120': [0, 'H1'],
'BIO130': [1, 'L1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s5', 'PHYS110'], ['s5', 'ECON150'], ['s1', 'MATH101H'], ['s1', 'ECON150'], ['s1', 'BIO130'],
['s5', 'MATH101H'], ['s1', 'MATH101']]],
[['s1', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']]),
('normal control 8',
[{'MATH101': [2, 'H1'],
'MATH101H': [1, 'H1'],
'PHYS110': [3, 'H2'],
'CHEM120': [2, 'L2'],
'BIO130': [2, 'G1']},
{'MATH101': [2, 'H1'], 'MATH101H': [1, 'H1'], 'CHEM120': [3, 'G1'], 'BIO130': [3, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'MATH101H'], ['s3', 'HIST140'], ['s2', 'PHYS110'], ['s4', 'BIO130'], ['s1', 'ECON150'],
['s5', 'CHEM120'], ['s4', 'HIST140'], ['s4', 'MATH101'], ['s2', 'HIST140'], ['s1', 'MATH101H'],
['s3', 'PHYS110']]],
[['s2', 'PHYS110', 'removed'], ['s3', 'PHYS110', 'removed'], ['s4', 'BIO130', 'moved'],
['s5', 'CHEM120', 'moved']])],
[('regression: venue not room 1',
[{'A': [0, 'H1']}, {'A': [0, 'G1']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A'], ['s1', 'A']]],
[]),
('regression variant: venue not room 2',
[{'PHYS110': [3, 'G1'], 'CHEM120': [2, 'H1'], 'BIO130': [1, 'G1']},
{'MATH101': [1, 'H1'], 'MATH101H': [0, 'L2'], 'PHYS110': [3, 'H1'], 'CHEM120': [2, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s4', 'ECON150'], ['s3', 'HIST140'], ['s4', 'BIO130'], ['s2', 'CHEM120'], ['s4', 'CHEM120'],
['s3', 'MATH101H'], ['s5', 'MATH101H'], ['s3', 'PHYS110'], ['s4', 'HIST140'], ['s3', 'ECON150'],
['s5', 'HIST140'], ['s2', 'MATH101'], ['s5', 'MATH101'], ['s1', 'BIO130'], ['s5', 'CHEM120'],
['s1', 'CHEM120']]],
[['s1', 'BIO130', 'removed'], ['s2', 'MATH101', 'added'], ['s3', 'MATH101H', 'added'],
['s4', 'BIO130', 'removed'], ['s5', 'MATH101', 'added'], ['s5', 'MATH101H', 'added']]),
('partial repair guard 3',
[{'MATH101': [3, 'L1'], 'MATH101H': [1, 'L1'], 'CHEM120': [0, 'H2'], 'BIO130': [2, 'H2']},
{'MATH101H': [1, 'L1'], 'CHEM120': [0, 'H2'], 'BIO130': [2, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'BIO130'], ['s4', 'ECON150'], ['s1', 'BIO130'], ['s1', 'MATH101'], ['s2', 'CHEM120']]],
[['s1', 'MATH101', 'removed']]),
('boundary control 4',
[{'A': [0, 'H1']}, {'A': [1, 'L1']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A']]],
[['s1', 'A', 'moved']]),
('normal control 5',
[{'MATH101': [2, 'L2'],
'MATH101H': [2, 'L1'],
'PHYS110': [3, 'L1'],
'CHEM120': [0, 'G1'],
'BIO130': [2, 'H1']},
{'MATH101': [2, 'L2'], 'MATH101H': [0, 'H1'], 'PHYS110': [3, 'L1'], 'CHEM120': [0, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'MATH101'], ['s3', 'PHYS110'], ['s2', 'PHYS110'], ['s3', 'ECON150'], ['s3', 'MATH101H'],
['s2', 'MATH101H'], ['s2', 'MATH101H'], ['s5', 'PHYS110'], ['s2', 'BIO130']]],
[['s2', 'BIO130', 'removed'], ['s2', 'MATH101H', 'moved'], ['s3', 'MATH101H', 'moved']]),
('normal control 6',
[{'MATH101': [2, 'G1'], 'MATH101H': [0, 'H1'], 'PHYS110': [3, 'H2'], 'CHEM120': [1, 'H2']},
{'MATH101': [2, 'G1'],
'MATH101H': [0, 'H1'],
'PHYS110': [3, 'H2'],
'CHEM120': [1, 'H2'],
'BIO130': [0, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'BIO130'], ['s5', 'BIO130'], ['s5', 'MATH101H'], ['s4', 'HIST140'], ['s3', 'MATH101'],
['s4', 'ECON150'], ['s3', 'PHYS110'], ['s2', 'MATH101'], ['s5', 'CHEM120'], ['s2', 'MATH101']]],
[['s3', 'BIO130', 'added'], ['s5', 'BIO130', 'added']]),
('normal control 7',
[{'MATH101': [3, 'L1'],
'MATH101H': [3, 'G1'],
'PHYS110': [1, 'L2'],
'CHEM120': [3, 'H1'],
'BIO130': [3, 'G1']},
{'MATH101': [3, 'L1'],
'MATH101H': [2, 'H2'],
'PHYS110': [1, 'L2'],
'CHEM120': [3, 'H1'],
'BIO130': [3, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'CHEM120'], ['s3', 'BIO130'], ['s1', 'MATH101H'], ['s5', 'HIST140'], ['s5', 'BIO130'],
['s5', 'MATH101H'], ['s5', 'CHEM120'], ['s3', 'BIO130'], ['s1', 'PHYS110']]],
[['s1', 'MATH101H', 'moved'], ['s5', 'MATH101H', 'moved']]),
('normal control 8',
[{'MATH101': [3, 'L2'],
'MATH101H': [0, 'H1'],
'PHYS110': [2, 'G1'],
'CHEM120': [1, 'H2'],
'BIO130': [1, 'G1']},
{'MATH101': [0, 'L1'],
'MATH101H': [0, 'H1'],
'PHYS110': [2, 'G1'],
'CHEM120': [1, 'H2'],
'BIO130': [3, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'MATH101H'], ['s3', 'BIO130'], ['s3', 'ECON150'], ['s3', 'MATH101'], ['s1', 'CHEM120'],
['s3', 'MATH101H'], ['s1', 'HIST140']]],
[['s3', 'BIO130', 'moved'], ['s3', 'MATH101', 'moved']])],
[('regression: venue not room 1',
[{'MATH101': [0, 'L2'], 'MATH101H': [1, 'G1'], 'PHYS110': [1, 'L1'], 'BIO130': [2, 'H2']},
{'MATH101': [2, 'L1'], 'MATH101H': [0, 'H1'], 'PHYS110': [1, 'L1'], 'BIO130': [2, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'ECON150'], ['s2', 'BIO130'], ['s2', 'PHYS110']]],
[]),
('regression variant: venue not room 2',
[{'MATH101': [0, 'L2'],
'MATH101H': [3, 'H2'],
'PHYS110': [0, 'H1'],
'CHEM120': [2, 'H1'],
'BIO130': [0, 'H1']},
{'MATH101': [0, 'L2'], 'PHYS110': [0, 'G1'], 'CHEM120': [1, 'H1'], 'BIO130': [0, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'PHYS110'], ['s3', 'ECON150'], ['s3', 'MATH101'], ['s3', 'CHEM120'], ['s3', 'ECON150']]],
[['s3', 'CHEM120', 'moved']]),
('partial repair guard 3',
[{'MATH101': [0, 'H1'],
'MATH101H': [0, 'H2'],
'PHYS110': [0, 'G1'],
'CHEM120': [2, 'L2'],
'BIO130': [0, 'L2']},
{'MATH101': [0, 'G1'], 'MATH101H': [0, 'H2'], 'PHYS110': [0, 'G1'], 'CHEM120': [0, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s5', 'PHYS110'], ['s3', 'BIO130'], ['s1', 'PHYS110'], ['s4', 'HIST140'], ['s2', 'MATH101'],
['s4', 'MATH101H'], ['s1', 'PHYS110'], ['s4', 'MATH101'], ['s4', 'PHYS110'], ['s3', 'CHEM120'],
['s5', 'BIO130'], ['s1', 'ECON150']]],
[['s3', 'BIO130', 'removed'], ['s3', 'CHEM120', 'moved'], ['s5', 'BIO130', 'removed']]),
('boundary control 4',
[{'A': [0, 'H1'], 'B': [1, 'L1']}, {'A': [2, 'H1'], 'B': [1, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'A'], ['s1', 'B'], ['s1', 'A']]],
[['s1', 'A', 'moved'], ['s1', 'B', 'venue'], ['s2', 'A', 'moved']]),
('normal control 5',
[{'MATH101': [1, 'L1'],
'MATH101H': [0, 'L1'],
'PHYS110': [0, 'L2'],
'CHEM120': [1, 'H2'],
'BIO130': [1, 'L1']},
{'MATH101': [1, 'L1'], 'PHYS110': [0, 'L2'], 'CHEM120': [1, 'H2'], 'BIO130': [1, 'L1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s5', 'BIO130']]],
[]),
('normal control 6',
[{'MATH101': [0, 'H2'], 'MATH101H': [1, 'H1'], 'PHYS110': [2, 'L2'], 'BIO130': [3, 'H1']},
{'MATH101': [0, 'L1'],
'MATH101H': [1, 'H1'],
'PHYS110': [3, 'G1'],
'CHEM120': [2, 'L2'],
'BIO130': [3, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'MATH101H'], ['s4', 'ECON150'], ['s1', 'PHYS110'], ['s4', 'CHEM120'], ['s4', 'BIO130'],
['s4', 'CHEM120'], ['s1', 'CHEM120'], ['s5', 'MATH101'], ['s4', 'HIST140']]],
[['s1', 'CHEM120', 'added'], ['s1', 'PHYS110', 'moved'], ['s4', 'BIO130', 'venue'],
['s4', 'CHEM120', 'added'], ['s5', 'MATH101', 'venue']]),
('normal control 7',
[{'MATH101': [3, 'G1'], 'PHYS110': [1, 'L1'], 'CHEM120': [2, 'H1'], 'BIO130': [1, 'H2']},
{'MATH101': [3, 'G1'],
'MATH101H': [2, 'L1'],
'PHYS110': [1, 'H2'],
'CHEM120': [2, 'H1'],
'BIO130': [1, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'MATH101H'], ['s5', 'ECON150'], ['s3', 'MATH101'], ['s1', 'BIO130'], ['s1', 'CHEM120'],
['s4', 'ECON150'], ['s5', 'MATH101H'], ['s1', 'ECON150'], ['s1', 'MATH101'], ['s3', 'ECON150'],
['s4', 'HIST140'], ['s4', 'BIO130'], ['s2', 'MATH101'], ['s2', 'CHEM120'], ['s3', 'CHEM120']]],
[['s2', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']]),
('normal control 8',
[{'MATH101': [0, 'L2'], 'MATH101H': [3, 'L1'], 'CHEM120': [1, 'H2'], 'BIO130': [1, 'L1']},
{'MATH101': [0, 'L2'], 'PHYS110': [1, 'L2'], 'CHEM120': [1, 'H2'], 'BIO130': [1, 'L1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s1', 'ECON150']]],
[])],
[('regression: venue not room 1',
[{'MATH101': [0, 'H2'], 'MATH101H': [2, 'H2'], 'PHYS110': [3, 'H2'], 'CHEM120': [3, 'H1']},
{'MATH101': [2, 'G1'],
'MATH101H': [2, 'H2'],
'PHYS110': [3, 'H2'],
'CHEM120': [3, 'H2'],
'BIO130': [1, 'L1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'CHEM120'], ['s5', 'ECON150'], ['s2', 'MATH101H'], ['s4', 'MATH101H'], ['s1', 'CHEM120'],
['s2', 'CHEM120'], ['s4', 'BIO130'], ['s1', 'PHYS110'], ['s2', 'PHYS110'], ['s3', 'HIST140'],
['s2', 'MATH101'], ['s3', 'PHYS110']]],
[['s2', 'MATH101', 'moved'], ['s4', 'BIO130', 'added']]),
('regression variant: venue not room 2',
[{'MATH101': [3, 'L2'], 'PHYS110': [2, 'G1'], 'CHEM120': [1, 'L1'], 'BIO130': [1, 'G1']},
{'MATH101': [3, 'L1'],
'MATH101H': [3, 'L1'],
'PHYS110': [2, 'G1'],
'CHEM120': [2, 'G1'],
'BIO130': [1, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s5', 'HIST140'], ['s5', 'PHYS110'], ['s5', 'BIO130'], ['s2', 'MATH101'], ['s2', 'ECON150'],
['s1', 'ECON150'], ['s5', 'MATH101H'], ['s2', 'MATH101H'], ['s2', 'BIO130']]],
[['s2', 'BIO130', 'venue'], ['s2', 'MATH101H', 'added'], ['s5', 'BIO130', 'venue'],
['s5', 'MATH101H', 'added']]),
('partial repair guard 3',
[{'MATH101': [1, 'G1'],
'MATH101H': [1, 'G1'],
'PHYS110': [3, 'H2'],
'CHEM120': [0, 'L2'],
'BIO130': [3, 'L2']},
{'MATH101': [1, 'H1'], 'PHYS110': [2, 'H2'], 'CHEM120': [0, 'L2'], 'BIO130': [3, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'HIST140'], ['s2', 'HIST140'], ['s2', 'ECON150'], ['s3', 'MATH101'], ['s2', 'BIO130']]],
[]),
('boundary control 4',
[{'A': [0, 'H1']}, {}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A']]],
[['s1', 'A', 'removed']]),
('normal control 5',
[{'MATH101H': [1, 'H1'], 'PHYS110': [2, 'L1'], 'CHEM120': [2, 'H1'], 'BIO130': [1, 'L2']},
{'MATH101': [2, 'H1'],
'MATH101H': [1, 'H1'],
'PHYS110': [2, 'L1'],
'CHEM120': [0, 'G1'],
'BIO130': [1, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s5', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'ECON150'], ['s5', 'PHYS110']]],
[]),
('normal control 6',
[{'MATH101': [3, 'G1'],
'MATH101H': [0, 'H1'],
'PHYS110': [0, 'L1'],
'CHEM120': [1, 'H1'],
'BIO130': [3, 'G1']},
{'MATH101': [2, 'G1'],
'MATH101H': [1, 'L1'],
'PHYS110': [0, 'L1'],
'CHEM120': [3, 'L1'],
'BIO130': [3, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s4', 'ECON150'], ['s5', 'PHYS110'], ['s4', 'MATH101H'], ['s1', 'ECON150'], ['s1', 'MATH101H'],
['s5', 'ECON150'], ['s3', 'ECON150'], ['s5', 'MATH101H'], ['s5', 'CHEM120'], ['s1', 'BIO130'],
['s2', 'MATH101'], ['s2', 'MATH101H'], ['s1', 'PHYS110'], ['s4', 'PHYS110'], ['s3', 'MATH101H'],
['s2', 'CHEM120'], ['s2', 'PHYS110']]],
[['s1', 'MATH101H', 'moved'], ['s2', 'CHEM120', 'moved'], ['s2', 'MATH101', 'moved'],
['s2', 'MATH101H', 'moved'], ['s3', 'MATH101H', 'moved'], ['s4', 'MATH101H', 'moved'],
['s5', 'CHEM120', 'moved'], ['s5', 'MATH101H', 'moved']]),
('normal control 7',
[{'MATH101': [3, 'L2'],
'MATH101H': [0, 'G1'],
'PHYS110': [2, 'L1'],
'CHEM120': [2, 'H1'],
'BIO130': [2, 'H1']},
{'MATH101': [3, 'L2'],
'MATH101H': [1, 'G1'],
'PHYS110': [3, 'L1'],
'CHEM120': [1, 'L1'],
'BIO130': [2, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s4', 'MATH101H'], ['s5', 'MATH101'], ['s2', 'CHEM120'], ['s2', 'MATH101'], ['s5', 'CHEM120'],
['s2', 'MATH101H'], ['s1', 'HIST140'], ['s5', 'MATH101'], ['s1', 'BIO130'], ['s4', 'BIO130']]],
[['s2', 'CHEM120', 'moved'], ['s2', 'MATH101H', 'moved'], ['s4', 'MATH101H', 'moved'],
['s5', 'CHEM120', 'moved']]),
('normal control 8',
[{'MATH101': [0, 'L2'],
'MATH101H': [3, 'L2'],
'PHYS110': [3, 'G1'],
'CHEM120': [2, 'H1'],
'BIO130': [1, 'H2']},
{'MATH101H': [0, 'L1'], 'PHYS110': [3, 'G1'], 'CHEM120': [3, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'CHEM120'], ['s5', 'PHYS110'], ['s2', 'MATH101'], ['s4', 'BIO130'], ['s3', 'ECON150'],
['s2', 'BIO130'], ['s5', 'CHEM120'], ['s4', 'ECON150'], ['s4', 'MATH101'], ['s1', 'BIO130'],
['s1', 'MATH101'], ['s5', 'MATH101'], ['s2', 'MATH101H'], ['s3', 'MATH101H'], ['s1', 'CHEM120'],
['s5', 'MATH101H'], ['s3', 'CHEM120']]],
[['s1', 'BIO130', 'removed'], ['s1', 'CHEM120', 'moved'], ['s1', 'MATH101', 'removed'],
['s2', 'BIO130', 'removed'], ['s2', 'CHEM120', 'moved'], ['s2', 'MATH101', 'removed'],
['s2', 'MATH101H', 'moved'], ['s3', 'CHEM120', 'moved'], ['s3', 'MATH101H', 'moved'],
['s4', 'BIO130', 'removed'], ['s4', 'MATH101', 'removed'], ['s5', 'CHEM120', 'moved'],
['s5', 'MATH101', 'removed'], ['s5', 'MATH101H', 'moved']])],
[('regression: venue not room 1',
[{'MATH101': [1, 'G1'],
'MATH101H': [2, 'H2'],
'PHYS110': [3, 'H2'],
'CHEM120': [1, 'H2'],
'BIO130': [2, 'H1']},
{'MATH101': [1, 'G1'],
'MATH101H': [2, 'H2'],
'PHYS110': [3, 'H2'],
'CHEM120': [1, 'H2'],
'BIO130': [2, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'HIST140'], ['s5', 'MATH101H'], ['s2', 'PHYS110'], ['s3', 'HIST140'], ['s4', 'MATH101'],
['s3', 'HIST140'], ['s4', 'HIST140'], ['s2', 'MATH101'], ['s5', 'HIST140'], ['s2', 'CHEM120'],
['s4', 'ECON150'], ['s4', 'PHYS110'], ['s3', 'ECON150'], ['s5', 'BIO130'], ['s3', 'MATH101H'],
['s3', 'CHEM120'], ['s1', 'MATH101H']]],
[]),
('regression variant: venue not room 2',
[{'MATH101': [3, 'L1'],
'MATH101H': [1, 'G1'],
'PHYS110': [2, 'G1'],
'CHEM120': [3, 'H2'],
'BIO130': [0, 'L1']},
{'MATH101': [2, 'G1'], 'MATH101H': [3, 'L2'], 'PHYS110': [2, 'G1'], 'CHEM120': [3, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'PHYS110'], ['s2', 'CHEM120'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s2', 'MATH101']]],
[['s2', 'MATH101', 'moved']]),
('partial repair guard 3',
[{'MATH101': [3, 'L2'], 'MATH101H': [1, 'L2'], 'PHYS110': [3, 'H1'], 'CHEM120': [2, 'L2']},
{'MATH101': [3, 'L2'], 'MATH101H': [1, 'L2'], 'PHYS110': [3, 'G1'], 'CHEM120': [0, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s1', 'PHYS110']]],
[]),
('boundary control 4',
[{'A': [0, 'H1']}, {'A': [0, 'H2']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A']]],
[]),
('normal control 5',
[{'MATH101': [0, 'H1'],
'MATH101H': [1, 'L1'],
'PHYS110': [0, 'H2'],
'CHEM120': [3, 'L1'],
'BIO130': [2, 'L1']},
{'MATH101': [0, 'H1'],
'MATH101H': [3, 'H1'],
'PHYS110': [0, 'H2'],
'CHEM120': [3, 'L1'],
'BIO130': [2, 'L1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s4', 'MATH101'], ['s4', 'PHYS110'], ['s5', 'MATH101H'], ['s4', 'MATH101H'], ['s4', 'PHYS110']]],
[['s4', 'MATH101H', 'moved'], ['s5', 'MATH101H', 'moved']]),
('normal control 6',
[{'MATH101': [2, 'L2'],
'MATH101H': [1, 'H1'],
'PHYS110': [3, 'H2'],
'CHEM120': [2, 'H2'],
'BIO130': [0, 'H1']},
{'MATH101': [1, 'G1'], 'PHYS110': [3, 'L2'], 'CHEM120': [2, 'H2'], 'BIO130': [3, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s2', 'HIST140']]],
[]),
('normal control 7',
[{'MATH101H': [1, 'L1'], 'PHYS110': [1, 'H1'], 'CHEM120': [1, 'H2']},
{'MATH101': [3, 'L1'],
'MATH101H': [1, 'L1'],
'PHYS110': [2, 'L2'],
'CHEM120': [1, 'H1'],
'BIO130': [0, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'MATH101H'], ['s3', 'CHEM120'], ['s1', 'CHEM120'], ['s4', 'PHYS110'], ['s2', 'CHEM120'],
['s4', 'CHEM120'], ['s1', 'ECON150'], ['s1', 'MATH101'], ['s4', 'MATH101H'], ['s4', 'HIST140'],
['s2', 'HIST140'], ['s3', 'ECON150'], ['s2', 'MATH101']]],
[['s1', 'MATH101', 'added'], ['s2', 'MATH101', 'added'], ['s4', 'PHYS110', 'moved']]),
('normal control 8',
[{'MATH101': [3, 'L1'], 'MATH101H': [2, 'L2'], 'PHYS110': [3, 'H2'], 'CHEM120': [1, 'H1']},
{'MATH101H': [3, 'L1'], 'PHYS110': [0, 'H1'], 'CHEM120': [1, 'H1'], 'BIO130': [0, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'PHYS110'], ['s3', 'CHEM120'], ['s1', 'MATH101H'], ['s3', 'ECON150'], ['s3', 'BIO130'],
['s3', 'PHYS110'], ['s5', 'ECON150'], ['s1', 'MATH101']]],
[['s1', 'MATH101', 'removed'], ['s1', 'MATH101H', 'moved'], ['s1', 'PHYS110', 'moved'],
['s3', 'BIO130', 'added'], ['s3', 'PHYS110', 'moved']])]]
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: venue not room 1 | [] | [] | Passed |
| regression variant: venue not room 2 | [['s1', 'BIO130', 'moved'], ['s3', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']] | [['s1', 'BIO130', 'moved'], ['s3', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']] | Passed |
| partial repair guard 3 | [['s1', 'CHEM120', 'added'], ['s2', 'CHEM120', 'added'], ['s4', 'MATH101H', 'venue']] | [['s1', 'CHEM120', 'added'], ['s2', 'CHEM120', 'added']] | Failed |
| boundary control 4 | [['s1', 'A', 'venue']] | [] | Failed |
| normal control 5 | [['s2', 'MATH101H', 'added']] | [['s2', 'MATH101H', 'added']] | Passed |
| normal control 6 | [['s4', 'CHEM120', 'removed']] | [['s4', 'CHEM120', 'removed']] | Passed |
| normal control 7 | [['s1', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']] | [['s1', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']] | Passed |
| normal control 8 | [['s2', 'PHYS110', 'removed'], ['s3', 'PHYS110', 'removed'], ['s4', 'BIO130', 'moved'], ['s5', 'CHEM120', 'moved']] | [['s2', 'PHYS110', 'removed'], ['s3', 'PHYS110', 'removed'], ['s4', 'BIO130', 'moved'], ['s5', 'CHEM120', 'moved']] | Passed |
SHA-256 / 6a6e0739fb1df80076d6eadf8928268da9981450d3fc26a2bcf0cc6f14cb1719
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(old, new, rooms, enrol):
reasons = {}
for ex in set(old) | set(new):
if ex not in old:
reasons[ex] = 'added'
elif ex not in new:
reasons[ex] = 'removed'
elif old[ex][0] != new[ex][0]:
reasons[ex] = 'moved'
elif rooms[old[ex][1]] != rooms[new[ex][1]]:
reasons[ex] = 'venue'
out = sorted(set((st, ex, reasons[ex]) for st, ex in enrol if ex in reasons))
return [list(t) for t in out]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: venue not room 1',
[{'A': [0, 'H1']}, {'A': [0, 'H2']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A']]],
[]),
('regression variant: venue not room 2',
[{'MATH101': [3, 'L1'], 'PHYS110': [1, 'L1'], 'CHEM120': [0, 'H1'], 'BIO130': [1, 'H2']},
{'MATH101': [3, 'L1'],
'MATH101H': [1, 'H2'],
'PHYS110': [1, 'L2'],
'CHEM120': [0, 'H1'],
'BIO130': [2, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'BIO130'], ['s1', 'ECON150'], ['s4', 'HIST140'], ['s5', 'MATH101'], ['s5', 'HIST140'],
['s5', 'PHYS110'], ['s1', 'ECON150'], ['s3', 'MATH101H'], ['s4', 'PHYS110'], ['s3', 'CHEM120'],
['s5', 'MATH101H']]],
[['s1', 'BIO130', 'moved'], ['s3', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']]),
('partial repair guard 3',
[{'MATH101': [3, 'H2'], 'MATH101H': [2, 'H2'], 'PHYS110': [3, 'H2'], 'BIO130': [1, 'H2']},
{'MATH101': [3, 'H2'],
'MATH101H': [2, 'G1'],
'PHYS110': [0, 'L1'],
'CHEM120': [0, 'L2'],
'BIO130': [1, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'HIST140'], ['s2', 'CHEM120'], ['s4', 'MATH101H'], ['s1', 'CHEM120'], ['s4', 'ECON150'],
['s1', 'MATH101'], ['s4', 'BIO130'], ['s4', 'HIST140'], ['s1', 'ECON150'], ['s3', 'MATH101'],
['s1', 'HIST140']]],
[['s1', 'CHEM120', 'added'], ['s2', 'CHEM120', 'added']]),
('boundary control 4',
[{'A': [0, 'H1']}, {'A': [0, 'G1']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A'], ['s1', 'A']]],
[]),
('normal control 5',
[{'MATH101': [1, 'H1'], 'PHYS110': [3, 'L1'], 'CHEM120': [3, 'L1'], 'BIO130': [0, 'H2']},
{'MATH101': [1, 'H1'],
'MATH101H': [1, 'H1'],
'PHYS110': [3, 'L1'],
'CHEM120': [3, 'L1'],
'BIO130': [3, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'HIST140'], ['s2', 'HIST140'], ['s2', 'MATH101'], ['s1', 'CHEM120'], ['s1', 'MATH101'],
['s2', 'MATH101H'], ['s4', 'PHYS110']]],
[['s2', 'MATH101H', 'added']]),
('normal control 6',
[{'MATH101H': [3, 'G1'], 'CHEM120': [0, 'H1']},
{'MATH101H': [3, 'G1'], 'PHYS110': [1, 'L1'], 'BIO130': [3, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s4', 'CHEM120'], ['s4', 'HIST140'], ['s4', 'CHEM120'], ['s4', 'MATH101']]],
[['s4', 'CHEM120', 'removed']]),
('normal control 7',
[{'MATH101': [2, 'L1'], 'PHYS110': [1, 'L2'], 'CHEM120': [0, 'H1'], 'BIO130': [1, 'L1']},
{'MATH101': [2, 'L1'],
'MATH101H': [2, 'H2'],
'PHYS110': [1, 'L2'],
'CHEM120': [0, 'H1'],
'BIO130': [1, 'L1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s5', 'PHYS110'], ['s5', 'ECON150'], ['s1', 'MATH101H'], ['s1', 'ECON150'], ['s1', 'BIO130'],
['s5', 'MATH101H'], ['s1', 'MATH101']]],
[['s1', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']]),
('normal control 8',
[{'MATH101': [2, 'H1'],
'MATH101H': [1, 'H1'],
'PHYS110': [3, 'H2'],
'CHEM120': [2, 'L2'],
'BIO130': [2, 'G1']},
{'MATH101': [2, 'H1'], 'MATH101H': [1, 'H1'], 'CHEM120': [3, 'G1'], 'BIO130': [3, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'MATH101H'], ['s3', 'HIST140'], ['s2', 'PHYS110'], ['s4', 'BIO130'], ['s1', 'ECON150'],
['s5', 'CHEM120'], ['s4', 'HIST140'], ['s4', 'MATH101'], ['s2', 'HIST140'], ['s1', 'MATH101H'],
['s3', 'PHYS110']]],
[['s2', 'PHYS110', 'removed'], ['s3', 'PHYS110', 'removed'], ['s4', 'BIO130', 'moved'],
['s5', 'CHEM120', 'moved']])],
[('regression: venue not room 1',
[{'A': [0, 'H1']}, {'A': [0, 'G1']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A'], ['s1', 'A']]],
[]),
('regression variant: venue not room 2',
[{'PHYS110': [3, 'G1'], 'CHEM120': [2, 'H1'], 'BIO130': [1, 'G1']},
{'MATH101': [1, 'H1'], 'MATH101H': [0, 'L2'], 'PHYS110': [3, 'H1'], 'CHEM120': [2, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s4', 'ECON150'], ['s3', 'HIST140'], ['s4', 'BIO130'], ['s2', 'CHEM120'], ['s4', 'CHEM120'],
['s3', 'MATH101H'], ['s5', 'MATH101H'], ['s3', 'PHYS110'], ['s4', 'HIST140'], ['s3', 'ECON150'],
['s5', 'HIST140'], ['s2', 'MATH101'], ['s5', 'MATH101'], ['s1', 'BIO130'], ['s5', 'CHEM120'],
['s1', 'CHEM120']]],
[['s1', 'BIO130', 'removed'], ['s2', 'MATH101', 'added'], ['s3', 'MATH101H', 'added'],
['s4', 'BIO130', 'removed'], ['s5', 'MATH101', 'added'], ['s5', 'MATH101H', 'added']]),
('partial repair guard 3',
[{'MATH101': [3, 'L1'], 'MATH101H': [1, 'L1'], 'CHEM120': [0, 'H2'], 'BIO130': [2, 'H2']},
{'MATH101H': [1, 'L1'], 'CHEM120': [0, 'H2'], 'BIO130': [2, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'BIO130'], ['s4', 'ECON150'], ['s1', 'BIO130'], ['s1', 'MATH101'], ['s2', 'CHEM120']]],
[['s1', 'MATH101', 'removed']]),
('boundary control 4',
[{'A': [0, 'H1']}, {'A': [1, 'L1']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A']]],
[['s1', 'A', 'moved']]),
('normal control 5',
[{'MATH101': [2, 'L2'],
'MATH101H': [2, 'L1'],
'PHYS110': [3, 'L1'],
'CHEM120': [0, 'G1'],
'BIO130': [2, 'H1']},
{'MATH101': [2, 'L2'], 'MATH101H': [0, 'H1'], 'PHYS110': [3, 'L1'], 'CHEM120': [0, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'MATH101'], ['s3', 'PHYS110'], ['s2', 'PHYS110'], ['s3', 'ECON150'], ['s3', 'MATH101H'],
['s2', 'MATH101H'], ['s2', 'MATH101H'], ['s5', 'PHYS110'], ['s2', 'BIO130']]],
[['s2', 'BIO130', 'removed'], ['s2', 'MATH101H', 'moved'], ['s3', 'MATH101H', 'moved']]),
('normal control 6',
[{'MATH101': [2, 'G1'], 'MATH101H': [0, 'H1'], 'PHYS110': [3, 'H2'], 'CHEM120': [1, 'H2']},
{'MATH101': [2, 'G1'],
'MATH101H': [0, 'H1'],
'PHYS110': [3, 'H2'],
'CHEM120': [1, 'H2'],
'BIO130': [0, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'BIO130'], ['s5', 'BIO130'], ['s5', 'MATH101H'], ['s4', 'HIST140'], ['s3', 'MATH101'],
['s4', 'ECON150'], ['s3', 'PHYS110'], ['s2', 'MATH101'], ['s5', 'CHEM120'], ['s2', 'MATH101']]],
[['s3', 'BIO130', 'added'], ['s5', 'BIO130', 'added']]),
('normal control 7',
[{'MATH101': [3, 'L1'],
'MATH101H': [3, 'G1'],
'PHYS110': [1, 'L2'],
'CHEM120': [3, 'H1'],
'BIO130': [3, 'G1']},
{'MATH101': [3, 'L1'],
'MATH101H': [2, 'H2'],
'PHYS110': [1, 'L2'],
'CHEM120': [3, 'H1'],
'BIO130': [3, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'CHEM120'], ['s3', 'BIO130'], ['s1', 'MATH101H'], ['s5', 'HIST140'], ['s5', 'BIO130'],
['s5', 'MATH101H'], ['s5', 'CHEM120'], ['s3', 'BIO130'], ['s1', 'PHYS110']]],
[['s1', 'MATH101H', 'moved'], ['s5', 'MATH101H', 'moved']]),
('normal control 8',
[{'MATH101': [3, 'L2'],
'MATH101H': [0, 'H1'],
'PHYS110': [2, 'G1'],
'CHEM120': [1, 'H2'],
'BIO130': [1, 'G1']},
{'MATH101': [0, 'L1'],
'MATH101H': [0, 'H1'],
'PHYS110': [2, 'G1'],
'CHEM120': [1, 'H2'],
'BIO130': [3, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'MATH101H'], ['s3', 'BIO130'], ['s3', 'ECON150'], ['s3', 'MATH101'], ['s1', 'CHEM120'],
['s3', 'MATH101H'], ['s1', 'HIST140']]],
[['s3', 'BIO130', 'moved'], ['s3', 'MATH101', 'moved']])],
[('regression: venue not room 1',
[{'MATH101': [0, 'L2'], 'MATH101H': [1, 'G1'], 'PHYS110': [1, 'L1'], 'BIO130': [2, 'H2']},
{'MATH101': [2, 'L1'], 'MATH101H': [0, 'H1'], 'PHYS110': [1, 'L1'], 'BIO130': [2, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'ECON150'], ['s2', 'BIO130'], ['s2', 'PHYS110']]],
[]),
('regression variant: venue not room 2',
[{'MATH101': [0, 'L2'],
'MATH101H': [3, 'H2'],
'PHYS110': [0, 'H1'],
'CHEM120': [2, 'H1'],
'BIO130': [0, 'H1']},
{'MATH101': [0, 'L2'], 'PHYS110': [0, 'G1'], 'CHEM120': [1, 'H1'], 'BIO130': [0, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'PHYS110'], ['s3', 'ECON150'], ['s3', 'MATH101'], ['s3', 'CHEM120'], ['s3', 'ECON150']]],
[['s3', 'CHEM120', 'moved']]),
('partial repair guard 3',
[{'MATH101': [0, 'H1'],
'MATH101H': [0, 'H2'],
'PHYS110': [0, 'G1'],
'CHEM120': [2, 'L2'],
'BIO130': [0, 'L2']},
{'MATH101': [0, 'G1'], 'MATH101H': [0, 'H2'], 'PHYS110': [0, 'G1'], 'CHEM120': [0, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s5', 'PHYS110'], ['s3', 'BIO130'], ['s1', 'PHYS110'], ['s4', 'HIST140'], ['s2', 'MATH101'],
['s4', 'MATH101H'], ['s1', 'PHYS110'], ['s4', 'MATH101'], ['s4', 'PHYS110'], ['s3', 'CHEM120'],
['s5', 'BIO130'], ['s1', 'ECON150']]],
[['s3', 'BIO130', 'removed'], ['s3', 'CHEM120', 'moved'], ['s5', 'BIO130', 'removed']]),
('boundary control 4',
[{'A': [0, 'H1'], 'B': [1, 'L1']}, {'A': [2, 'H1'], 'B': [1, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'A'], ['s1', 'B'], ['s1', 'A']]],
[['s1', 'A', 'moved'], ['s1', 'B', 'venue'], ['s2', 'A', 'moved']]),
('normal control 5',
[{'MATH101': [1, 'L1'],
'MATH101H': [0, 'L1'],
'PHYS110': [0, 'L2'],
'CHEM120': [1, 'H2'],
'BIO130': [1, 'L1']},
{'MATH101': [1, 'L1'], 'PHYS110': [0, 'L2'], 'CHEM120': [1, 'H2'], 'BIO130': [1, 'L1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s5', 'BIO130']]],
[]),
('normal control 6',
[{'MATH101': [0, 'H2'], 'MATH101H': [1, 'H1'], 'PHYS110': [2, 'L2'], 'BIO130': [3, 'H1']},
{'MATH101': [0, 'L1'],
'MATH101H': [1, 'H1'],
'PHYS110': [3, 'G1'],
'CHEM120': [2, 'L2'],
'BIO130': [3, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'MATH101H'], ['s4', 'ECON150'], ['s1', 'PHYS110'], ['s4', 'CHEM120'], ['s4', 'BIO130'],
['s4', 'CHEM120'], ['s1', 'CHEM120'], ['s5', 'MATH101'], ['s4', 'HIST140']]],
[['s1', 'CHEM120', 'added'], ['s1', 'PHYS110', 'moved'], ['s4', 'BIO130', 'venue'],
['s4', 'CHEM120', 'added'], ['s5', 'MATH101', 'venue']]),
('normal control 7',
[{'MATH101': [3, 'G1'], 'PHYS110': [1, 'L1'], 'CHEM120': [2, 'H1'], 'BIO130': [1, 'H2']},
{'MATH101': [3, 'G1'],
'MATH101H': [2, 'L1'],
'PHYS110': [1, 'H2'],
'CHEM120': [2, 'H1'],
'BIO130': [1, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'MATH101H'], ['s5', 'ECON150'], ['s3', 'MATH101'], ['s1', 'BIO130'], ['s1', 'CHEM120'],
['s4', 'ECON150'], ['s5', 'MATH101H'], ['s1', 'ECON150'], ['s1', 'MATH101'], ['s3', 'ECON150'],
['s4', 'HIST140'], ['s4', 'BIO130'], ['s2', 'MATH101'], ['s2', 'CHEM120'], ['s3', 'CHEM120']]],
[['s2', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']]),
('normal control 8',
[{'MATH101': [0, 'L2'], 'MATH101H': [3, 'L1'], 'CHEM120': [1, 'H2'], 'BIO130': [1, 'L1']},
{'MATH101': [0, 'L2'], 'PHYS110': [1, 'L2'], 'CHEM120': [1, 'H2'], 'BIO130': [1, 'L1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s1', 'ECON150']]],
[])],
[('regression: venue not room 1',
[{'MATH101': [0, 'H2'], 'MATH101H': [2, 'H2'], 'PHYS110': [3, 'H2'], 'CHEM120': [3, 'H1']},
{'MATH101': [2, 'G1'],
'MATH101H': [2, 'H2'],
'PHYS110': [3, 'H2'],
'CHEM120': [3, 'H2'],
'BIO130': [1, 'L1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'CHEM120'], ['s5', 'ECON150'], ['s2', 'MATH101H'], ['s4', 'MATH101H'], ['s1', 'CHEM120'],
['s2', 'CHEM120'], ['s4', 'BIO130'], ['s1', 'PHYS110'], ['s2', 'PHYS110'], ['s3', 'HIST140'],
['s2', 'MATH101'], ['s3', 'PHYS110']]],
[['s2', 'MATH101', 'moved'], ['s4', 'BIO130', 'added']]),
('regression variant: venue not room 2',
[{'MATH101': [3, 'L2'], 'PHYS110': [2, 'G1'], 'CHEM120': [1, 'L1'], 'BIO130': [1, 'G1']},
{'MATH101': [3, 'L1'],
'MATH101H': [3, 'L1'],
'PHYS110': [2, 'G1'],
'CHEM120': [2, 'G1'],
'BIO130': [1, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s5', 'HIST140'], ['s5', 'PHYS110'], ['s5', 'BIO130'], ['s2', 'MATH101'], ['s2', 'ECON150'],
['s1', 'ECON150'], ['s5', 'MATH101H'], ['s2', 'MATH101H'], ['s2', 'BIO130']]],
[['s2', 'BIO130', 'venue'], ['s2', 'MATH101H', 'added'], ['s5', 'BIO130', 'venue'],
['s5', 'MATH101H', 'added']]),
('partial repair guard 3',
[{'MATH101': [1, 'G1'],
'MATH101H': [1, 'G1'],
'PHYS110': [3, 'H2'],
'CHEM120': [0, 'L2'],
'BIO130': [3, 'L2']},
{'MATH101': [1, 'H1'], 'PHYS110': [2, 'H2'], 'CHEM120': [0, 'L2'], 'BIO130': [3, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'HIST140'], ['s2', 'HIST140'], ['s2', 'ECON150'], ['s3', 'MATH101'], ['s2', 'BIO130']]],
[]),
('boundary control 4',
[{'A': [0, 'H1']}, {}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A']]],
[['s1', 'A', 'removed']]),
('normal control 5',
[{'MATH101H': [1, 'H1'], 'PHYS110': [2, 'L1'], 'CHEM120': [2, 'H1'], 'BIO130': [1, 'L2']},
{'MATH101': [2, 'H1'],
'MATH101H': [1, 'H1'],
'PHYS110': [2, 'L1'],
'CHEM120': [0, 'G1'],
'BIO130': [1, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s5', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'ECON150'], ['s5', 'PHYS110']]],
[]),
('normal control 6',
[{'MATH101': [3, 'G1'],
'MATH101H': [0, 'H1'],
'PHYS110': [0, 'L1'],
'CHEM120': [1, 'H1'],
'BIO130': [3, 'G1']},
{'MATH101': [2, 'G1'],
'MATH101H': [1, 'L1'],
'PHYS110': [0, 'L1'],
'CHEM120': [3, 'L1'],
'BIO130': [3, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s4', 'ECON150'], ['s5', 'PHYS110'], ['s4', 'MATH101H'], ['s1', 'ECON150'], ['s1', 'MATH101H'],
['s5', 'ECON150'], ['s3', 'ECON150'], ['s5', 'MATH101H'], ['s5', 'CHEM120'], ['s1', 'BIO130'],
['s2', 'MATH101'], ['s2', 'MATH101H'], ['s1', 'PHYS110'], ['s4', 'PHYS110'], ['s3', 'MATH101H'],
['s2', 'CHEM120'], ['s2', 'PHYS110']]],
[['s1', 'MATH101H', 'moved'], ['s2', 'CHEM120', 'moved'], ['s2', 'MATH101', 'moved'],
['s2', 'MATH101H', 'moved'], ['s3', 'MATH101H', 'moved'], ['s4', 'MATH101H', 'moved'],
['s5', 'CHEM120', 'moved'], ['s5', 'MATH101H', 'moved']]),
('normal control 7',
[{'MATH101': [3, 'L2'],
'MATH101H': [0, 'G1'],
'PHYS110': [2, 'L1'],
'CHEM120': [2, 'H1'],
'BIO130': [2, 'H1']},
{'MATH101': [3, 'L2'],
'MATH101H': [1, 'G1'],
'PHYS110': [3, 'L1'],
'CHEM120': [1, 'L1'],
'BIO130': [2, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s4', 'MATH101H'], ['s5', 'MATH101'], ['s2', 'CHEM120'], ['s2', 'MATH101'], ['s5', 'CHEM120'],
['s2', 'MATH101H'], ['s1', 'HIST140'], ['s5', 'MATH101'], ['s1', 'BIO130'], ['s4', 'BIO130']]],
[['s2', 'CHEM120', 'moved'], ['s2', 'MATH101H', 'moved'], ['s4', 'MATH101H', 'moved'],
['s5', 'CHEM120', 'moved']]),
('normal control 8',
[{'MATH101': [0, 'L2'],
'MATH101H': [3, 'L2'],
'PHYS110': [3, 'G1'],
'CHEM120': [2, 'H1'],
'BIO130': [1, 'H2']},
{'MATH101H': [0, 'L1'], 'PHYS110': [3, 'G1'], 'CHEM120': [3, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'CHEM120'], ['s5', 'PHYS110'], ['s2', 'MATH101'], ['s4', 'BIO130'], ['s3', 'ECON150'],
['s2', 'BIO130'], ['s5', 'CHEM120'], ['s4', 'ECON150'], ['s4', 'MATH101'], ['s1', 'BIO130'],
['s1', 'MATH101'], ['s5', 'MATH101'], ['s2', 'MATH101H'], ['s3', 'MATH101H'], ['s1', 'CHEM120'],
['s5', 'MATH101H'], ['s3', 'CHEM120']]],
[['s1', 'BIO130', 'removed'], ['s1', 'CHEM120', 'moved'], ['s1', 'MATH101', 'removed'],
['s2', 'BIO130', 'removed'], ['s2', 'CHEM120', 'moved'], ['s2', 'MATH101', 'removed'],
['s2', 'MATH101H', 'moved'], ['s3', 'CHEM120', 'moved'], ['s3', 'MATH101H', 'moved'],
['s4', 'BIO130', 'removed'], ['s4', 'MATH101', 'removed'], ['s5', 'CHEM120', 'moved'],
['s5', 'MATH101', 'removed'], ['s5', 'MATH101H', 'moved']])],
[('regression: venue not room 1',
[{'MATH101': [1, 'G1'],
'MATH101H': [2, 'H2'],
'PHYS110': [3, 'H2'],
'CHEM120': [1, 'H2'],
'BIO130': [2, 'H1']},
{'MATH101': [1, 'G1'],
'MATH101H': [2, 'H2'],
'PHYS110': [3, 'H2'],
'CHEM120': [1, 'H2'],
'BIO130': [2, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s2', 'HIST140'], ['s5', 'MATH101H'], ['s2', 'PHYS110'], ['s3', 'HIST140'], ['s4', 'MATH101'],
['s3', 'HIST140'], ['s4', 'HIST140'], ['s2', 'MATH101'], ['s5', 'HIST140'], ['s2', 'CHEM120'],
['s4', 'ECON150'], ['s4', 'PHYS110'], ['s3', 'ECON150'], ['s5', 'BIO130'], ['s3', 'MATH101H'],
['s3', 'CHEM120'], ['s1', 'MATH101H']]],
[]),
('regression variant: venue not room 2',
[{'MATH101': [3, 'L1'],
'MATH101H': [1, 'G1'],
'PHYS110': [2, 'G1'],
'CHEM120': [3, 'H2'],
'BIO130': [0, 'L1']},
{'MATH101': [2, 'G1'], 'MATH101H': [3, 'L2'], 'PHYS110': [2, 'G1'], 'CHEM120': [3, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s3', 'PHYS110'], ['s2', 'CHEM120'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s2', 'MATH101']]],
[['s2', 'MATH101', 'moved']]),
('partial repair guard 3',
[{'MATH101': [3, 'L2'], 'MATH101H': [1, 'L2'], 'PHYS110': [3, 'H1'], 'CHEM120': [2, 'L2']},
{'MATH101': [3, 'L2'], 'MATH101H': [1, 'L2'], 'PHYS110': [3, 'G1'], 'CHEM120': [0, 'L2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s1', 'PHYS110']]],
[]),
('boundary control 4',
[{'A': [0, 'H1']}, {'A': [0, 'H2']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'A']]],
[]),
('normal control 5',
[{'MATH101': [0, 'H1'],
'MATH101H': [1, 'L1'],
'PHYS110': [0, 'H2'],
'CHEM120': [3, 'L1'],
'BIO130': [2, 'L1']},
{'MATH101': [0, 'H1'],
'MATH101H': [3, 'H1'],
'PHYS110': [0, 'H2'],
'CHEM120': [3, 'L1'],
'BIO130': [2, 'L1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s4', 'MATH101'], ['s4', 'PHYS110'], ['s5', 'MATH101H'], ['s4', 'MATH101H'], ['s4', 'PHYS110']]],
[['s4', 'MATH101H', 'moved'], ['s5', 'MATH101H', 'moved']]),
('normal control 6',
[{'MATH101': [2, 'L2'],
'MATH101H': [1, 'H1'],
'PHYS110': [3, 'H2'],
'CHEM120': [2, 'H2'],
'BIO130': [0, 'H1']},
{'MATH101': [1, 'G1'], 'PHYS110': [3, 'L2'], 'CHEM120': [2, 'H2'], 'BIO130': [3, 'G1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s2', 'HIST140']]],
[]),
('normal control 7',
[{'MATH101H': [1, 'L1'], 'PHYS110': [1, 'H1'], 'CHEM120': [1, 'H2']},
{'MATH101': [3, 'L1'],
'MATH101H': [1, 'L1'],
'PHYS110': [2, 'L2'],
'CHEM120': [1, 'H1'],
'BIO130': [0, 'H2']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'MATH101H'], ['s3', 'CHEM120'], ['s1', 'CHEM120'], ['s4', 'PHYS110'], ['s2', 'CHEM120'],
['s4', 'CHEM120'], ['s1', 'ECON150'], ['s1', 'MATH101'], ['s4', 'MATH101H'], ['s4', 'HIST140'],
['s2', 'HIST140'], ['s3', 'ECON150'], ['s2', 'MATH101']]],
[['s1', 'MATH101', 'added'], ['s2', 'MATH101', 'added'], ['s4', 'PHYS110', 'moved']]),
('normal control 8',
[{'MATH101': [3, 'L1'], 'MATH101H': [2, 'L2'], 'PHYS110': [3, 'H2'], 'CHEM120': [1, 'H1']},
{'MATH101H': [3, 'L1'], 'PHYS110': [0, 'H1'], 'CHEM120': [1, 'H1'], 'BIO130': [0, 'H1']},
{'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},
[['s1', 'PHYS110'], ['s3', 'CHEM120'], ['s1', 'MATH101H'], ['s3', 'ECON150'], ['s3', 'BIO130'],
['s3', 'PHYS110'], ['s5', 'ECON150'], ['s1', 'MATH101']]],
[['s1', 'MATH101', 'removed'], ['s1', 'MATH101H', 'moved'], ['s1', 'PHYS110', 'moved'],
['s3', 'BIO130', 'added'], ['s3', 'PHYS110', 'moved']])]]
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: venue not room 1 | [] | [] | Passed |
| regression variant: venue not room 2 | [['s1', 'BIO130', 'moved'], ['s3', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']] | [['s1', 'BIO130', 'moved'], ['s3', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']] | Passed |
| partial repair guard 3 | [['s1', 'CHEM120', 'added'], ['s2', 'CHEM120', 'added']] | [['s1', 'CHEM120', 'added'], ['s2', 'CHEM120', 'added']] | Passed |
| boundary control 4 | [] | [] | Passed |
| normal control 5 | [['s2', 'MATH101H', 'added']] | [['s2', 'MATH101H', 'added']] | Passed |
| normal control 6 | [['s4', 'CHEM120', 'removed']] | [['s4', 'CHEM120', 'removed']] | Passed |
| normal control 7 | [['s1', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']] | [['s1', 'MATH101H', 'added'], ['s5', 'MATH101H', 'added']] | Passed |
| normal control 8 | [['s2', 'PHYS110', 'removed'], ['s3', 'PHYS110', 'removed'], ['s4', 'BIO130', 'moved'], ['s5', 'CHEM120', 'moved']] | [['s2', 'PHYS110', 'removed'], ['s3', 'PHYS110', 'removed'], ['s4', 'BIO130', 'moved'], ['s5', 'CHEM120', 'moved']] | Passed |
SHA-256 / a20ddf4074a695be47a768b5d718ec7489377b62cca929ac5fc8247dab4baafb
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.126175+00:00.
Case digest / 5fee7bbf8dab4522c49d61b76024319d7ff26cccaba64d46a4486277e3fdef1e