{"abstract":"Two 60-minute exams in one room count as mixed durations.","category":"Exam timetabling constraints","checks":8,"contract":"Assignments [exam, room, period] and exam durations. For each room and period, the penalty is the number of distinct durations minus one. Return [total penalty, [room, period, distinct durations] for penalised room-periods in order].","evaluation_group":"w2-exam-timetabling-constraints-mixed-duration-penalty","failed_approach":"Testing distinctness but charging per exam still overcharges.","family":"w2-exam-timetabling-constraints-mixed-duration-penalty-distinct-durations","id":"FA-94566","implementations":{"attempt":{"sha256":"612d612200b141480e5a7e4201cecfd1106a4415e285e0f88de7ed0c314f0a37","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(assign, dur):\n    groups = {}\n    for e, r, p in assign:\n        groups.setdefault((r, p), []).append(dur[e])\n    bad = []\n    total = 0\n    for (r, p), ds in sorted(groups.items()):\n        if len(set(ds)) > 1:\n            bad.append([r, p, len(ds)])\n            total += len(ds) - 1\n    return [total, bad]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: distinct durations 1', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),\n  ('regression variant: distinct durations 2',\n   [[['MATH101', 'R1', 1], ['PHYS110', 'R1', 0], ['MATH101', 'R1', 2], ['PHYS110', 'R1', 0],\n     ['BIO130', 'R2', 1], ['BIO130', 'R1', 0], ['MATH101H', 'R2', 1]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 90,\n     'BIO130': 60,\n     'HIST140': 90,\n     'ECON150': 120}],\n   [2, [['R1', 0, 2], ['R2', 1, 2]]]),\n  ('partial repair guard 3',\n   [[['HIST140', 'R2', 1], ['BIO130', 'R2', 1], ['MATH101', 'R1', 2], ['MATH101', 'R2', 1],\n     ['MATH101', 'R1', 2], ['CHEM120', 'R1', 1]],\n    {'MATH101': 120,\n     'MATH101H': 90,\n     'PHYS110': 60,\n     'CHEM120': 120,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [1, [['R2', 1, 2]]]),\n  ('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),\n  ('normal control 5',\n   [[['CHEM120', 'R1', 2], ['ECON150', 'R1', 0]],\n    {'MATH101': 60,\n     'MATH101H': 90,\n     'PHYS110': 90,\n     'CHEM120': 60,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [0, []]),\n  ('normal control 6',\n   [[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1], ['MATH101', 'R2', 0],\n     ['CHEM120', 'R2', 2], ['HIST140', 'R1', 0]],\n    {'MATH101': 60,\n     'MATH101H': 60,\n     'PHYS110': 60,\n     'CHEM120': 90,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 60}],\n   [1, [['R2', 2, 2]]]),\n  ('normal control 7',\n   [[['MATH101H', 'R1', 1], ['PHYS110', 'R2', 0]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 90,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [0, []]),\n  ('normal control 8',\n   [[['BIO130', 'R2', 1], ['MATH101', 'R2', 1], ['HIST140', 'R2', 1], ['PHYS110', 'R1', 1],\n     ['HIST140', 'R1', 1]],\n    {'MATH101': 90,\n     'MATH101H': 60,\n     'PHYS110': 60,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [2, [['R1', 1, 2], ['R2', 1, 2]]])],\n [('regression: distinct durations 1',\n   [[['MATH101', 'R2', 1], ['MATH101', 'R2', 1], ['ECON150', 'R1', 1], ['MATH101H', 'R1', 2]],\n    {'MATH101': 60,\n     'MATH101H': 60,\n     'PHYS110': 120,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 60}],\n   [0, []]),\n  ('regression variant: distinct durations 2',\n   [[['CHEM120', 'R2', 0], ['ECON150', 'R2', 1], ['PHYS110', 'R2', 1], ['ECON150', 'R1', 2],\n     ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 1], ['MATH101H', 'R2', 1]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 120,\n     'CHEM120': 60,\n     'BIO130': 60,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [1, [['R2', 1, 2]]]),\n  ('partial repair guard 3',\n   [[['ECON150', 'R1', 0], ['ECON150', 'R1', 1], ['BIO130', 'R1', 0], ['CHEM120', 'R2', 2],\n     ['BIO130', 'R1', 0]],\n    {'MATH101': 120,\n     'MATH101H': 60,\n     'PHYS110': 120,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [1, [['R1', 0, 2]]]),\n  ('boundary control 4', [[['A', 'R1', 0], ['B', 'R2', 0]], {'A': 60, 'B': 90}], [0, []]),\n  ('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),\n  ('normal control 6',\n   [[['MATH101H', 'R1', 1], ['ECON150', 'R1', 2], ['BIO130', 'R1', 0], ['MATH101H', 'R1', 2],\n     ['BIO130', 'R2', 1]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 90,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 120}],\n   [1, [['R1', 2, 2]]]),\n  ('normal control 7',\n   [[['CHEM120', 'R2', 2], ['MATH101H', 'R1', 2], ['HIST140', 'R2', 1], ['MATH101H', 'R2', 2]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 120,\n     'CHEM120': 90,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 120}],\n   [1, [['R2', 2, 2]]]),\n  ('normal control 8',\n   [[['PHYS110', 'R1', 1], ['BIO130', 'R1', 1]],\n    {'MATH101': 120,\n     'MATH101H': 90,\n     'PHYS110': 90,\n     'CHEM120': 120,\n     'BIO130': 60,\n     'HIST140': 120,\n     'ECON150': 60}],\n   [1, [['R1', 1, 2]]])],\n [('regression: distinct durations 1',\n   [[['BIO130', 'R2', 2], ['PHYS110', 'R2', 2], ['MATH101', 'R1', 1], ['BIO130', 'R2', 2]],\n    {'MATH101': 120,\n     'MATH101H': 60,\n     'PHYS110': 120,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [0, []]),\n  ('regression variant: distinct durations 2',\n   [[['MATH101H', 'R2', 0], ['HIST140', 'R2', 2], ['PHYS110', 'R1', 2], ['MATH101H', 'R2', 0],\n     ['ECON150', 'R2', 2], ['ECON150', 'R1', 0], ['PHYS110', 'R1', 2]],\n    {'MATH101': 90,\n     'MATH101H': 60,\n     'PHYS110': 90,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [1, [['R2', 2, 2]]]),\n  ('partial repair guard 3',\n   [[['BIO130', 'R2', 1], ['MATH101', 'R2', 1], ['HIST140', 'R2', 1], ['PHYS110', 'R1', 1],\n     ['HIST140', 'R1', 1]],\n    {'MATH101': 90,\n     'MATH101H': 60,\n     'PHYS110': 60,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [2, [['R1', 1, 2], ['R2', 1, 2]]]),\n  ('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 0], ['C', 'R1', 0]], {'A': 60, 'B': 90, 'C': 120}],\n   [2, [['R1', 0, 3]]]),\n  ('boundary control 5', [[['A', 'R1', 0], ['B', 'R2', 0]], {'A': 60, 'B': 90}], [0, []]),\n  ('normal control 6',\n   [[['MATH101H', 'R1', 1], ['HIST140', 'R1', 0], ['ECON150', 'R2', 0], ['ECON150', 'R1', 2],\n     ['PHYS110', 'R2', 2], ['MATH101H', 'R2', 1]],\n    {'MATH101': 90,\n     'MATH101H': 120,\n     'PHYS110': 60,\n     'CHEM120': 120,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [0, []]),\n  ('normal control 7',\n   [[['CHEM120', 'R2', 1], ['HIST140', 'R2', 2], ['ECON150', 'R2', 1], ['ECON150', 'R1', 2]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 60,\n     'CHEM120': 120,\n     'BIO130': 90,\n     'HIST140': 90,\n     'ECON150': 120}],\n   [0, []]),\n  ('normal control 8',\n   [[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1], ['MATH101', 'R2', 0],\n     ['CHEM120', 'R2', 2], ['HIST140', 'R1', 0]],\n    {'MATH101': 60,\n     'MATH101H': 60,\n     'PHYS110': 60,\n     'CHEM120': 90,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 60}],\n   [1, [['R2', 2, 2]]])],\n [('regression: distinct durations 1',\n   [[['CHEM120', 'R2', 0], ['PHYS110', 'R1', 0], ['MATH101', 'R2', 2], ['BIO130', 'R1', 0],\n     ['CHEM120', 'R2', 2], ['ECON150', 'R2', 2], ['BIO130', 'R2', 2]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 120,\n     'CHEM120': 90,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 120}],\n   [3, [['R1', 0, 2], ['R2', 2, 3]]]),\n  ('regression variant: distinct durations 2',\n   [[['HIST140', 'R1', 2], ['PHYS110', 'R2', 0], ['PHYS110', 'R2', 0], ['CHEM120', 'R2', 0],\n     ['MATH101', 'R2', 0], ['BIO130', 'R2', 1], ['MATH101H', 'R2', 0]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 60,\n     'ECON150': 120}],\n   [2, [['R2', 0, 3]]]),\n  ('partial repair guard 3',\n   [[['ECON150', 'R1', 0], ['MATH101H', 'R1', 2], ['CHEM120', 'R2', 2], ['ECON150', 'R1', 2],\n     ['CHEM120', 'R1', 2], ['CHEM120', 'R1', 0], ['ECON150', 'R1', 0], ['ECON150', 'R2', 0]],\n    {'MATH101': 60,\n     'MATH101H': 60,\n     'PHYS110': 120,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [1, [['R1', 2, 2]]]),\n  ('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),\n  ('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 0], ['C', 'R1', 0]], {'A': 60, 'B': 90, 'C': 120}],\n   [2, [['R1', 0, 3]]]),\n  ('normal control 6',\n   [[['MATH101', 'R1', 2], ['ECON150', 'R1', 1], ['BIO130', 'R2', 1], ['HIST140', 'R2', 0],\n     ['PHYS110', 'R1', 0], ['ECON150', 'R2', 2], ['MATH101H', 'R1', 1]],\n    {'MATH101': 120,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 60,\n     'BIO130': 60,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [1, [['R1', 1, 2]]]),\n  ('normal control 7',\n   [[['MATH101H', 'R2', 1], ['HIST140', 'R2', 2], ['PHYS110', 'R2', 1], ['ECON150', 'R2', 0],\n     ['HIST140', 'R2', 2], ['HIST140', 'R1', 2], ['CHEM120', 'R1', 1]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 120,\n     'CHEM120': 120,\n     'BIO130': 90,\n     'HIST140': 90,\n     'ECON150': 60}],\n   [0, []]),\n  ('normal control 8',\n   [[['HIST140', 'R1', 1], ['MATH101H', 'R2', 2], ['ECON150', 'R1', 2], ['PHYS110', 'R1', 1],\n     ['HIST140', 'R1', 1], ['CHEM120', 'R2', 1], ['CHEM120', 'R2', 2]],\n    {'MATH101': 90,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 120,\n     'BIO130': 60,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [1, [['R1', 1, 2]]])],\n [('regression: distinct durations 1',\n   [[['MATH101H', 'R2', 2], ['MATH101', 'R2', 2], ['MATH101H', 'R1', 1], ['MATH101', 'R1', 1],\n     ['HIST140', 'R2', 0]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 60,\n     'CHEM120': 90,\n     'BIO130': 60,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [0, []]),\n  ('regression variant: distinct durations 2',\n   [[['MATH101H', 'R1', 0], ['CHEM120', 'R1', 0], ['ECON150', 'R2', 1], ['PHYS110', 'R1', 0]],\n    {'MATH101': 90,\n     'MATH101H': 60,\n     'PHYS110': 120,\n     'CHEM120': 60,\n     'BIO130': 60,\n     'HIST140': 60,\n     'ECON150': 90}],\n   [1, [['R1', 0, 2]]]),\n  ('partial repair guard 3',\n   [[['CHEM120', 'R1', 1], ['BIO130', 'R2', 2], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1],\n     ['PHYS110', 'R2', 2], ['MATH101', 'R2', 2], ['HIST140', 'R2', 1]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 60,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 60,\n     'ECON150': 90}],\n   [3, [['R2', 1, 2], ['R2', 2, 3]]]),\n  ('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),\n  ('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),\n  ('normal control 6',\n   [[['CHEM120', 'R1', 0], ['HIST140', 'R1', 1], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 2]],\n    {'MATH101': 120,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [1, [['R1', 1, 2]]]),\n  ('normal control 7',\n   [[['PHYS110', 'R1', 1], ['MATH101H', 'R2', 1], ['HIST140', 'R1', 2]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 120,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [0, []]),\n  ('normal control 8',\n   [[['BIO130', 'R2', 0], ['BIO130', 'R1', 0], ['ECON150', 'R2', 1], ['MATH101H', 'R1', 2],\n     ['PHYS110', 'R1', 0], ['CHEM120', 'R1', 0], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1]],\n    {'MATH101': 120,\n     'MATH101H': 120,\n     'PHYS110': 120,\n     'CHEM120': 60,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 120}],\n   [2, [['R1', 0, 3]]])]]\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":"ce9605d7aa3fcb71ed027602f8a32b132153f5ace470a720f772942089e7b792","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(assign, dur):\n    groups = {}\n    for e, r, p in assign:\n        groups.setdefault((r, p), []).append(dur[e])\n    bad = []\n    total = 0\n    for (r, p), ds in sorted(groups.items()):\n        if len(ds) > 1:\n            bad.append([r, p, len(ds)])\n            total += len(ds) - 1\n    return [total, bad]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: distinct durations 1', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),\n  ('regression variant: distinct durations 2',\n   [[['MATH101', 'R1', 1], ['PHYS110', 'R1', 0], ['MATH101', 'R1', 2], ['PHYS110', 'R1', 0],\n     ['BIO130', 'R2', 1], ['BIO130', 'R1', 0], ['MATH101H', 'R2', 1]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 90,\n     'BIO130': 60,\n     'HIST140': 90,\n     'ECON150': 120}],\n   [2, [['R1', 0, 2], ['R2', 1, 2]]]),\n  ('partial repair guard 3',\n   [[['HIST140', 'R2', 1], ['BIO130', 'R2', 1], ['MATH101', 'R1', 2], ['MATH101', 'R2', 1],\n     ['MATH101', 'R1', 2], ['CHEM120', 'R1', 1]],\n    {'MATH101': 120,\n     'MATH101H': 90,\n     'PHYS110': 60,\n     'CHEM120': 120,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [1, [['R2', 1, 2]]]),\n  ('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),\n  ('normal control 5',\n   [[['CHEM120', 'R1', 2], ['ECON150', 'R1', 0]],\n    {'MATH101': 60,\n     'MATH101H': 90,\n     'PHYS110': 90,\n     'CHEM120': 60,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [0, []]),\n  ('normal control 6',\n   [[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1], ['MATH101', 'R2', 0],\n     ['CHEM120', 'R2', 2], ['HIST140', 'R1', 0]],\n    {'MATH101': 60,\n     'MATH101H': 60,\n     'PHYS110': 60,\n     'CHEM120': 90,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 60}],\n   [1, [['R2', 2, 2]]]),\n  ('normal control 7',\n   [[['MATH101H', 'R1', 1], ['PHYS110', 'R2', 0]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 90,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [0, []]),\n  ('normal control 8',\n   [[['BIO130', 'R2', 1], ['MATH101', 'R2', 1], ['HIST140', 'R2', 1], ['PHYS110', 'R1', 1],\n     ['HIST140', 'R1', 1]],\n    {'MATH101': 90,\n     'MATH101H': 60,\n     'PHYS110': 60,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [2, [['R1', 1, 2], ['R2', 1, 2]]])],\n [('regression: distinct durations 1',\n   [[['MATH101', 'R2', 1], ['MATH101', 'R2', 1], ['ECON150', 'R1', 1], ['MATH101H', 'R1', 2]],\n    {'MATH101': 60,\n     'MATH101H': 60,\n     'PHYS110': 120,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 60}],\n   [0, []]),\n  ('regression variant: distinct durations 2',\n   [[['CHEM120', 'R2', 0], ['ECON150', 'R2', 1], ['PHYS110', 'R2', 1], ['ECON150', 'R1', 2],\n     ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 1], ['MATH101H', 'R2', 1]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 120,\n     'CHEM120': 60,\n     'BIO130': 60,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [1, [['R2', 1, 2]]]),\n  ('partial repair guard 3',\n   [[['ECON150', 'R1', 0], ['ECON150', 'R1', 1], ['BIO130', 'R1', 0], ['CHEM120', 'R2', 2],\n     ['BIO130', 'R1', 0]],\n    {'MATH101': 120,\n     'MATH101H': 60,\n     'PHYS110': 120,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [1, [['R1', 0, 2]]]),\n  ('boundary control 4', [[['A', 'R1', 0], ['B', 'R2', 0]], {'A': 60, 'B': 90}], [0, []]),\n  ('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),\n  ('normal control 6',\n   [[['MATH101H', 'R1', 1], ['ECON150', 'R1', 2], ['BIO130', 'R1', 0], ['MATH101H', 'R1', 2],\n     ['BIO130', 'R2', 1]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 90,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 120}],\n   [1, [['R1', 2, 2]]]),\n  ('normal control 7',\n   [[['CHEM120', 'R2', 2], ['MATH101H', 'R1', 2], ['HIST140', 'R2', 1], ['MATH101H', 'R2', 2]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 120,\n     'CHEM120': 90,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 120}],\n   [1, [['R2', 2, 2]]]),\n  ('normal control 8',\n   [[['PHYS110', 'R1', 1], ['BIO130', 'R1', 1]],\n    {'MATH101': 120,\n     'MATH101H': 90,\n     'PHYS110': 90,\n     'CHEM120': 120,\n     'BIO130': 60,\n     'HIST140': 120,\n     'ECON150': 60}],\n   [1, [['R1', 1, 2]]])],\n [('regression: distinct durations 1',\n   [[['BIO130', 'R2', 2], ['PHYS110', 'R2', 2], ['MATH101', 'R1', 1], ['BIO130', 'R2', 2]],\n    {'MATH101': 120,\n     'MATH101H': 60,\n     'PHYS110': 120,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [0, []]),\n  ('regression variant: distinct durations 2',\n   [[['MATH101H', 'R2', 0], ['HIST140', 'R2', 2], ['PHYS110', 'R1', 2], ['MATH101H', 'R2', 0],\n     ['ECON150', 'R2', 2], ['ECON150', 'R1', 0], ['PHYS110', 'R1', 2]],\n    {'MATH101': 90,\n     'MATH101H': 60,\n     'PHYS110': 90,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [1, [['R2', 2, 2]]]),\n  ('partial repair guard 3',\n   [[['BIO130', 'R2', 1], ['MATH101', 'R2', 1], ['HIST140', 'R2', 1], ['PHYS110', 'R1', 1],\n     ['HIST140', 'R1', 1]],\n    {'MATH101': 90,\n     'MATH101H': 60,\n     'PHYS110': 60,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [2, [['R1', 1, 2], ['R2', 1, 2]]]),\n  ('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 0], ['C', 'R1', 0]], {'A': 60, 'B': 90, 'C': 120}],\n   [2, [['R1', 0, 3]]]),\n  ('boundary control 5', [[['A', 'R1', 0], ['B', 'R2', 0]], {'A': 60, 'B': 90}], [0, []]),\n  ('normal control 6',\n   [[['MATH101H', 'R1', 1], ['HIST140', 'R1', 0], ['ECON150', 'R2', 0], ['ECON150', 'R1', 2],\n     ['PHYS110', 'R2', 2], ['MATH101H', 'R2', 1]],\n    {'MATH101': 90,\n     'MATH101H': 120,\n     'PHYS110': 60,\n     'CHEM120': 120,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [0, []]),\n  ('normal control 7',\n   [[['CHEM120', 'R2', 1], ['HIST140', 'R2', 2], ['ECON150', 'R2', 1], ['ECON150', 'R1', 2]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 60,\n     'CHEM120': 120,\n     'BIO130': 90,\n     'HIST140': 90,\n     'ECON150': 120}],\n   [0, []]),\n  ('normal control 8',\n   [[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1], ['MATH101', 'R2', 0],\n     ['CHEM120', 'R2', 2], ['HIST140', 'R1', 0]],\n    {'MATH101': 60,\n     'MATH101H': 60,\n     'PHYS110': 60,\n     'CHEM120': 90,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 60}],\n   [1, [['R2', 2, 2]]])],\n [('regression: distinct durations 1',\n   [[['CHEM120', 'R2', 0], ['PHYS110', 'R1', 0], ['MATH101', 'R2', 2], ['BIO130', 'R1', 0],\n     ['CHEM120', 'R2', 2], ['ECON150', 'R2', 2], ['BIO130', 'R2', 2]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 120,\n     'CHEM120': 90,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 120}],\n   [3, [['R1', 0, 2], ['R2', 2, 3]]]),\n  ('regression variant: distinct durations 2',\n   [[['HIST140', 'R1', 2], ['PHYS110', 'R2', 0], ['PHYS110', 'R2', 0], ['CHEM120', 'R2', 0],\n     ['MATH101', 'R2', 0], ['BIO130', 'R2', 1], ['MATH101H', 'R2', 0]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 60,\n     'ECON150': 120}],\n   [2, [['R2', 0, 3]]]),\n  ('partial repair guard 3',\n   [[['ECON150', 'R1', 0], ['MATH101H', 'R1', 2], ['CHEM120', 'R2', 2], ['ECON150', 'R1', 2],\n     ['CHEM120', 'R1', 2], ['CHEM120', 'R1', 0], ['ECON150', 'R1', 0], ['ECON150', 'R2', 0]],\n    {'MATH101': 60,\n     'MATH101H': 60,\n     'PHYS110': 120,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [1, [['R1', 2, 2]]]),\n  ('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),\n  ('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 0], ['C', 'R1', 0]], {'A': 60, 'B': 90, 'C': 120}],\n   [2, [['R1', 0, 3]]]),\n  ('normal control 6',\n   [[['MATH101', 'R1', 2], ['ECON150', 'R1', 1], ['BIO130', 'R2', 1], ['HIST140', 'R2', 0],\n     ['PHYS110', 'R1', 0], ['ECON150', 'R2', 2], ['MATH101H', 'R1', 1]],\n    {'MATH101': 120,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 60,\n     'BIO130': 60,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [1, [['R1', 1, 2]]]),\n  ('normal control 7',\n   [[['MATH101H', 'R2', 1], ['HIST140', 'R2', 2], ['PHYS110', 'R2', 1], ['ECON150', 'R2', 0],\n     ['HIST140', 'R2', 2], ['HIST140', 'R1', 2], ['CHEM120', 'R1', 1]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 120,\n     'CHEM120': 120,\n     'BIO130': 90,\n     'HIST140': 90,\n     'ECON150': 60}],\n   [0, []]),\n  ('normal control 8',\n   [[['HIST140', 'R1', 1], ['MATH101H', 'R2', 2], ['ECON150', 'R1', 2], ['PHYS110', 'R1', 1],\n     ['HIST140', 'R1', 1], ['CHEM120', 'R2', 1], ['CHEM120', 'R2', 2]],\n    {'MATH101': 90,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 120,\n     'BIO130': 60,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [1, [['R1', 1, 2]]])],\n [('regression: distinct durations 1',\n   [[['MATH101H', 'R2', 2], ['MATH101', 'R2', 2], ['MATH101H', 'R1', 1], ['MATH101', 'R1', 1],\n     ['HIST140', 'R2', 0]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 60,\n     'CHEM120': 90,\n     'BIO130': 60,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [0, []]),\n  ('regression variant: distinct durations 2',\n   [[['MATH101H', 'R1', 0], ['CHEM120', 'R1', 0], ['ECON150', 'R2', 1], ['PHYS110', 'R1', 0]],\n    {'MATH101': 90,\n     'MATH101H': 60,\n     'PHYS110': 120,\n     'CHEM120': 60,\n     'BIO130': 60,\n     'HIST140': 60,\n     'ECON150': 90}],\n   [1, [['R1', 0, 2]]]),\n  ('partial repair guard 3',\n   [[['CHEM120', 'R1', 1], ['BIO130', 'R2', 2], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1],\n     ['PHYS110', 'R2', 2], ['MATH101', 'R2', 2], ['HIST140', 'R2', 1]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 60,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 60,\n     'ECON150': 90}],\n   [3, [['R2', 1, 2], ['R2', 2, 3]]]),\n  ('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),\n  ('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),\n  ('normal control 6',\n   [[['CHEM120', 'R1', 0], ['HIST140', 'R1', 1], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 2]],\n    {'MATH101': 120,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [1, [['R1', 1, 2]]]),\n  ('normal control 7',\n   [[['PHYS110', 'R1', 1], ['MATH101H', 'R2', 1], ['HIST140', 'R1', 2]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 120,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [0, []]),\n  ('normal control 8',\n   [[['BIO130', 'R2', 0], ['BIO130', 'R1', 0], ['ECON150', 'R2', 1], ['MATH101H', 'R1', 2],\n     ['PHYS110', 'R1', 0], ['CHEM120', 'R1', 0], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1]],\n    {'MATH101': 120,\n     'MATH101H': 120,\n     'PHYS110': 120,\n     'CHEM120': 60,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 120}],\n   [2, [['R1', 0, 3]]])]]\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"},"fixed":{"sha256":"a7058e7f87c94d7876d30dccfb7f346cc83c24a96eb0430f6ae5aa3f03d2b78a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(assign, dur):\n    groups = {}\n    for e, r, p in assign:\n        groups.setdefault((r, p), set()).add(dur[e])\n    bad = []\n    total = 0\n    for (r, p), ds in sorted(groups.items()):\n        if len(ds) > 1:\n            bad.append([r, p, len(ds)])\n            total += len(ds) - 1\n    return [total, bad]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: distinct durations 1', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),\n  ('regression variant: distinct durations 2',\n   [[['MATH101', 'R1', 1], ['PHYS110', 'R1', 0], ['MATH101', 'R1', 2], ['PHYS110', 'R1', 0],\n     ['BIO130', 'R2', 1], ['BIO130', 'R1', 0], ['MATH101H', 'R2', 1]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 90,\n     'BIO130': 60,\n     'HIST140': 90,\n     'ECON150': 120}],\n   [2, [['R1', 0, 2], ['R2', 1, 2]]]),\n  ('partial repair guard 3',\n   [[['HIST140', 'R2', 1], ['BIO130', 'R2', 1], ['MATH101', 'R1', 2], ['MATH101', 'R2', 1],\n     ['MATH101', 'R1', 2], ['CHEM120', 'R1', 1]],\n    {'MATH101': 120,\n     'MATH101H': 90,\n     'PHYS110': 60,\n     'CHEM120': 120,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [1, [['R2', 1, 2]]]),\n  ('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),\n  ('normal control 5',\n   [[['CHEM120', 'R1', 2], ['ECON150', 'R1', 0]],\n    {'MATH101': 60,\n     'MATH101H': 90,\n     'PHYS110': 90,\n     'CHEM120': 60,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [0, []]),\n  ('normal control 6',\n   [[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1], ['MATH101', 'R2', 0],\n     ['CHEM120', 'R2', 2], ['HIST140', 'R1', 0]],\n    {'MATH101': 60,\n     'MATH101H': 60,\n     'PHYS110': 60,\n     'CHEM120': 90,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 60}],\n   [1, [['R2', 2, 2]]]),\n  ('normal control 7',\n   [[['MATH101H', 'R1', 1], ['PHYS110', 'R2', 0]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 90,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [0, []]),\n  ('normal control 8',\n   [[['BIO130', 'R2', 1], ['MATH101', 'R2', 1], ['HIST140', 'R2', 1], ['PHYS110', 'R1', 1],\n     ['HIST140', 'R1', 1]],\n    {'MATH101': 90,\n     'MATH101H': 60,\n     'PHYS110': 60,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [2, [['R1', 1, 2], ['R2', 1, 2]]])],\n [('regression: distinct durations 1',\n   [[['MATH101', 'R2', 1], ['MATH101', 'R2', 1], ['ECON150', 'R1', 1], ['MATH101H', 'R1', 2]],\n    {'MATH101': 60,\n     'MATH101H': 60,\n     'PHYS110': 120,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 60}],\n   [0, []]),\n  ('regression variant: distinct durations 2',\n   [[['CHEM120', 'R2', 0], ['ECON150', 'R2', 1], ['PHYS110', 'R2', 1], ['ECON150', 'R1', 2],\n     ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 1], ['MATH101H', 'R2', 1]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 120,\n     'CHEM120': 60,\n     'BIO130': 60,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [1, [['R2', 1, 2]]]),\n  ('partial repair guard 3',\n   [[['ECON150', 'R1', 0], ['ECON150', 'R1', 1], ['BIO130', 'R1', 0], ['CHEM120', 'R2', 2],\n     ['BIO130', 'R1', 0]],\n    {'MATH101': 120,\n     'MATH101H': 60,\n     'PHYS110': 120,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [1, [['R1', 0, 2]]]),\n  ('boundary control 4', [[['A', 'R1', 0], ['B', 'R2', 0]], {'A': 60, 'B': 90}], [0, []]),\n  ('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),\n  ('normal control 6',\n   [[['MATH101H', 'R1', 1], ['ECON150', 'R1', 2], ['BIO130', 'R1', 0], ['MATH101H', 'R1', 2],\n     ['BIO130', 'R2', 1]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 90,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 120}],\n   [1, [['R1', 2, 2]]]),\n  ('normal control 7',\n   [[['CHEM120', 'R2', 2], ['MATH101H', 'R1', 2], ['HIST140', 'R2', 1], ['MATH101H', 'R2', 2]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 120,\n     'CHEM120': 90,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 120}],\n   [1, [['R2', 2, 2]]]),\n  ('normal control 8',\n   [[['PHYS110', 'R1', 1], ['BIO130', 'R1', 1]],\n    {'MATH101': 120,\n     'MATH101H': 90,\n     'PHYS110': 90,\n     'CHEM120': 120,\n     'BIO130': 60,\n     'HIST140': 120,\n     'ECON150': 60}],\n   [1, [['R1', 1, 2]]])],\n [('regression: distinct durations 1',\n   [[['BIO130', 'R2', 2], ['PHYS110', 'R2', 2], ['MATH101', 'R1', 1], ['BIO130', 'R2', 2]],\n    {'MATH101': 120,\n     'MATH101H': 60,\n     'PHYS110': 120,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [0, []]),\n  ('regression variant: distinct durations 2',\n   [[['MATH101H', 'R2', 0], ['HIST140', 'R2', 2], ['PHYS110', 'R1', 2], ['MATH101H', 'R2', 0],\n     ['ECON150', 'R2', 2], ['ECON150', 'R1', 0], ['PHYS110', 'R1', 2]],\n    {'MATH101': 90,\n     'MATH101H': 60,\n     'PHYS110': 90,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [1, [['R2', 2, 2]]]),\n  ('partial repair guard 3',\n   [[['BIO130', 'R2', 1], ['MATH101', 'R2', 1], ['HIST140', 'R2', 1], ['PHYS110', 'R1', 1],\n     ['HIST140', 'R1', 1]],\n    {'MATH101': 90,\n     'MATH101H': 60,\n     'PHYS110': 60,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [2, [['R1', 1, 2], ['R2', 1, 2]]]),\n  ('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 0], ['C', 'R1', 0]], {'A': 60, 'B': 90, 'C': 120}],\n   [2, [['R1', 0, 3]]]),\n  ('boundary control 5', [[['A', 'R1', 0], ['B', 'R2', 0]], {'A': 60, 'B': 90}], [0, []]),\n  ('normal control 6',\n   [[['MATH101H', 'R1', 1], ['HIST140', 'R1', 0], ['ECON150', 'R2', 0], ['ECON150', 'R1', 2],\n     ['PHYS110', 'R2', 2], ['MATH101H', 'R2', 1]],\n    {'MATH101': 90,\n     'MATH101H': 120,\n     'PHYS110': 60,\n     'CHEM120': 120,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [0, []]),\n  ('normal control 7',\n   [[['CHEM120', 'R2', 1], ['HIST140', 'R2', 2], ['ECON150', 'R2', 1], ['ECON150', 'R1', 2]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 60,\n     'CHEM120': 120,\n     'BIO130': 90,\n     'HIST140': 90,\n     'ECON150': 120}],\n   [0, []]),\n  ('normal control 8',\n   [[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1], ['MATH101', 'R2', 0],\n     ['CHEM120', 'R2', 2], ['HIST140', 'R1', 0]],\n    {'MATH101': 60,\n     'MATH101H': 60,\n     'PHYS110': 60,\n     'CHEM120': 90,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 60}],\n   [1, [['R2', 2, 2]]])],\n [('regression: distinct durations 1',\n   [[['CHEM120', 'R2', 0], ['PHYS110', 'R1', 0], ['MATH101', 'R2', 2], ['BIO130', 'R1', 0],\n     ['CHEM120', 'R2', 2], ['ECON150', 'R2', 2], ['BIO130', 'R2', 2]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 120,\n     'CHEM120': 90,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 120}],\n   [3, [['R1', 0, 2], ['R2', 2, 3]]]),\n  ('regression variant: distinct durations 2',\n   [[['HIST140', 'R1', 2], ['PHYS110', 'R2', 0], ['PHYS110', 'R2', 0], ['CHEM120', 'R2', 0],\n     ['MATH101', 'R2', 0], ['BIO130', 'R2', 1], ['MATH101H', 'R2', 0]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 60,\n     'ECON150': 120}],\n   [2, [['R2', 0, 3]]]),\n  ('partial repair guard 3',\n   [[['ECON150', 'R1', 0], ['MATH101H', 'R1', 2], ['CHEM120', 'R2', 2], ['ECON150', 'R1', 2],\n     ['CHEM120', 'R1', 2], ['CHEM120', 'R1', 0], ['ECON150', 'R1', 0], ['ECON150', 'R2', 0]],\n    {'MATH101': 60,\n     'MATH101H': 60,\n     'PHYS110': 120,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [1, [['R1', 2, 2]]]),\n  ('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),\n  ('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 0], ['C', 'R1', 0]], {'A': 60, 'B': 90, 'C': 120}],\n   [2, [['R1', 0, 3]]]),\n  ('normal control 6',\n   [[['MATH101', 'R1', 2], ['ECON150', 'R1', 1], ['BIO130', 'R2', 1], ['HIST140', 'R2', 0],\n     ['PHYS110', 'R1', 0], ['ECON150', 'R2', 2], ['MATH101H', 'R1', 1]],\n    {'MATH101': 120,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 60,\n     'BIO130': 60,\n     'HIST140': 90,\n     'ECON150': 90}],\n   [1, [['R1', 1, 2]]]),\n  ('normal control 7',\n   [[['MATH101H', 'R2', 1], ['HIST140', 'R2', 2], ['PHYS110', 'R2', 1], ['ECON150', 'R2', 0],\n     ['HIST140', 'R2', 2], ['HIST140', 'R1', 2], ['CHEM120', 'R1', 1]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 120,\n     'CHEM120': 120,\n     'BIO130': 90,\n     'HIST140': 90,\n     'ECON150': 60}],\n   [0, []]),\n  ('normal control 8',\n   [[['HIST140', 'R1', 1], ['MATH101H', 'R2', 2], ['ECON150', 'R1', 2], ['PHYS110', 'R1', 1],\n     ['HIST140', 'R1', 1], ['CHEM120', 'R2', 1], ['CHEM120', 'R2', 2]],\n    {'MATH101': 90,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 120,\n     'BIO130': 60,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [1, [['R1', 1, 2]]])],\n [('regression: distinct durations 1',\n   [[['MATH101H', 'R2', 2], ['MATH101', 'R2', 2], ['MATH101H', 'R1', 1], ['MATH101', 'R1', 1],\n     ['HIST140', 'R2', 0]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 60,\n     'CHEM120': 90,\n     'BIO130': 60,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [0, []]),\n  ('regression variant: distinct durations 2',\n   [[['MATH101H', 'R1', 0], ['CHEM120', 'R1', 0], ['ECON150', 'R2', 1], ['PHYS110', 'R1', 0]],\n    {'MATH101': 90,\n     'MATH101H': 60,\n     'PHYS110': 120,\n     'CHEM120': 60,\n     'BIO130': 60,\n     'HIST140': 60,\n     'ECON150': 90}],\n   [1, [['R1', 0, 2]]]),\n  ('partial repair guard 3',\n   [[['CHEM120', 'R1', 1], ['BIO130', 'R2', 2], ['CHEM120', 'R2', 1], ['BIO130', 'R2', 1],\n     ['PHYS110', 'R2', 2], ['MATH101', 'R2', 2], ['HIST140', 'R2', 1]],\n    {'MATH101': 90,\n     'MATH101H': 90,\n     'PHYS110': 60,\n     'CHEM120': 60,\n     'BIO130': 120,\n     'HIST140': 60,\n     'ECON150': 90}],\n   [3, [['R2', 1, 2], ['R2', 2, 3]]]),\n  ('boundary control 4', [[['A', 'R1', 0], ['B', 'R1', 1]], {'A': 60, 'B': 90}], [0, []]),\n  ('boundary control 5', [[['A', 'R1', 0], ['B', 'R1', 0]], {'A': 60, 'B': 60}], [0, []]),\n  ('normal control 6',\n   [[['CHEM120', 'R1', 0], ['HIST140', 'R1', 1], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 2]],\n    {'MATH101': 120,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 90,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [1, [['R1', 1, 2]]]),\n  ('normal control 7',\n   [[['PHYS110', 'R1', 1], ['MATH101H', 'R2', 1], ['HIST140', 'R1', 2]],\n    {'MATH101': 60,\n     'MATH101H': 120,\n     'PHYS110': 90,\n     'CHEM120': 120,\n     'BIO130': 120,\n     'HIST140': 120,\n     'ECON150': 90}],\n   [0, []]),\n  ('normal control 8',\n   [[['BIO130', 'R2', 0], ['BIO130', 'R1', 0], ['ECON150', 'R2', 1], ['MATH101H', 'R1', 2],\n     ['PHYS110', 'R1', 0], ['CHEM120', 'R1', 0], ['PHYS110', 'R2', 2], ['PHYS110', 'R2', 1]],\n    {'MATH101': 120,\n     'MATH101H': 120,\n     'PHYS110': 120,\n     'CHEM120': 60,\n     'BIO130': 90,\n     'HIST140': 120,\n     'ECON150': 120}],\n   [2, [['R1', 0, 3]]])]]\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-mixed-duration-penalty-distinct-durations","generated_at":"2026-09-29T14:52:05.534393+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Mixed durations in one room disrupt invigilation; the penalty is defined over distinct durations.","repair":"Count distinct durations per room-period.","root_cause":"Durations are collected per exam rather than as distinct values.","sha256":"93ac82495f85ae2914dfeae90a8713eedb9cdf3f81e9f60b239abbd5e46f11ec","title":"Same-duration exams sharing a room penalised · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.711,"exit_code":1,"observations":[{"actual":[0,[]],"check":"regression: distinct durations 1","expected":[0,[]],"passed":true},{"actual":[3,[["R1",0,3],["R2",1,2]]],"check":"regression variant: distinct durations 2","expected":[2,[["R1",0,2],["R2",1,2]]],"passed":false},{"actual":[2,[["R2",1,3]]],"check":"partial repair guard 3","expected":[1,[["R2",1,2]]],"passed":false},{"actual":[0,[]],"check":"boundary control 4","expected":[0,[]],"passed":true},{"actual":[0,[]],"check":"normal control 5","expected":[0,[]],"passed":true},{"actual":[1,[["R2",2,2]]],"check":"normal control 6","expected":[1,[["R2",2,2]]],"passed":true},{"actual":[0,[]],"check":"normal control 7","expected":[0,[]],"passed":true},{"actual":[3,[["R1",1,2],["R2",1,3]]],"check":"normal control 8","expected":[2,[["R1",1,2],["R2",1,2]]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: distinct durations 1\", \"actual\": [0, []], \"expected\": [0, []], \"passed\": true}, {\"check\": \"regression variant: distinct durations 2\", \"actual\": [3, [[\"R1\", 0, 3], [\"R2\", 1, 2]]], \"expected\": [2, [[\"R1\", 0, 2], [\"R2\", 1, 2]]], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [2, [[\"R2\", 1, 3]]], \"expected\": [1, [[\"R2\", 1, 2]]], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [0, []], \"expected\": [0, []], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [0, []], \"expected\": [0, []], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [1, [[\"R2\", 2, 2]]], \"expected\": [1, [[\"R2\", 2, 2]]], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [0, []], \"expected\": [0, []], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [3, [[\"R1\", 1, 2], [\"R2\", 1, 3]]], \"expected\": [2, [[\"R1\", 1, 2], [\"R2\", 1, 2]]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.645,"exit_code":1,"observations":[{"actual":[1,[["R1",0,2]]],"check":"regression: distinct durations 1","expected":[0,[]],"passed":false},{"actual":[3,[["R1",0,3],["R2",1,2]]],"check":"regression variant: distinct durations 2","expected":[2,[["R1",0,2],["R2",1,2]]],"passed":false},{"actual":[3,[["R1",2,2],["R2",1,3]]],"check":"partial repair guard 3","expected":[1,[["R2",1,2]]],"passed":false},{"actual":[0,[]],"check":"boundary control 4","expected":[0,[]],"passed":true},{"actual":[0,[]],"check":"normal control 5","expected":[0,[]],"passed":true},{"actual":[1,[["R2",2,2]]],"check":"normal control 6","expected":[1,[["R2",2,2]]],"passed":true},{"actual":[0,[]],"check":"normal control 7","expected":[0,[]],"passed":true},{"actual":[3,[["R1",1,2],["R2",1,3]]],"check":"normal control 8","expected":[2,[["R1",1,2],["R2",1,2]]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: distinct durations 1\", \"actual\": [1, [[\"R1\", 0, 2]]], \"expected\": [0, []], \"passed\": false}, {\"check\": \"regression variant: distinct durations 2\", \"actual\": [3, [[\"R1\", 0, 3], [\"R2\", 1, 2]]], \"expected\": [2, [[\"R1\", 0, 2], [\"R2\", 1, 2]]], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [3, [[\"R1\", 2, 2], [\"R2\", 1, 3]]], \"expected\": [1, [[\"R2\", 1, 2]]], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [0, []], \"expected\": [0, []], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [0, []], \"expected\": [0, []], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [1, [[\"R2\", 2, 2]]], \"expected\": [1, [[\"R2\", 2, 2]]], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [0, []], \"expected\": [0, []], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [3, [[\"R1\", 1, 2], [\"R2\", 1, 3]]], \"expected\": [2, [[\"R1\", 1, 2], [\"R2\", 1, 2]]], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.948,"exit_code":0,"observations":[{"actual":[0,[]],"check":"regression: distinct durations 1","expected":[0,[]],"passed":true},{"actual":[2,[["R1",0,2],["R2",1,2]]],"check":"regression variant: distinct durations 2","expected":[2,[["R1",0,2],["R2",1,2]]],"passed":true},{"actual":[1,[["R2",1,2]]],"check":"partial repair guard 3","expected":[1,[["R2",1,2]]],"passed":true},{"actual":[0,[]],"check":"boundary control 4","expected":[0,[]],"passed":true},{"actual":[0,[]],"check":"normal control 5","expected":[0,[]],"passed":true},{"actual":[1,[["R2",2,2]]],"check":"normal control 6","expected":[1,[["R2",2,2]]],"passed":true},{"actual":[0,[]],"check":"normal control 7","expected":[0,[]],"passed":true},{"actual":[2,[["R1",1,2],["R2",1,2]]],"check":"normal control 8","expected":[2,[["R1",1,2],["R2",1,2]]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: distinct durations 1\", \"actual\": [0, []], \"expected\": [0, []], \"passed\": true}, {\"check\": \"regression variant: distinct durations 2\", \"actual\": [2, [[\"R1\", 0, 2], [\"R2\", 1, 2]]], \"expected\": [2, [[\"R1\", 0, 2], [\"R2\", 1, 2]]], \"passed\": true}, {\"check\": \"partial repair guard 3\", \"actual\": [1, [[\"R2\", 1, 2]]], \"expected\": [1, [[\"R2\", 1, 2]]], \"passed\": true}, {\"check\": \"boundary control 4\", \"actual\": [0, []], \"expected\": [0, []], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [0, []], \"expected\": [0, []], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [1, [[\"R2\", 2, 2]]], \"expected\": [1, [[\"R2\", 2, 2]]], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [0, []], \"expected\": [0, []], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [2, [[\"R1\", 1, 2], [\"R2\", 1, 2]]], \"expected\": [2, [[\"R1\", 1, 2], [\"R2\", 1, 2]]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}