{"abstract":"Exams split across two rooms of one building are flagged.","category":"Exam timetabling constraints","checks":8,"contract":"assign [exam, room, period] (rows may repeat); building room -> building; k = maximum distinct exams per room-period. Findings per exam (by id): multi_period if it occupies more than one period, split_buildings if its rooms span more than one building; then room_load for room-periods hosting more than k distinct exams.","contract_signature":"assign, building, k","evaluation_group":"w2-exam-timetabling-constraints-split-exam-building-and-room-load","failed_approach":"Counting distinct rooms still flags same-building splits.","family":"w2-exam-timetabling-constraints-split-exam-building-and-room-load-building-count","id":"FA-94801","implementations":{"attempt":{"sha256":"0c716426fd5ab5561d37a42b245837f4b2f4186598701976e5cd22ab3d7fef0e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(assign, building, k):\n    rooms_of = {}\n    periods_of = {}\n    load = {}\n    for ex, r, p in assign:\n        rooms_of.setdefault(ex, []).append(r)\n        periods_of.setdefault(ex, set()).add(p)\n        load.setdefault((r, p), set()).add(ex)\n    out = []\n    for ex in sorted(rooms_of):\n        if len(periods_of[ex]) > 1:\n            out.append(['multi_period', ex])\n        if len(set(rooms_of[ex])) > 1:\n            out.append(['split_buildings', ex])\n    for (r, p) in sorted(load):\n        if len(load[(r, p)]) > k:\n            out.append(['room_load', r, p])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: building count 1',\n   [[['A', 'R1', 0], ['A', 'R2', 0]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1], []),\n  ('regression variant: building count 2',\n   [[['MATH101', 'R2', 1], ['PHYS110', 'R2', 0], ['PHYS110', 'R2', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'PHYS110']]),\n  ('partial repair guard 3',\n   [[['MATH101H', 'R1', 1], ['MATH101', 'R4', 1], ['CHEM120', 'R1', 0], ['CHEM120', 'R2', 0],\n     ['CHEM120', 'R1', 2], ['CHEM120', 'R2', 1], ['PHYS110', 'R2', 2], ['MATH101', 'R2', 0],\n     ['CHEM120', 'R2', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'CHEM120'], ['multi_period', 'MATH101'], ['split_buildings', 'MATH101']]),\n  ('boundary control 4',\n   [[['A', 'R1', 0], ['A', 'R1', 1]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'A']]),\n  ('normal control 5',\n   [[['CHEM120', 'R2', 2], ['CHEM120', 'R3', 1], ['MATH101H', 'R3', 2], ['CHEM120', 'R2', 0],\n     ['CHEM120', 'R4', 0], ['MATH101', 'R4', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120']]),\n  ('normal control 6',\n   [[['PHYS110', 'R4', 2], ['MATH101H', 'R2', 1], ['PHYS110', 'R1', 2], ['CHEM120', 'R1', 0],\n     ['MATH101H', 'R1', 0], ['MATH101H', 'R2', 1], ['PHYS110', 'R1', 2]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'MATH101H'], ['split_buildings', 'PHYS110']]),\n  ('normal control 7',\n   [[['CHEM120', 'R1', 1], ['MATH101', 'R1', 2], ['MATH101H', 'R2', 2]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   []),\n  ('normal control 8',\n   [[['PHYS110', 'R1', 1], ['MATH101H', 'R4', 1], ['MATH101H', 'R3', 1], ['MATH101H', 'R2', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['split_buildings', 'MATH101H']])],\n [('regression: building count 1',\n   [[['A', 'R1', 0], ['A', 'R1', 0], ['B', 'R1', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   []),\n  ('regression variant: building count 2',\n   [[['CHEM120', 'R1', 2], ['MATH101H', 'R3', 2], ['MATH101H', 'R4', 2], ['MATH101H', 'R4', 2]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   []),\n  ('partial repair guard 3',\n   [[['CHEM120', 'R4', 1], ['CHEM120', 'R2', 0], ['MATH101H', 'R3', 2], ['MATH101H', 'R4', 2],\n     ['PHYS110', 'R2', 2], ['CHEM120', 'R4', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120']]),\n  ('boundary control 4',\n   [[['A', 'R1', 0], ['A', 'R3', 0]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['split_buildings', 'A']]),\n  ('normal control 5',\n   [[['MATH101H', 'R4', 1], ['MATH101H', 'R2', 2], ['MATH101', 'R2', 1], ['MATH101', 'R1', 2],\n     ['PHYS110', 'R1', 1], ['MATH101H', 'R2', 2], ['PHYS110', 'R2', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'MATH101'], ['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H'],\n    ['room_load', 'R2', 1]]),\n  ('normal control 6',\n   [[['MATH101H', 'R2', 1], ['MATH101H', 'R3', 0], ['CHEM120', 'R4', 2], ['MATH101H', 'R2', 0],\n     ['CHEM120', 'R3', 1], ['CHEM120', 'R2', 0], ['PHYS110', 'R3', 0], ['CHEM120', 'R2', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120'], ['multi_period', 'MATH101H'],\n    ['split_buildings', 'MATH101H'], ['room_load', 'R2', 0], ['room_load', 'R3', 0]]),\n  ('normal control 7',\n   [[['MATH101', 'R1', 0], ['MATH101H', 'R1', 1], ['MATH101', 'R4', 0], ['MATH101', 'R1', 0],\n     ['MATH101H', 'R2', 0], ['MATH101', 'R4', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['split_buildings', 'MATH101'], ['multi_period', 'MATH101H']]),\n  ('normal control 8',\n   [[['MATH101H', 'R2', 1], ['CHEM120', 'R4', 0], ['CHEM120', 'R4', 0], ['PHYS110', 'R3', 0],\n     ['MATH101', 'R1', 0], ['MATH101', 'R3', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'MATH101'], ['split_buildings', 'MATH101']])],\n [('regression: building count 1',\n   [[['A', 'R1', 0], ['A', 'R1', 1]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'A']]),\n  ('regression variant: building count 2',\n   [[['MATH101', 'R2', 2], ['PHYS110', 'R3', 2], ['MATH101', 'R2', 2]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   []),\n  ('partial repair guard 3',\n   [[['CHEM120', 'R2', 0], ['MATH101', 'R1', 1], ['PHYS110', 'R2', 1], ['MATH101', 'R4', 1],\n     ['PHYS110', 'R1', 2], ['MATH101', 'R4', 1], ['MATH101H', 'R2', 1], ['CHEM120', 'R2', 2],\n     ['CHEM120', 'R2', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'CHEM120'], ['split_buildings', 'MATH101'], ['multi_period', 'PHYS110']]),\n  ('boundary control 4',\n   [[['A', 'R1', 0], ['A', 'R1', 2]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'A']]),\n  ('normal control 5',\n   [[['PHYS110', 'R4', 2], ['MATH101H', 'R2', 1], ['PHYS110', 'R1', 2], ['CHEM120', 'R1', 0],\n     ['MATH101H', 'R1', 0], ['MATH101H', 'R2', 1], ['PHYS110', 'R1', 2]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'MATH101H'], ['split_buildings', 'PHYS110']]),\n  ('normal control 6',\n   [[['PHYS110', 'R2', 0], ['MATH101', 'R1', 2], ['PHYS110', 'R3', 2], ['MATH101', 'R1', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'MATH101'], ['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110']]),\n  ('normal control 7',\n   [[['MATH101', 'R1', 2], ['CHEM120', 'R4', 2], ['CHEM120', 'R2', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120']]),\n  ('normal control 8',\n   [[['PHYS110', 'R4', 0], ['MATH101H', 'R2', 0], ['MATH101H', 'R1', 0], ['MATH101', 'R2', 1],\n     ['MATH101', 'R3', 1], ['CHEM120', 'R1', 0], ['MATH101', 'R3', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['split_buildings', 'MATH101'], ['room_load', 'R1', 0]])],\n [('regression: building count 1',\n   [[['A', 'R1', 0], ['A', 'R1', 2]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'A']]),\n  ('regression variant: building count 2',\n   [[['CHEM120', 'R1', 1], ['MATH101H', 'R2', 1], ['MATH101', 'R3', 0], ['MATH101H', 'R3', 0],\n     ['CHEM120', 'R1', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H']]),\n  ('partial repair guard 3',\n   [[['PHYS110', 'R3', 0], ['MATH101H', 'R3', 1], ['MATH101H', 'R4', 2], ['MATH101H', 'R4', 2]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'MATH101H']]),\n  ('boundary control 4',\n   [[['A', 'R1', 0], ['A', 'R1', 0], ['B', 'R1', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   []),\n  ('normal control 5',\n   [[['MATH101H', 'R3', 1], ['MATH101H', 'R1', 0], ['MATH101H', 'R2', 2], ['CHEM120', 'R3', 1],\n     ['MATH101H', 'R3', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H']]),\n  ('normal control 6',\n   [[['CHEM120', 'R4', 1], ['MATH101H', 'R1', 0], ['CHEM120', 'R1', 2], ['MATH101H', 'R4', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120'], ['split_buildings', 'MATH101H']]),\n  ('normal control 7',\n   [[['MATH101H', 'R4', 0], ['CHEM120', 'R4', 1], ['MATH101H', 'R4', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   []),\n  ('normal control 8',\n   [[['MATH101H', 'R3', 1], ['MATH101', 'R4', 2], ['MATH101', 'R4', 0], ['MATH101H', 'R2', 0],\n     ['CHEM120', 'R2', 2], ['MATH101', 'R1', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['multi_period', 'MATH101H'],\n    ['split_buildings', 'MATH101H']])],\n [('regression: building count 1',\n   [[['PHYS110', 'R3', 0], ['CHEM120', 'R4', 2], ['CHEM120', 'R4', 2], ['PHYS110', 'R4', 1],\n     ['CHEM120', 'R4', 0], ['MATH101', 'R3', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'CHEM120'], ['multi_period', 'PHYS110']]),\n  ('regression variant: building count 2',\n   [[['PHYS110', 'R3', 2], ['MATH101', 'R4', 2], ['MATH101H', 'R1', 2], ['CHEM120', 'R2', 2],\n     ['PHYS110', 'R3', 1], ['MATH101', 'R4', 2], ['PHYS110', 'R2', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110']]),\n  ('partial repair guard 3',\n   [[['MATH101', 'R3', 2], ['PHYS110', 'R4', 0], ['CHEM120', 'R4', 1], ['MATH101', 'R4', 2]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   []),\n  ('boundary control 4',\n   [[['A', 'R1', 0], ['A', 'R2', 0]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1], []),\n  ('normal control 5',\n   [[['PHYS110', 'R4', 0], ['CHEM120', 'R4', 0], ['MATH101', 'R2', 0], ['PHYS110', 'R4', 2],\n     ['MATH101H', 'R4', 1], ['PHYS110', 'R4', 0], ['MATH101', 'R3', 2], ['PHYS110', 'R3', 2],\n     ['PHYS110', 'R4', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['multi_period', 'PHYS110']]),\n  ('normal control 6',\n   [[['MATH101H', 'R4', 0], ['PHYS110', 'R2', 2], ['MATH101', 'R2', 2], ['MATH101', 'R2', 2]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   []),\n  ('normal control 7',\n   [[['PHYS110', 'R4', 2], ['CHEM120', 'R1', 2], ['PHYS110', 'R2', 0], ['CHEM120', 'R1', 0],\n     ['MATH101', 'R1', 0], ['MATH101H', 'R1', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'CHEM120'], ['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110'],\n    ['room_load', 'R1', 0]]),\n  ('normal control 8',\n   [[['PHYS110', 'R3', 2], ['MATH101H', 'R4', 2], ['CHEM120', 'R4', 1], ['PHYS110', 'R3', 0],\n     ['PHYS110', 'R2', 0], ['CHEM120', 'R4', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110']])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"5736f2be6caf7b03e1a4b64f6ea90309b01228b245f1ea24ed83a1fc9b764f5c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(assign, building, k):\n    rooms_of = {}\n    periods_of = {}\n    load = {}\n    for ex, r, p in assign:\n        rooms_of.setdefault(ex, []).append(r)\n        periods_of.setdefault(ex, set()).add(p)\n        load.setdefault((r, p), set()).add(ex)\n    out = []\n    for ex in sorted(rooms_of):\n        if len(periods_of[ex]) > 1:\n            out.append(['multi_period', ex])\n        if len(rooms_of[ex]) > 1:\n            out.append(['split_buildings', ex])\n    for (r, p) in sorted(load):\n        if len(load[(r, p)]) > k:\n            out.append(['room_load', r, p])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: building count 1',\n   [[['A', 'R1', 0], ['A', 'R2', 0]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1], []),\n  ('regression variant: building count 2',\n   [[['MATH101', 'R2', 1], ['PHYS110', 'R2', 0], ['PHYS110', 'R2', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'PHYS110']]),\n  ('partial repair guard 3',\n   [[['MATH101H', 'R1', 1], ['MATH101', 'R4', 1], ['CHEM120', 'R1', 0], ['CHEM120', 'R2', 0],\n     ['CHEM120', 'R1', 2], ['CHEM120', 'R2', 1], ['PHYS110', 'R2', 2], ['MATH101', 'R2', 0],\n     ['CHEM120', 'R2', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'CHEM120'], ['multi_period', 'MATH101'], ['split_buildings', 'MATH101']]),\n  ('boundary control 4',\n   [[['A', 'R1', 0], ['A', 'R1', 1]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'A']]),\n  ('normal control 5',\n   [[['CHEM120', 'R2', 2], ['CHEM120', 'R3', 1], ['MATH101H', 'R3', 2], ['CHEM120', 'R2', 0],\n     ['CHEM120', 'R4', 0], ['MATH101', 'R4', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120']]),\n  ('normal control 6',\n   [[['PHYS110', 'R4', 2], ['MATH101H', 'R2', 1], ['PHYS110', 'R1', 2], ['CHEM120', 'R1', 0],\n     ['MATH101H', 'R1', 0], ['MATH101H', 'R2', 1], ['PHYS110', 'R1', 2]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'MATH101H'], ['split_buildings', 'PHYS110']]),\n  ('normal control 7',\n   [[['CHEM120', 'R1', 1], ['MATH101', 'R1', 2], ['MATH101H', 'R2', 2]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   []),\n  ('normal control 8',\n   [[['PHYS110', 'R1', 1], ['MATH101H', 'R4', 1], ['MATH101H', 'R3', 1], ['MATH101H', 'R2', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['split_buildings', 'MATH101H']])],\n [('regression: building count 1',\n   [[['A', 'R1', 0], ['A', 'R1', 0], ['B', 'R1', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   []),\n  ('regression variant: building count 2',\n   [[['CHEM120', 'R1', 2], ['MATH101H', 'R3', 2], ['MATH101H', 'R4', 2], ['MATH101H', 'R4', 2]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   []),\n  ('partial repair guard 3',\n   [[['CHEM120', 'R4', 1], ['CHEM120', 'R2', 0], ['MATH101H', 'R3', 2], ['MATH101H', 'R4', 2],\n     ['PHYS110', 'R2', 2], ['CHEM120', 'R4', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120']]),\n  ('boundary control 4',\n   [[['A', 'R1', 0], ['A', 'R3', 0]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['split_buildings', 'A']]),\n  ('normal control 5',\n   [[['MATH101H', 'R4', 1], ['MATH101H', 'R2', 2], ['MATH101', 'R2', 1], ['MATH101', 'R1', 2],\n     ['PHYS110', 'R1', 1], ['MATH101H', 'R2', 2], ['PHYS110', 'R2', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'MATH101'], ['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H'],\n    ['room_load', 'R2', 1]]),\n  ('normal control 6',\n   [[['MATH101H', 'R2', 1], ['MATH101H', 'R3', 0], ['CHEM120', 'R4', 2], ['MATH101H', 'R2', 0],\n     ['CHEM120', 'R3', 1], ['CHEM120', 'R2', 0], ['PHYS110', 'R3', 0], ['CHEM120', 'R2', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120'], ['multi_period', 'MATH101H'],\n    ['split_buildings', 'MATH101H'], ['room_load', 'R2', 0], ['room_load', 'R3', 0]]),\n  ('normal control 7',\n   [[['MATH101', 'R1', 0], ['MATH101H', 'R1', 1], ['MATH101', 'R4', 0], ['MATH101', 'R1', 0],\n     ['MATH101H', 'R2', 0], ['MATH101', 'R4', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['split_buildings', 'MATH101'], ['multi_period', 'MATH101H']]),\n  ('normal control 8',\n   [[['MATH101H', 'R2', 1], ['CHEM120', 'R4', 0], ['CHEM120', 'R4', 0], ['PHYS110', 'R3', 0],\n     ['MATH101', 'R1', 0], ['MATH101', 'R3', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'MATH101'], ['split_buildings', 'MATH101']])],\n [('regression: building count 1',\n   [[['A', 'R1', 0], ['A', 'R1', 1]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'A']]),\n  ('regression variant: building count 2',\n   [[['MATH101', 'R2', 2], ['PHYS110', 'R3', 2], ['MATH101', 'R2', 2]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   []),\n  ('partial repair guard 3',\n   [[['CHEM120', 'R2', 0], ['MATH101', 'R1', 1], ['PHYS110', 'R2', 1], ['MATH101', 'R4', 1],\n     ['PHYS110', 'R1', 2], ['MATH101', 'R4', 1], ['MATH101H', 'R2', 1], ['CHEM120', 'R2', 2],\n     ['CHEM120', 'R2', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'CHEM120'], ['split_buildings', 'MATH101'], ['multi_period', 'PHYS110']]),\n  ('boundary control 4',\n   [[['A', 'R1', 0], ['A', 'R1', 2]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'A']]),\n  ('normal control 5',\n   [[['PHYS110', 'R4', 2], ['MATH101H', 'R2', 1], ['PHYS110', 'R1', 2], ['CHEM120', 'R1', 0],\n     ['MATH101H', 'R1', 0], ['MATH101H', 'R2', 1], ['PHYS110', 'R1', 2]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'MATH101H'], ['split_buildings', 'PHYS110']]),\n  ('normal control 6',\n   [[['PHYS110', 'R2', 0], ['MATH101', 'R1', 2], ['PHYS110', 'R3', 2], ['MATH101', 'R1', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'MATH101'], ['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110']]),\n  ('normal control 7',\n   [[['MATH101', 'R1', 2], ['CHEM120', 'R4', 2], ['CHEM120', 'R2', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120']]),\n  ('normal control 8',\n   [[['PHYS110', 'R4', 0], ['MATH101H', 'R2', 0], ['MATH101H', 'R1', 0], ['MATH101', 'R2', 1],\n     ['MATH101', 'R3', 1], ['CHEM120', 'R1', 0], ['MATH101', 'R3', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['split_buildings', 'MATH101'], ['room_load', 'R1', 0]])],\n [('regression: building count 1',\n   [[['A', 'R1', 0], ['A', 'R1', 2]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'A']]),\n  ('regression variant: building count 2',\n   [[['CHEM120', 'R1', 1], ['MATH101H', 'R2', 1], ['MATH101', 'R3', 0], ['MATH101H', 'R3', 0],\n     ['CHEM120', 'R1', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H']]),\n  ('partial repair guard 3',\n   [[['PHYS110', 'R3', 0], ['MATH101H', 'R3', 1], ['MATH101H', 'R4', 2], ['MATH101H', 'R4', 2]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'MATH101H']]),\n  ('boundary control 4',\n   [[['A', 'R1', 0], ['A', 'R1', 0], ['B', 'R1', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   []),\n  ('normal control 5',\n   [[['MATH101H', 'R3', 1], ['MATH101H', 'R1', 0], ['MATH101H', 'R2', 2], ['CHEM120', 'R3', 1],\n     ['MATH101H', 'R3', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H']]),\n  ('normal control 6',\n   [[['CHEM120', 'R4', 1], ['MATH101H', 'R1', 0], ['CHEM120', 'R1', 2], ['MATH101H', 'R4', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120'], ['split_buildings', 'MATH101H']]),\n  ('normal control 7',\n   [[['MATH101H', 'R4', 0], ['CHEM120', 'R4', 1], ['MATH101H', 'R4', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   []),\n  ('normal control 8',\n   [[['MATH101H', 'R3', 1], ['MATH101', 'R4', 2], ['MATH101', 'R4', 0], ['MATH101H', 'R2', 0],\n     ['CHEM120', 'R2', 2], ['MATH101', 'R1', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['multi_period', 'MATH101H'],\n    ['split_buildings', 'MATH101H']])],\n [('regression: building count 1',\n   [[['PHYS110', 'R3', 0], ['CHEM120', 'R4', 2], ['CHEM120', 'R4', 2], ['PHYS110', 'R4', 1],\n     ['CHEM120', 'R4', 0], ['MATH101', 'R3', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'CHEM120'], ['multi_period', 'PHYS110']]),\n  ('regression variant: building count 2',\n   [[['PHYS110', 'R3', 2], ['MATH101', 'R4', 2], ['MATH101H', 'R1', 2], ['CHEM120', 'R2', 2],\n     ['PHYS110', 'R3', 1], ['MATH101', 'R4', 2], ['PHYS110', 'R2', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110']]),\n  ('partial repair guard 3',\n   [[['MATH101', 'R3', 2], ['PHYS110', 'R4', 0], ['CHEM120', 'R4', 1], ['MATH101', 'R4', 2]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   []),\n  ('boundary control 4',\n   [[['A', 'R1', 0], ['A', 'R2', 0]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1], []),\n  ('normal control 5',\n   [[['PHYS110', 'R4', 0], ['CHEM120', 'R4', 0], ['MATH101', 'R2', 0], ['PHYS110', 'R4', 2],\n     ['MATH101H', 'R4', 1], ['PHYS110', 'R4', 0], ['MATH101', 'R3', 2], ['PHYS110', 'R3', 2],\n     ['PHYS110', 'R4', 0]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['multi_period', 'PHYS110']]),\n  ('normal control 6',\n   [[['MATH101H', 'R4', 0], ['PHYS110', 'R2', 2], ['MATH101', 'R2', 2], ['MATH101', 'R2', 2]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   []),\n  ('normal control 7',\n   [[['PHYS110', 'R4', 2], ['CHEM120', 'R1', 2], ['PHYS110', 'R2', 0], ['CHEM120', 'R1', 0],\n     ['MATH101', 'R1', 0], ['MATH101H', 'R1', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],\n   [['multi_period', 'CHEM120'], ['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110'],\n    ['room_load', 'R1', 0]]),\n  ('normal control 8',\n   [[['PHYS110', 'R3', 2], ['MATH101H', 'R4', 2], ['CHEM120', 'R4', 1], ['PHYS110', 'R3', 0],\n     ['PHYS110', 'R2', 0], ['CHEM120', 'R4', 1]],\n    {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],\n   [['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110']])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-exam-timetabling-constraints-split-exam-building-and-room-load-building-count","generated_at":"2026-09-29T14:52:07.798524+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Split exams must stay in one building and rooms have limits on concurrent exams.","root_cause":"The test counts rooms rather than buildings.","sha256":"f18e2621c012f3ba38311c65b54b235b39e5d4ebd0d09be8be6e38688feba72d","title":"Any split exam reported as spanning buildings · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":45.229,"exit_code":1,"observations":[{"actual":[["split_buildings","A"]],"check":"regression: building count 1","expected":[],"passed":false},{"actual":[["multi_period","PHYS110"]],"check":"regression variant: building count 2","expected":[["multi_period","PHYS110"]],"passed":true},{"actual":[["multi_period","CHEM120"],["split_buildings","CHEM120"],["multi_period","MATH101"],["split_buildings","MATH101"]],"check":"partial repair guard 3","expected":[["multi_period","CHEM120"],["multi_period","MATH101"],["split_buildings","MATH101"]],"passed":false},{"actual":[["multi_period","A"]],"check":"boundary control 4","expected":[["multi_period","A"]],"passed":true},{"actual":[["multi_period","CHEM120"],["split_buildings","CHEM120"]],"check":"normal control 5","expected":[["multi_period","CHEM120"],["split_buildings","CHEM120"]],"passed":true},{"actual":[["multi_period","MATH101H"],["split_buildings","MATH101H"],["split_buildings","PHYS110"]],"check":"normal control 6","expected":[["multi_period","MATH101H"],["split_buildings","PHYS110"]],"passed":false},{"actual":[],"check":"normal control 7","expected":[],"passed":true},{"actual":[["split_buildings","MATH101H"]],"check":"normal control 8","expected":[["split_buildings","MATH101H"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: building count 1\", \"actual\": [[\"split_buildings\", \"A\"]], \"expected\": [], \"passed\": false}, {\"check\": \"regression variant: building count 2\", \"actual\": [[\"multi_period\", \"PHYS110\"]], \"expected\": [[\"multi_period\", \"PHYS110\"]], \"passed\": true}, {\"check\": \"partial repair guard 3\", \"actual\": [[\"multi_period\", \"CHEM120\"], [\"split_buildings\", \"CHEM120\"], [\"multi_period\", \"MATH101\"], [\"split_buildings\", \"MATH101\"]], \"expected\": [[\"multi_period\", \"CHEM120\"], [\"multi_period\", \"MATH101\"], [\"split_buildings\", \"MATH101\"]], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [[\"multi_period\", \"A\"]], \"expected\": [[\"multi_period\", \"A\"]], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [[\"multi_period\", \"CHEM120\"], [\"split_buildings\", \"CHEM120\"]], \"expected\": [[\"multi_period\", \"CHEM120\"], [\"split_buildings\", \"CHEM120\"]], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [[\"multi_period\", \"MATH101H\"], [\"split_buildings\", \"MATH101H\"], [\"split_buildings\", \"PHYS110\"]], \"expected\": [[\"multi_period\", \"MATH101H\"], [\"split_buildings\", \"PHYS110\"]], \"passed\": false}, {\"check\": \"normal control 7\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [[\"split_buildings\", \"MATH101H\"]], \"expected\": [[\"split_buildings\", \"MATH101H\"]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.071,"exit_code":1,"observations":[{"actual":[["split_buildings","A"]],"check":"regression: building count 1","expected":[],"passed":false},{"actual":[["multi_period","PHYS110"],["split_buildings","PHYS110"]],"check":"regression variant: building count 2","expected":[["multi_period","PHYS110"]],"passed":false},{"actual":[["multi_period","CHEM120"],["split_buildings","CHEM120"],["multi_period","MATH101"],["split_buildings","MATH101"]],"check":"partial repair guard 3","expected":[["multi_period","CHEM120"],["multi_period","MATH101"],["split_buildings","MATH101"]],"passed":false},{"actual":[["multi_period","A"],["split_buildings","A"]],"check":"boundary control 4","expected":[["multi_period","A"]],"passed":false},{"actual":[["multi_period","CHEM120"],["split_buildings","CHEM120"]],"check":"normal control 5","expected":[["multi_period","CHEM120"],["split_buildings","CHEM120"]],"passed":true},{"actual":[["multi_period","MATH101H"],["split_buildings","MATH101H"],["split_buildings","PHYS110"]],"check":"normal control 6","expected":[["multi_period","MATH101H"],["split_buildings","PHYS110"]],"passed":false},{"actual":[],"check":"normal control 7","expected":[],"passed":true},{"actual":[["split_buildings","MATH101H"]],"check":"normal control 8","expected":[["split_buildings","MATH101H"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: building count 1\", \"actual\": [[\"split_buildings\", \"A\"]], \"expected\": [], \"passed\": false}, {\"check\": \"regression variant: building count 2\", \"actual\": [[\"multi_period\", \"PHYS110\"], [\"split_buildings\", \"PHYS110\"]], \"expected\": [[\"multi_period\", \"PHYS110\"]], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [[\"multi_period\", \"CHEM120\"], [\"split_buildings\", \"CHEM120\"], [\"multi_period\", \"MATH101\"], [\"split_buildings\", \"MATH101\"]], \"expected\": [[\"multi_period\", \"CHEM120\"], [\"multi_period\", \"MATH101\"], [\"split_buildings\", \"MATH101\"]], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [[\"multi_period\", \"A\"], [\"split_buildings\", \"A\"]], \"expected\": [[\"multi_period\", \"A\"]], \"passed\": false}, {\"check\": \"normal control 5\", \"actual\": [[\"multi_period\", \"CHEM120\"], [\"split_buildings\", \"CHEM120\"]], \"expected\": [[\"multi_period\", \"CHEM120\"], [\"split_buildings\", \"CHEM120\"]], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [[\"multi_period\", \"MATH101H\"], [\"split_buildings\", \"MATH101H\"], [\"split_buildings\", \"PHYS110\"]], \"expected\": [[\"multi_period\", \"MATH101H\"], [\"split_buildings\", \"PHYS110\"]], \"passed\": false}, {\"check\": \"normal control 7\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [[\"split_buildings\", \"MATH101H\"]], \"expected\": [[\"split_buildings\", \"MATH101H\"]], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}