{"abstract":"Clashing pairs add 32 to the soft cost.","category":"Exam timetabling constraints","checks":8,"contract":"enrol [student, exam] rows (may repeat) and exam periods. For each student, each pair of distinct exams d = 1..5 periods apart costs 2^(5-d). Return [total, number of students, total/students as a reduced fraction string].","evaluation_group":"w2-exam-timetabling-constraints-carter-proximity-cost","failed_approach":"An exclusive upper bound drops pairs five periods apart.","family":"w2-exam-timetabling-constraints-carter-proximity-cost-proximity-window","id":"FA-94421","implementations":{"attempt":{"sha256":"7e1a22d5eaa4589fad65ddfd1c8283e4427c164fd90bdcdd7b3032556fb72df8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(enrol, period):\n    by = {}\n    for st, ex in enrol:\n        by.setdefault(st, set()).add(ex)\n    total = 0\n    for st, exs in by.items():\n        ps = sorted(period[e] for e in exs)\n        for i in range(len(ps)):\n            for j in range(i + 1, len(ps)):\n                d = ps[j] - ps[i]\n                if 1 <= d < 5:\n                    total += 2 ** (5 - d)\n    n = len(by)\n    return [total, n, str(Fraction(total, n)) if n else '0']\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: proximity window 1', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}],\n   [0, 1, '0']),\n  ('regression variant: proximity window 2',\n   [[['s4', 'CHEM120'], ['s2', 'BIO130'], ['s3', 'MATH101H'], ['s5', 'MATH101H'], ['s1', 'ECON150'],\n     ['s5', 'CHEM120'], ['s1', 'MATH101'], ['s1', 'HIST140'], ['s4', 'MATH101H'], ['s3', 'CHEM120'],\n     ['s1', 'PHYS110'], ['s2', 'PHYS110'], ['s4', 'HIST140']],\n    {'MATH101': 0, 'MATH101H': 2, 'PHYS110': 7, 'CHEM120': 2, 'BIO130': 4, 'HIST140': 7, 'ECON150': 3}],\n   [14, 5, '14/5']),\n  ('partial repair guard 3',\n   [[['s2', 'HIST140'], ['s2', 'BIO130'], ['s3', 'ECON150'], ['s3', 'MATH101H'], ['s3', 'CHEM120'],\n     ['s4', 'HIST140'], ['s2', 'PHYS110'], ['s3', 'BIO130']],\n    {'MATH101': 3, 'MATH101H': 6, 'PHYS110': 7, 'CHEM120': 1, 'BIO130': 5, 'HIST140': 6, 'ECON150': 6}],\n   [76, 3, '76/3']),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),\n  ('normal control 5',\n   [[['s1', 'ECON150'], ['s5', 'BIO130'], ['s5', 'PHYS110'], ['s5', 'HIST140'], ['s3', 'HIST140'],\n     ['s2', 'PHYS110'], ['s2', 'HIST140'], ['s5', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'HIST140'],\n     ['s2', 'BIO130'], ['s2', 'CHEM120']],\n    {'MATH101': 7, 'MATH101H': 5, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 7, 'HIST140': 0, 'ECON150': 2}],\n   [49, 4, '49/4']),\n  ('normal control 6',\n   [[['s5', 'ECON150'], ['s2', 'HIST140'], ['s3', 'MATH101'], ['s3', 'PHYS110'], ['s3', 'MATH101'],\n     ['s1', 'HIST140'], ['s3', 'MATH101H'], ['s4', 'CHEM120'], ['s4', 'MATH101'], ['s5', 'PHYS110'],\n     ['s5', 'CHEM120'], ['s5', 'MATH101'], ['s2', 'MATH101'], ['s4', 'BIO130'], ['s4', 'PHYS110']],\n    {'MATH101': 5, 'MATH101H': 1, 'PHYS110': 3, 'CHEM120': 4, 'BIO130': 4, 'HIST140': 4, 'ECON150': 0}],\n   [153, 5, '153/5']),\n  ('normal control 7',\n   [[['s3', 'CHEM120'], ['s4', 'CHEM120'], ['s4', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'PHYS110'],\n     ['s3', 'CHEM120']],\n    {'MATH101': 1, 'MATH101H': 6, 'PHYS110': 4, 'CHEM120': 7, 'BIO130': 1, 'HIST140': 7, 'ECON150': 5}],\n   [8, 3, '8/3']),\n  ('normal control 8',\n   [[['s4', 'BIO130'], ['s4', 'MATH101H'], ['s2', 'MATH101H'], ['s1', 'CHEM120'], ['s2', 'MATH101'],\n     ['s1', 'MATH101'], ['s5', 'CHEM120'], ['s4', 'CHEM120'], ['s4', 'HIST140'], ['s1', 'MATH101']],\n    {'MATH101': 4, 'MATH101H': 2, 'PHYS110': 5, 'CHEM120': 1, 'BIO130': 4, 'HIST140': 0, 'ECON150': 3}],\n   [66, 4, '33/2'])],\n [('regression: proximity window 1',\n   [[['s1', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130']],\n    {'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 1}],\n   [32, 2, '16']),\n  ('regression variant: proximity window 2',\n   [[['s2', 'CHEM120'], ['s2', 'ECON150'], ['s2', 'PHYS110'], ['s1', 'MATH101H'], ['s1', 'HIST140']],\n    {'MATH101': 6, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 5, 'BIO130': 6, 'HIST140': 5, 'ECON150': 1}],\n   [19, 2, '19/2']),\n  ('partial repair guard 3',\n   [[['s4', 'MATH101'], ['s3', 'PHYS110'], ['s1', 'CHEM120'], ['s3', 'MATH101'], ['s5', 'CHEM120'],\n     ['s1', 'MATH101H'], ['s4', 'MATH101H'], ['s4', 'ECON150']],\n    {'MATH101': 3, 'MATH101H': 7, 'PHYS110': 7, 'CHEM120': 3, 'BIO130': 4, 'HIST140': 2, 'ECON150': 2}],\n   [23, 4, '23/4']),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 1}],\n   [16, 1, '16']),\n  ('normal control 5',\n   [[['s5', 'ECON150'], ['s5', 'MATH101'], ['s4', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'MATH101H']],\n    {'MATH101': 6, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 4, 'BIO130': 6, 'HIST140': 1, 'ECON150': 3}],\n   [28, 2, '14']),\n  ('normal control 6',\n   [[['s4', 'BIO130'], ['s4', 'HIST140'], ['s3', 'MATH101H'], ['s5', 'HIST140'], ['s4', 'PHYS110']],\n    {'MATH101': 4, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 6, 'HIST140': 5, 'ECON150': 4}],\n   [17, 3, '17/3']),\n  ('normal control 7',\n   [[['s4', 'MATH101H'], ['s4', 'BIO130'], ['s2', 'MATH101H'], ['s4', 'PHYS110'], ['s5', 'BIO130'],\n     ['s4', 'MATH101'], ['s2', 'HIST140'], ['s2', 'BIO130']],\n    {'MATH101': 4, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 5, 'BIO130': 0, 'HIST140': 6, 'ECON150': 5}],\n   [39, 3, '13']),\n  ('normal control 8',\n   [[['s4', 'MATH101'], ['s4', 'PHYS110']],\n    {'MATH101': 5, 'MATH101H': 4, 'PHYS110': 5, 'CHEM120': 2, 'BIO130': 1, 'HIST140': 4, 'ECON150': 2}],\n   [0, 1, '0'])],\n [('regression: proximity window 1',\n   [[['s3', 'CHEM120'], ['s1', 'MATH101'], ['s2', 'CHEM120'], ['s5', 'HIST140'], ['s5', 'BIO130'],\n     ['s1', 'HIST140'], ['s1', 'CHEM120'], ['s1', 'BIO130'], ['s3', 'BIO130'], ['s2', 'MATH101H'],\n     ['s2', 'MATH101'], ['s2', 'HIST140']],\n    {'MATH101': 2, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 5, 'BIO130': 4, 'HIST140': 0, 'ECON150': 0}],\n   [79, 4, '79/4']),\n  ('regression variant: proximity window 2',\n   [[['s3', 'MATH101H'], ['s3', 'ECON150'], ['s5', 'BIO130'], ['s2', 'HIST140'], ['s1', 'MATH101'],\n     ['s5', 'MATH101'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s1', 'PHYS110'], ['s5', 'MATH101H'],\n     ['s5', 'ECON150'], ['s3', 'PHYS110']],\n    {'MATH101': 6, 'MATH101H': 3, 'PHYS110': 6, 'CHEM120': 4, 'BIO130': 3, 'HIST140': 5, 'ECON150': 7}],\n   [94, 4, '47/2']),\n  ('partial repair guard 3',\n   [[['s3', 'MATH101H'], ['s1', 'PHYS110'], ['s3', 'BIO130'], ['s3', 'HIST140'], ['s4', 'BIO130'],\n     ['s2', 'ECON150'], ['s5', 'PHYS110'], ['s1', 'CHEM120'], ['s1', 'HIST140'], ['s2', 'PHYS110'],\n     ['s5', 'MATH101H'], ['s3', 'PHYS110'], ['s1', 'ECON150']],\n    {'MATH101': 7, 'MATH101H': 3, 'PHYS110': 1, 'CHEM120': 4, 'BIO130': 7, 'HIST140': 6, 'ECON150': 2}],\n   [94, 5, '94/5']),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}], [0, 1, '0']),\n  ('boundary control 5', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),\n  ('normal control 6',\n   [[['s3', 'MATH101H'], ['s2', 'MATH101'], ['s1', 'MATH101'], ['s4', 'CHEM120'], ['s4', 'PHYS110'],\n     ['s4', 'HIST140'], ['s2', 'HIST140'], ['s4', 'HIST140'], ['s1', 'HIST140'], ['s3', 'MATH101'],\n     ['s4', 'ECON150']],\n    {'MATH101': 4, 'MATH101H': 5, 'PHYS110': 4, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 2, 'ECON150': 0}],\n   [86, 4, '43/2']),\n  ('normal control 7',\n   [[['s5', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'BIO130'], ['s5', 'ECON150'], ['s1', 'MATH101H'],\n     ['s4', 'ECON150'], ['s5', 'MATH101'], ['s1', 'HIST140'], ['s1', 'MATH101'], ['s4', 'BIO130'],\n     ['s4', 'MATH101H'], ['s2', 'MATH101'], ['s4', 'MATH101'], ['s1', 'CHEM120'], ['s2', 'CHEM120'],\n     ['s2', 'PHYS110']],\n    {'MATH101': 4, 'MATH101H': 1, 'PHYS110': 1, 'CHEM120': 5, 'BIO130': 0, 'HIST140': 6, 'ECON150': 2}],\n   [190, 4, '95/2']),\n  ('normal control 8',\n   [[['s5', 'ECON150'], ['s5', 'MATH101H'], ['s2', 'MATH101H'], ['s2', 'MATH101'], ['s4', 'BIO130'],\n     ['s3', 'CHEM120'], ['s2', 'MATH101'], ['s4', 'PHYS110'], ['s2', 'ECON150'], ['s3', 'ECON150']],\n    {'MATH101': 1, 'MATH101H': 3, 'PHYS110': 4, 'CHEM120': 2, 'BIO130': 6, 'HIST140': 4, 'ECON150': 5}],\n   [38, 4, '19/2'])],\n [('regression: proximity window 1',\n   [[['s1', 'MATH101H'], ['s2', 'BIO130'], ['s1', 'ECON150'], ['s1', 'ECON150'], ['s2', 'ECON150'],\n     ['s3', 'MATH101'], ['s4', 'MATH101H'], ['s2', 'MATH101H'], ['s4', 'ECON150'], ['s2', 'PHYS110']],\n    {'MATH101': 6, 'MATH101H': 7, 'PHYS110': 4, 'CHEM120': 2, 'BIO130': 4, 'HIST140': 3, 'ECON150': 4}],\n   [20, 4, '5']),\n  ('regression variant: proximity window 2',\n   [[['s4', 'MATH101H'], ['s3', 'MATH101'], ['s5', 'MATH101'], ['s3', 'BIO130'], ['s5', 'MATH101H'],\n     ['s2', 'HIST140'], ['s5', 'HIST140'], ['s2', 'CHEM120'], ['s4', 'PHYS110'], ['s4', 'ECON150'],\n     ['s1', 'MATH101'], ['s1', 'MATH101H']],\n    {'MATH101': 2, 'MATH101H': 7, 'PHYS110': 5, 'CHEM120': 7, 'BIO130': 2, 'HIST140': 2, 'ECON150': 6}],\n   [44, 5, '44/5']),\n  ('partial repair guard 3',\n   [[['s5', 'BIO130'], ['s5', 'MATH101H'], ['s3', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'PHYS110'],\n     ['s2', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'PHYS110'], ['s3', 'CHEM120'], ['s1', 'HIST140'],\n     ['s2', 'BIO130'], ['s4', 'ECON150'], ['s2', 'PHYS110']],\n    {'MATH101': 6, 'MATH101H': 0, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 3, 'ECON150': 5}],\n   [91, 5, '91/5']),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 1}],\n   [16, 1, '16']),\n  ('boundary control 5',\n   [[['s1', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130']],\n    {'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 1}],\n   [32, 2, '16']),\n  ('normal control 6',\n   [[['s1', 'CHEM120'], ['s2', 'HIST140'], ['s1', 'HIST140'], ['s2', 'ECON150'], ['s4', 'PHYS110'],\n     ['s4', 'MATH101H'], ['s3', 'PHYS110'], ['s3', 'CHEM120'], ['s5', 'ECON150'], ['s3', 'CHEM120'],\n     ['s3', 'HIST140'], ['s3', 'MATH101'], ['s4', 'MATH101'], ['s4', 'HIST140']],\n    {'MATH101': 7, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 4, 'BIO130': 3, 'HIST140': 4, 'ECON150': 4}],\n   [40, 5, '8']),\n  ('normal control 7',\n   [[['s4', 'MATH101'], ['s4', 'PHYS110'], ['s5', 'PHYS110'], ['s3', 'PHYS110'], ['s2', 'CHEM120'],\n     ['s3', 'CHEM120'], ['s5', 'CHEM120']],\n    {'MATH101': 1, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 0, 'ECON150': 1}],\n   [16, 4, '4']),\n  ('normal control 8',\n   [[['s5', 'MATH101H'], ['s5', 'PHYS110'], ['s3', 'ECON150'], ['s3', 'PHYS110']],\n    {'MATH101': 5, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 6, 'BIO130': 1, 'HIST140': 6, 'ECON150': 7}],\n   [18, 2, '9'])],\n [('regression: proximity window 1',\n   [[['s5', 'PHYS110'], ['s4', 'ECON150'], ['s3', 'MATH101'], ['s3', 'PHYS110'], ['s2', 'CHEM120'],\n     ['s2', 'ECON150'], ['s4', 'MATH101H'], ['s5', 'BIO130'], ['s4', 'HIST140'], ['s3', 'BIO130'],\n     ['s4', 'PHYS110'], ['s3', 'ECON150'], ['s2', 'HIST140'], ['s5', 'MATH101'], ['s1', 'HIST140']],\n    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 0, 'CHEM120': 6, 'BIO130': 0, 'HIST140': 0, 'ECON150': 2}],\n   [82, 5, '82/5']),\n  ('regression variant: proximity window 2',\n   [[['s2', 'CHEM120'], ['s4', 'ECON150'], ['s4', 'CHEM120'], ['s4', 'HIST140'], ['s5', 'MATH101H'],\n     ['s2', 'MATH101'], ['s5', 'ECON150'], ['s2', 'PHYS110'], ['s2', 'ECON150']],\n    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 5, 'CHEM120': 6, 'BIO130': 2, 'HIST140': 4, 'ECON150': 5}],\n   [100, 3, '100/3']),\n  ('partial repair guard 3',\n   [[['s1', 'MATH101H'], ['s5', 'HIST140'], ['s5', 'BIO130'], ['s1', 'MATH101'], ['s5', 'BIO130'],\n     ['s5', 'MATH101']],\n    {'MATH101': 7, 'MATH101H': 2, 'PHYS110': 7, 'CHEM120': 5, 'BIO130': 7, 'HIST140': 0, 'ECON150': 7}],\n   [1, 2, '1/2']),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}], [0, 1, '0']),\n  ('boundary control 5', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),\n  ('normal control 6',\n   [[['s1', 'ECON150'], ['s5', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'HIST140'], ['s4', 'MATH101'],\n     ['s4', 'MATH101'], ['s1', 'PHYS110']],\n    {'MATH101': 1, 'MATH101H': 4, 'PHYS110': 6, 'CHEM120': 4, 'BIO130': 5, 'HIST140': 2, 'ECON150': 3}],\n   [30, 3, '10']),\n  ('normal control 7',\n   [[['s4', 'BIO130'], ['s4', 'CHEM120'], ['s4', 'ECON150']],\n    {'MATH101': 4, 'MATH101H': 4, 'PHYS110': 5, 'CHEM120': 4, 'BIO130': 4, 'HIST140': 1, 'ECON150': 5}],\n   [32, 1, '32']),\n  ('normal control 8',\n   [[['s3', 'HIST140'], ['s3', 'MATH101'], ['s4', 'BIO130'], ['s4', 'MATH101'], ['s4', 'CHEM120'],\n     ['s4', 'MATH101'], ['s1', 'HIST140'], ['s1', 'ECON150'], ['s1', 'MATH101'], ['s3', 'MATH101H'],\n     ['s3', 'CHEM120']],\n    {'MATH101': 6, 'MATH101H': 3, 'PHYS110': 7, 'CHEM120': 6, 'BIO130': 0, 'HIST140': 5, 'ECON150': 3}],\n   [76, 3, '76/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":"f900e8dfa4b2081f2037a1388dbca60f61f51c99938de4f11bc325bf5468f327","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(enrol, period):\n    by = {}\n    for st, ex in enrol:\n        by.setdefault(st, set()).add(ex)\n    total = 0\n    for st, exs in by.items():\n        ps = sorted(period[e] for e in exs)\n        for i in range(len(ps)):\n            for j in range(i + 1, len(ps)):\n                d = ps[j] - ps[i]\n                if 0 <= d <= 5:\n                    total += 2 ** (5 - d)\n    n = len(by)\n    return [total, n, str(Fraction(total, n)) if n else '0']\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: proximity window 1', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}],\n   [0, 1, '0']),\n  ('regression variant: proximity window 2',\n   [[['s4', 'CHEM120'], ['s2', 'BIO130'], ['s3', 'MATH101H'], ['s5', 'MATH101H'], ['s1', 'ECON150'],\n     ['s5', 'CHEM120'], ['s1', 'MATH101'], ['s1', 'HIST140'], ['s4', 'MATH101H'], ['s3', 'CHEM120'],\n     ['s1', 'PHYS110'], ['s2', 'PHYS110'], ['s4', 'HIST140']],\n    {'MATH101': 0, 'MATH101H': 2, 'PHYS110': 7, 'CHEM120': 2, 'BIO130': 4, 'HIST140': 7, 'ECON150': 3}],\n   [14, 5, '14/5']),\n  ('partial repair guard 3',\n   [[['s2', 'HIST140'], ['s2', 'BIO130'], ['s3', 'ECON150'], ['s3', 'MATH101H'], ['s3', 'CHEM120'],\n     ['s4', 'HIST140'], ['s2', 'PHYS110'], ['s3', 'BIO130']],\n    {'MATH101': 3, 'MATH101H': 6, 'PHYS110': 7, 'CHEM120': 1, 'BIO130': 5, 'HIST140': 6, 'ECON150': 6}],\n   [76, 3, '76/3']),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),\n  ('normal control 5',\n   [[['s1', 'ECON150'], ['s5', 'BIO130'], ['s5', 'PHYS110'], ['s5', 'HIST140'], ['s3', 'HIST140'],\n     ['s2', 'PHYS110'], ['s2', 'HIST140'], ['s5', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'HIST140'],\n     ['s2', 'BIO130'], ['s2', 'CHEM120']],\n    {'MATH101': 7, 'MATH101H': 5, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 7, 'HIST140': 0, 'ECON150': 2}],\n   [49, 4, '49/4']),\n  ('normal control 6',\n   [[['s5', 'ECON150'], ['s2', 'HIST140'], ['s3', 'MATH101'], ['s3', 'PHYS110'], ['s3', 'MATH101'],\n     ['s1', 'HIST140'], ['s3', 'MATH101H'], ['s4', 'CHEM120'], ['s4', 'MATH101'], ['s5', 'PHYS110'],\n     ['s5', 'CHEM120'], ['s5', 'MATH101'], ['s2', 'MATH101'], ['s4', 'BIO130'], ['s4', 'PHYS110']],\n    {'MATH101': 5, 'MATH101H': 1, 'PHYS110': 3, 'CHEM120': 4, 'BIO130': 4, 'HIST140': 4, 'ECON150': 0}],\n   [153, 5, '153/5']),\n  ('normal control 7',\n   [[['s3', 'CHEM120'], ['s4', 'CHEM120'], ['s4', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'PHYS110'],\n     ['s3', 'CHEM120']],\n    {'MATH101': 1, 'MATH101H': 6, 'PHYS110': 4, 'CHEM120': 7, 'BIO130': 1, 'HIST140': 7, 'ECON150': 5}],\n   [8, 3, '8/3']),\n  ('normal control 8',\n   [[['s4', 'BIO130'], ['s4', 'MATH101H'], ['s2', 'MATH101H'], ['s1', 'CHEM120'], ['s2', 'MATH101'],\n     ['s1', 'MATH101'], ['s5', 'CHEM120'], ['s4', 'CHEM120'], ['s4', 'HIST140'], ['s1', 'MATH101']],\n    {'MATH101': 4, 'MATH101H': 2, 'PHYS110': 5, 'CHEM120': 1, 'BIO130': 4, 'HIST140': 0, 'ECON150': 3}],\n   [66, 4, '33/2'])],\n [('regression: proximity window 1',\n   [[['s1', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130']],\n    {'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 1}],\n   [32, 2, '16']),\n  ('regression variant: proximity window 2',\n   [[['s2', 'CHEM120'], ['s2', 'ECON150'], ['s2', 'PHYS110'], ['s1', 'MATH101H'], ['s1', 'HIST140']],\n    {'MATH101': 6, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 5, 'BIO130': 6, 'HIST140': 5, 'ECON150': 1}],\n   [19, 2, '19/2']),\n  ('partial repair guard 3',\n   [[['s4', 'MATH101'], ['s3', 'PHYS110'], ['s1', 'CHEM120'], ['s3', 'MATH101'], ['s5', 'CHEM120'],\n     ['s1', 'MATH101H'], ['s4', 'MATH101H'], ['s4', 'ECON150']],\n    {'MATH101': 3, 'MATH101H': 7, 'PHYS110': 7, 'CHEM120': 3, 'BIO130': 4, 'HIST140': 2, 'ECON150': 2}],\n   [23, 4, '23/4']),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 1}],\n   [16, 1, '16']),\n  ('normal control 5',\n   [[['s5', 'ECON150'], ['s5', 'MATH101'], ['s4', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'MATH101H']],\n    {'MATH101': 6, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 4, 'BIO130': 6, 'HIST140': 1, 'ECON150': 3}],\n   [28, 2, '14']),\n  ('normal control 6',\n   [[['s4', 'BIO130'], ['s4', 'HIST140'], ['s3', 'MATH101H'], ['s5', 'HIST140'], ['s4', 'PHYS110']],\n    {'MATH101': 4, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 6, 'HIST140': 5, 'ECON150': 4}],\n   [17, 3, '17/3']),\n  ('normal control 7',\n   [[['s4', 'MATH101H'], ['s4', 'BIO130'], ['s2', 'MATH101H'], ['s4', 'PHYS110'], ['s5', 'BIO130'],\n     ['s4', 'MATH101'], ['s2', 'HIST140'], ['s2', 'BIO130']],\n    {'MATH101': 4, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 5, 'BIO130': 0, 'HIST140': 6, 'ECON150': 5}],\n   [39, 3, '13']),\n  ('normal control 8',\n   [[['s4', 'MATH101'], ['s4', 'PHYS110']],\n    {'MATH101': 5, 'MATH101H': 4, 'PHYS110': 5, 'CHEM120': 2, 'BIO130': 1, 'HIST140': 4, 'ECON150': 2}],\n   [0, 1, '0'])],\n [('regression: proximity window 1',\n   [[['s3', 'CHEM120'], ['s1', 'MATH101'], ['s2', 'CHEM120'], ['s5', 'HIST140'], ['s5', 'BIO130'],\n     ['s1', 'HIST140'], ['s1', 'CHEM120'], ['s1', 'BIO130'], ['s3', 'BIO130'], ['s2', 'MATH101H'],\n     ['s2', 'MATH101'], ['s2', 'HIST140']],\n    {'MATH101': 2, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 5, 'BIO130': 4, 'HIST140': 0, 'ECON150': 0}],\n   [79, 4, '79/4']),\n  ('regression variant: proximity window 2',\n   [[['s3', 'MATH101H'], ['s3', 'ECON150'], ['s5', 'BIO130'], ['s2', 'HIST140'], ['s1', 'MATH101'],\n     ['s5', 'MATH101'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s1', 'PHYS110'], ['s5', 'MATH101H'],\n     ['s5', 'ECON150'], ['s3', 'PHYS110']],\n    {'MATH101': 6, 'MATH101H': 3, 'PHYS110': 6, 'CHEM120': 4, 'BIO130': 3, 'HIST140': 5, 'ECON150': 7}],\n   [94, 4, '47/2']),\n  ('partial repair guard 3',\n   [[['s3', 'MATH101H'], ['s1', 'PHYS110'], ['s3', 'BIO130'], ['s3', 'HIST140'], ['s4', 'BIO130'],\n     ['s2', 'ECON150'], ['s5', 'PHYS110'], ['s1', 'CHEM120'], ['s1', 'HIST140'], ['s2', 'PHYS110'],\n     ['s5', 'MATH101H'], ['s3', 'PHYS110'], ['s1', 'ECON150']],\n    {'MATH101': 7, 'MATH101H': 3, 'PHYS110': 1, 'CHEM120': 4, 'BIO130': 7, 'HIST140': 6, 'ECON150': 2}],\n   [94, 5, '94/5']),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}], [0, 1, '0']),\n  ('boundary control 5', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),\n  ('normal control 6',\n   [[['s3', 'MATH101H'], ['s2', 'MATH101'], ['s1', 'MATH101'], ['s4', 'CHEM120'], ['s4', 'PHYS110'],\n     ['s4', 'HIST140'], ['s2', 'HIST140'], ['s4', 'HIST140'], ['s1', 'HIST140'], ['s3', 'MATH101'],\n     ['s4', 'ECON150']],\n    {'MATH101': 4, 'MATH101H': 5, 'PHYS110': 4, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 2, 'ECON150': 0}],\n   [86, 4, '43/2']),\n  ('normal control 7',\n   [[['s5', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'BIO130'], ['s5', 'ECON150'], ['s1', 'MATH101H'],\n     ['s4', 'ECON150'], ['s5', 'MATH101'], ['s1', 'HIST140'], ['s1', 'MATH101'], ['s4', 'BIO130'],\n     ['s4', 'MATH101H'], ['s2', 'MATH101'], ['s4', 'MATH101'], ['s1', 'CHEM120'], ['s2', 'CHEM120'],\n     ['s2', 'PHYS110']],\n    {'MATH101': 4, 'MATH101H': 1, 'PHYS110': 1, 'CHEM120': 5, 'BIO130': 0, 'HIST140': 6, 'ECON150': 2}],\n   [190, 4, '95/2']),\n  ('normal control 8',\n   [[['s5', 'ECON150'], ['s5', 'MATH101H'], ['s2', 'MATH101H'], ['s2', 'MATH101'], ['s4', 'BIO130'],\n     ['s3', 'CHEM120'], ['s2', 'MATH101'], ['s4', 'PHYS110'], ['s2', 'ECON150'], ['s3', 'ECON150']],\n    {'MATH101': 1, 'MATH101H': 3, 'PHYS110': 4, 'CHEM120': 2, 'BIO130': 6, 'HIST140': 4, 'ECON150': 5}],\n   [38, 4, '19/2'])],\n [('regression: proximity window 1',\n   [[['s1', 'MATH101H'], ['s2', 'BIO130'], ['s1', 'ECON150'], ['s1', 'ECON150'], ['s2', 'ECON150'],\n     ['s3', 'MATH101'], ['s4', 'MATH101H'], ['s2', 'MATH101H'], ['s4', 'ECON150'], ['s2', 'PHYS110']],\n    {'MATH101': 6, 'MATH101H': 7, 'PHYS110': 4, 'CHEM120': 2, 'BIO130': 4, 'HIST140': 3, 'ECON150': 4}],\n   [20, 4, '5']),\n  ('regression variant: proximity window 2',\n   [[['s4', 'MATH101H'], ['s3', 'MATH101'], ['s5', 'MATH101'], ['s3', 'BIO130'], ['s5', 'MATH101H'],\n     ['s2', 'HIST140'], ['s5', 'HIST140'], ['s2', 'CHEM120'], ['s4', 'PHYS110'], ['s4', 'ECON150'],\n     ['s1', 'MATH101'], ['s1', 'MATH101H']],\n    {'MATH101': 2, 'MATH101H': 7, 'PHYS110': 5, 'CHEM120': 7, 'BIO130': 2, 'HIST140': 2, 'ECON150': 6}],\n   [44, 5, '44/5']),\n  ('partial repair guard 3',\n   [[['s5', 'BIO130'], ['s5', 'MATH101H'], ['s3', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'PHYS110'],\n     ['s2', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'PHYS110'], ['s3', 'CHEM120'], ['s1', 'HIST140'],\n     ['s2', 'BIO130'], ['s4', 'ECON150'], ['s2', 'PHYS110']],\n    {'MATH101': 6, 'MATH101H': 0, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 3, 'ECON150': 5}],\n   [91, 5, '91/5']),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 1}],\n   [16, 1, '16']),\n  ('boundary control 5',\n   [[['s1', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130']],\n    {'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 1}],\n   [32, 2, '16']),\n  ('normal control 6',\n   [[['s1', 'CHEM120'], ['s2', 'HIST140'], ['s1', 'HIST140'], ['s2', 'ECON150'], ['s4', 'PHYS110'],\n     ['s4', 'MATH101H'], ['s3', 'PHYS110'], ['s3', 'CHEM120'], ['s5', 'ECON150'], ['s3', 'CHEM120'],\n     ['s3', 'HIST140'], ['s3', 'MATH101'], ['s4', 'MATH101'], ['s4', 'HIST140']],\n    {'MATH101': 7, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 4, 'BIO130': 3, 'HIST140': 4, 'ECON150': 4}],\n   [40, 5, '8']),\n  ('normal control 7',\n   [[['s4', 'MATH101'], ['s4', 'PHYS110'], ['s5', 'PHYS110'], ['s3', 'PHYS110'], ['s2', 'CHEM120'],\n     ['s3', 'CHEM120'], ['s5', 'CHEM120']],\n    {'MATH101': 1, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 0, 'ECON150': 1}],\n   [16, 4, '4']),\n  ('normal control 8',\n   [[['s5', 'MATH101H'], ['s5', 'PHYS110'], ['s3', 'ECON150'], ['s3', 'PHYS110']],\n    {'MATH101': 5, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 6, 'BIO130': 1, 'HIST140': 6, 'ECON150': 7}],\n   [18, 2, '9'])],\n [('regression: proximity window 1',\n   [[['s5', 'PHYS110'], ['s4', 'ECON150'], ['s3', 'MATH101'], ['s3', 'PHYS110'], ['s2', 'CHEM120'],\n     ['s2', 'ECON150'], ['s4', 'MATH101H'], ['s5', 'BIO130'], ['s4', 'HIST140'], ['s3', 'BIO130'],\n     ['s4', 'PHYS110'], ['s3', 'ECON150'], ['s2', 'HIST140'], ['s5', 'MATH101'], ['s1', 'HIST140']],\n    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 0, 'CHEM120': 6, 'BIO130': 0, 'HIST140': 0, 'ECON150': 2}],\n   [82, 5, '82/5']),\n  ('regression variant: proximity window 2',\n   [[['s2', 'CHEM120'], ['s4', 'ECON150'], ['s4', 'CHEM120'], ['s4', 'HIST140'], ['s5', 'MATH101H'],\n     ['s2', 'MATH101'], ['s5', 'ECON150'], ['s2', 'PHYS110'], ['s2', 'ECON150']],\n    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 5, 'CHEM120': 6, 'BIO130': 2, 'HIST140': 4, 'ECON150': 5}],\n   [100, 3, '100/3']),\n  ('partial repair guard 3',\n   [[['s1', 'MATH101H'], ['s5', 'HIST140'], ['s5', 'BIO130'], ['s1', 'MATH101'], ['s5', 'BIO130'],\n     ['s5', 'MATH101']],\n    {'MATH101': 7, 'MATH101H': 2, 'PHYS110': 7, 'CHEM120': 5, 'BIO130': 7, 'HIST140': 0, 'ECON150': 7}],\n   [1, 2, '1/2']),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}], [0, 1, '0']),\n  ('boundary control 5', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),\n  ('normal control 6',\n   [[['s1', 'ECON150'], ['s5', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'HIST140'], ['s4', 'MATH101'],\n     ['s4', 'MATH101'], ['s1', 'PHYS110']],\n    {'MATH101': 1, 'MATH101H': 4, 'PHYS110': 6, 'CHEM120': 4, 'BIO130': 5, 'HIST140': 2, 'ECON150': 3}],\n   [30, 3, '10']),\n  ('normal control 7',\n   [[['s4', 'BIO130'], ['s4', 'CHEM120'], ['s4', 'ECON150']],\n    {'MATH101': 4, 'MATH101H': 4, 'PHYS110': 5, 'CHEM120': 4, 'BIO130': 4, 'HIST140': 1, 'ECON150': 5}],\n   [32, 1, '32']),\n  ('normal control 8',\n   [[['s3', 'HIST140'], ['s3', 'MATH101'], ['s4', 'BIO130'], ['s4', 'MATH101'], ['s4', 'CHEM120'],\n     ['s4', 'MATH101'], ['s1', 'HIST140'], ['s1', 'ECON150'], ['s1', 'MATH101'], ['s3', 'MATH101H'],\n     ['s3', 'CHEM120']],\n    {'MATH101': 6, 'MATH101H': 3, 'PHYS110': 7, 'CHEM120': 6, 'BIO130': 0, 'HIST140': 5, 'ECON150': 3}],\n   [76, 3, '76/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":"bafd980547c6a681cc49a582cc003405dbc5edef3c4c0f012d163913a983a73a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(enrol, period):\n    by = {}\n    for st, ex in enrol:\n        by.setdefault(st, set()).add(ex)\n    total = 0\n    for st, exs in by.items():\n        ps = sorted(period[e] for e in exs)\n        for i in range(len(ps)):\n            for j in range(i + 1, len(ps)):\n                d = ps[j] - ps[i]\n                if 1 <= d <= 5:\n                    total += 2 ** (5 - d)\n    n = len(by)\n    return [total, n, str(Fraction(total, n)) if n else '0']\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: proximity window 1', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}],\n   [0, 1, '0']),\n  ('regression variant: proximity window 2',\n   [[['s4', 'CHEM120'], ['s2', 'BIO130'], ['s3', 'MATH101H'], ['s5', 'MATH101H'], ['s1', 'ECON150'],\n     ['s5', 'CHEM120'], ['s1', 'MATH101'], ['s1', 'HIST140'], ['s4', 'MATH101H'], ['s3', 'CHEM120'],\n     ['s1', 'PHYS110'], ['s2', 'PHYS110'], ['s4', 'HIST140']],\n    {'MATH101': 0, 'MATH101H': 2, 'PHYS110': 7, 'CHEM120': 2, 'BIO130': 4, 'HIST140': 7, 'ECON150': 3}],\n   [14, 5, '14/5']),\n  ('partial repair guard 3',\n   [[['s2', 'HIST140'], ['s2', 'BIO130'], ['s3', 'ECON150'], ['s3', 'MATH101H'], ['s3', 'CHEM120'],\n     ['s4', 'HIST140'], ['s2', 'PHYS110'], ['s3', 'BIO130']],\n    {'MATH101': 3, 'MATH101H': 6, 'PHYS110': 7, 'CHEM120': 1, 'BIO130': 5, 'HIST140': 6, 'ECON150': 6}],\n   [76, 3, '76/3']),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),\n  ('normal control 5',\n   [[['s1', 'ECON150'], ['s5', 'BIO130'], ['s5', 'PHYS110'], ['s5', 'HIST140'], ['s3', 'HIST140'],\n     ['s2', 'PHYS110'], ['s2', 'HIST140'], ['s5', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'HIST140'],\n     ['s2', 'BIO130'], ['s2', 'CHEM120']],\n    {'MATH101': 7, 'MATH101H': 5, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 7, 'HIST140': 0, 'ECON150': 2}],\n   [49, 4, '49/4']),\n  ('normal control 6',\n   [[['s5', 'ECON150'], ['s2', 'HIST140'], ['s3', 'MATH101'], ['s3', 'PHYS110'], ['s3', 'MATH101'],\n     ['s1', 'HIST140'], ['s3', 'MATH101H'], ['s4', 'CHEM120'], ['s4', 'MATH101'], ['s5', 'PHYS110'],\n     ['s5', 'CHEM120'], ['s5', 'MATH101'], ['s2', 'MATH101'], ['s4', 'BIO130'], ['s4', 'PHYS110']],\n    {'MATH101': 5, 'MATH101H': 1, 'PHYS110': 3, 'CHEM120': 4, 'BIO130': 4, 'HIST140': 4, 'ECON150': 0}],\n   [153, 5, '153/5']),\n  ('normal control 7',\n   [[['s3', 'CHEM120'], ['s4', 'CHEM120'], ['s4', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'PHYS110'],\n     ['s3', 'CHEM120']],\n    {'MATH101': 1, 'MATH101H': 6, 'PHYS110': 4, 'CHEM120': 7, 'BIO130': 1, 'HIST140': 7, 'ECON150': 5}],\n   [8, 3, '8/3']),\n  ('normal control 8',\n   [[['s4', 'BIO130'], ['s4', 'MATH101H'], ['s2', 'MATH101H'], ['s1', 'CHEM120'], ['s2', 'MATH101'],\n     ['s1', 'MATH101'], ['s5', 'CHEM120'], ['s4', 'CHEM120'], ['s4', 'HIST140'], ['s1', 'MATH101']],\n    {'MATH101': 4, 'MATH101H': 2, 'PHYS110': 5, 'CHEM120': 1, 'BIO130': 4, 'HIST140': 0, 'ECON150': 3}],\n   [66, 4, '33/2'])],\n [('regression: proximity window 1',\n   [[['s1', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130']],\n    {'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 1}],\n   [32, 2, '16']),\n  ('regression variant: proximity window 2',\n   [[['s2', 'CHEM120'], ['s2', 'ECON150'], ['s2', 'PHYS110'], ['s1', 'MATH101H'], ['s1', 'HIST140']],\n    {'MATH101': 6, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 5, 'BIO130': 6, 'HIST140': 5, 'ECON150': 1}],\n   [19, 2, '19/2']),\n  ('partial repair guard 3',\n   [[['s4', 'MATH101'], ['s3', 'PHYS110'], ['s1', 'CHEM120'], ['s3', 'MATH101'], ['s5', 'CHEM120'],\n     ['s1', 'MATH101H'], ['s4', 'MATH101H'], ['s4', 'ECON150']],\n    {'MATH101': 3, 'MATH101H': 7, 'PHYS110': 7, 'CHEM120': 3, 'BIO130': 4, 'HIST140': 2, 'ECON150': 2}],\n   [23, 4, '23/4']),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 1}],\n   [16, 1, '16']),\n  ('normal control 5',\n   [[['s5', 'ECON150'], ['s5', 'MATH101'], ['s4', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'MATH101H']],\n    {'MATH101': 6, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 4, 'BIO130': 6, 'HIST140': 1, 'ECON150': 3}],\n   [28, 2, '14']),\n  ('normal control 6',\n   [[['s4', 'BIO130'], ['s4', 'HIST140'], ['s3', 'MATH101H'], ['s5', 'HIST140'], ['s4', 'PHYS110']],\n    {'MATH101': 4, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 6, 'HIST140': 5, 'ECON150': 4}],\n   [17, 3, '17/3']),\n  ('normal control 7',\n   [[['s4', 'MATH101H'], ['s4', 'BIO130'], ['s2', 'MATH101H'], ['s4', 'PHYS110'], ['s5', 'BIO130'],\n     ['s4', 'MATH101'], ['s2', 'HIST140'], ['s2', 'BIO130']],\n    {'MATH101': 4, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 5, 'BIO130': 0, 'HIST140': 6, 'ECON150': 5}],\n   [39, 3, '13']),\n  ('normal control 8',\n   [[['s4', 'MATH101'], ['s4', 'PHYS110']],\n    {'MATH101': 5, 'MATH101H': 4, 'PHYS110': 5, 'CHEM120': 2, 'BIO130': 1, 'HIST140': 4, 'ECON150': 2}],\n   [0, 1, '0'])],\n [('regression: proximity window 1',\n   [[['s3', 'CHEM120'], ['s1', 'MATH101'], ['s2', 'CHEM120'], ['s5', 'HIST140'], ['s5', 'BIO130'],\n     ['s1', 'HIST140'], ['s1', 'CHEM120'], ['s1', 'BIO130'], ['s3', 'BIO130'], ['s2', 'MATH101H'],\n     ['s2', 'MATH101'], ['s2', 'HIST140']],\n    {'MATH101': 2, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 5, 'BIO130': 4, 'HIST140': 0, 'ECON150': 0}],\n   [79, 4, '79/4']),\n  ('regression variant: proximity window 2',\n   [[['s3', 'MATH101H'], ['s3', 'ECON150'], ['s5', 'BIO130'], ['s2', 'HIST140'], ['s1', 'MATH101'],\n     ['s5', 'MATH101'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s1', 'PHYS110'], ['s5', 'MATH101H'],\n     ['s5', 'ECON150'], ['s3', 'PHYS110']],\n    {'MATH101': 6, 'MATH101H': 3, 'PHYS110': 6, 'CHEM120': 4, 'BIO130': 3, 'HIST140': 5, 'ECON150': 7}],\n   [94, 4, '47/2']),\n  ('partial repair guard 3',\n   [[['s3', 'MATH101H'], ['s1', 'PHYS110'], ['s3', 'BIO130'], ['s3', 'HIST140'], ['s4', 'BIO130'],\n     ['s2', 'ECON150'], ['s5', 'PHYS110'], ['s1', 'CHEM120'], ['s1', 'HIST140'], ['s2', 'PHYS110'],\n     ['s5', 'MATH101H'], ['s3', 'PHYS110'], ['s1', 'ECON150']],\n    {'MATH101': 7, 'MATH101H': 3, 'PHYS110': 1, 'CHEM120': 4, 'BIO130': 7, 'HIST140': 6, 'ECON150': 2}],\n   [94, 5, '94/5']),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}], [0, 1, '0']),\n  ('boundary control 5', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),\n  ('normal control 6',\n   [[['s3', 'MATH101H'], ['s2', 'MATH101'], ['s1', 'MATH101'], ['s4', 'CHEM120'], ['s4', 'PHYS110'],\n     ['s4', 'HIST140'], ['s2', 'HIST140'], ['s4', 'HIST140'], ['s1', 'HIST140'], ['s3', 'MATH101'],\n     ['s4', 'ECON150']],\n    {'MATH101': 4, 'MATH101H': 5, 'PHYS110': 4, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 2, 'ECON150': 0}],\n   [86, 4, '43/2']),\n  ('normal control 7',\n   [[['s5', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'BIO130'], ['s5', 'ECON150'], ['s1', 'MATH101H'],\n     ['s4', 'ECON150'], ['s5', 'MATH101'], ['s1', 'HIST140'], ['s1', 'MATH101'], ['s4', 'BIO130'],\n     ['s4', 'MATH101H'], ['s2', 'MATH101'], ['s4', 'MATH101'], ['s1', 'CHEM120'], ['s2', 'CHEM120'],\n     ['s2', 'PHYS110']],\n    {'MATH101': 4, 'MATH101H': 1, 'PHYS110': 1, 'CHEM120': 5, 'BIO130': 0, 'HIST140': 6, 'ECON150': 2}],\n   [190, 4, '95/2']),\n  ('normal control 8',\n   [[['s5', 'ECON150'], ['s5', 'MATH101H'], ['s2', 'MATH101H'], ['s2', 'MATH101'], ['s4', 'BIO130'],\n     ['s3', 'CHEM120'], ['s2', 'MATH101'], ['s4', 'PHYS110'], ['s2', 'ECON150'], ['s3', 'ECON150']],\n    {'MATH101': 1, 'MATH101H': 3, 'PHYS110': 4, 'CHEM120': 2, 'BIO130': 6, 'HIST140': 4, 'ECON150': 5}],\n   [38, 4, '19/2'])],\n [('regression: proximity window 1',\n   [[['s1', 'MATH101H'], ['s2', 'BIO130'], ['s1', 'ECON150'], ['s1', 'ECON150'], ['s2', 'ECON150'],\n     ['s3', 'MATH101'], ['s4', 'MATH101H'], ['s2', 'MATH101H'], ['s4', 'ECON150'], ['s2', 'PHYS110']],\n    {'MATH101': 6, 'MATH101H': 7, 'PHYS110': 4, 'CHEM120': 2, 'BIO130': 4, 'HIST140': 3, 'ECON150': 4}],\n   [20, 4, '5']),\n  ('regression variant: proximity window 2',\n   [[['s4', 'MATH101H'], ['s3', 'MATH101'], ['s5', 'MATH101'], ['s3', 'BIO130'], ['s5', 'MATH101H'],\n     ['s2', 'HIST140'], ['s5', 'HIST140'], ['s2', 'CHEM120'], ['s4', 'PHYS110'], ['s4', 'ECON150'],\n     ['s1', 'MATH101'], ['s1', 'MATH101H']],\n    {'MATH101': 2, 'MATH101H': 7, 'PHYS110': 5, 'CHEM120': 7, 'BIO130': 2, 'HIST140': 2, 'ECON150': 6}],\n   [44, 5, '44/5']),\n  ('partial repair guard 3',\n   [[['s5', 'BIO130'], ['s5', 'MATH101H'], ['s3', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'PHYS110'],\n     ['s2', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'PHYS110'], ['s3', 'CHEM120'], ['s1', 'HIST140'],\n     ['s2', 'BIO130'], ['s4', 'ECON150'], ['s2', 'PHYS110']],\n    {'MATH101': 6, 'MATH101H': 0, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 3, 'ECON150': 5}],\n   [91, 5, '91/5']),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 1}],\n   [16, 1, '16']),\n  ('boundary control 5',\n   [[['s1', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130']],\n    {'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 1}],\n   [32, 2, '16']),\n  ('normal control 6',\n   [[['s1', 'CHEM120'], ['s2', 'HIST140'], ['s1', 'HIST140'], ['s2', 'ECON150'], ['s4', 'PHYS110'],\n     ['s4', 'MATH101H'], ['s3', 'PHYS110'], ['s3', 'CHEM120'], ['s5', 'ECON150'], ['s3', 'CHEM120'],\n     ['s3', 'HIST140'], ['s3', 'MATH101'], ['s4', 'MATH101'], ['s4', 'HIST140']],\n    {'MATH101': 7, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 4, 'BIO130': 3, 'HIST140': 4, 'ECON150': 4}],\n   [40, 5, '8']),\n  ('normal control 7',\n   [[['s4', 'MATH101'], ['s4', 'PHYS110'], ['s5', 'PHYS110'], ['s3', 'PHYS110'], ['s2', 'CHEM120'],\n     ['s3', 'CHEM120'], ['s5', 'CHEM120']],\n    {'MATH101': 1, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 0, 'ECON150': 1}],\n   [16, 4, '4']),\n  ('normal control 8',\n   [[['s5', 'MATH101H'], ['s5', 'PHYS110'], ['s3', 'ECON150'], ['s3', 'PHYS110']],\n    {'MATH101': 5, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 6, 'BIO130': 1, 'HIST140': 6, 'ECON150': 7}],\n   [18, 2, '9'])],\n [('regression: proximity window 1',\n   [[['s5', 'PHYS110'], ['s4', 'ECON150'], ['s3', 'MATH101'], ['s3', 'PHYS110'], ['s2', 'CHEM120'],\n     ['s2', 'ECON150'], ['s4', 'MATH101H'], ['s5', 'BIO130'], ['s4', 'HIST140'], ['s3', 'BIO130'],\n     ['s4', 'PHYS110'], ['s3', 'ECON150'], ['s2', 'HIST140'], ['s5', 'MATH101'], ['s1', 'HIST140']],\n    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 0, 'CHEM120': 6, 'BIO130': 0, 'HIST140': 0, 'ECON150': 2}],\n   [82, 5, '82/5']),\n  ('regression variant: proximity window 2',\n   [[['s2', 'CHEM120'], ['s4', 'ECON150'], ['s4', 'CHEM120'], ['s4', 'HIST140'], ['s5', 'MATH101H'],\n     ['s2', 'MATH101'], ['s5', 'ECON150'], ['s2', 'PHYS110'], ['s2', 'ECON150']],\n    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 5, 'CHEM120': 6, 'BIO130': 2, 'HIST140': 4, 'ECON150': 5}],\n   [100, 3, '100/3']),\n  ('partial repair guard 3',\n   [[['s1', 'MATH101H'], ['s5', 'HIST140'], ['s5', 'BIO130'], ['s1', 'MATH101'], ['s5', 'BIO130'],\n     ['s5', 'MATH101']],\n    {'MATH101': 7, 'MATH101H': 2, 'PHYS110': 7, 'CHEM120': 5, 'BIO130': 7, 'HIST140': 0, 'ECON150': 7}],\n   [1, 2, '1/2']),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 3, 'PHYS110': 3}], [0, 1, '0']),\n  ('boundary control 5', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 6}], [0, 1, '0']),\n  ('normal control 6',\n   [[['s1', 'ECON150'], ['s5', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'HIST140'], ['s4', 'MATH101'],\n     ['s4', 'MATH101'], ['s1', 'PHYS110']],\n    {'MATH101': 1, 'MATH101H': 4, 'PHYS110': 6, 'CHEM120': 4, 'BIO130': 5, 'HIST140': 2, 'ECON150': 3}],\n   [30, 3, '10']),\n  ('normal control 7',\n   [[['s4', 'BIO130'], ['s4', 'CHEM120'], ['s4', 'ECON150']],\n    {'MATH101': 4, 'MATH101H': 4, 'PHYS110': 5, 'CHEM120': 4, 'BIO130': 4, 'HIST140': 1, 'ECON150': 5}],\n   [32, 1, '32']),\n  ('normal control 8',\n   [[['s3', 'HIST140'], ['s3', 'MATH101'], ['s4', 'BIO130'], ['s4', 'MATH101'], ['s4', 'CHEM120'],\n     ['s4', 'MATH101'], ['s1', 'HIST140'], ['s1', 'ECON150'], ['s1', 'MATH101'], ['s3', 'MATH101H'],\n     ['s3', 'CHEM120']],\n    {'MATH101': 6, 'MATH101H': 3, 'PHYS110': 7, 'CHEM120': 6, 'BIO130': 0, 'HIST140': 5, 'ECON150': 3}],\n   [76, 3, '76/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-carter-proximity-cost-proximity-window","generated_at":"2026-09-29T14:52:04.172215+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"The Carter proximity cost is the standard exam-timetabling quality measure; each piece has a known implementation pitfall.","repair":"Only distances 1 through 5 carry a proximity cost.","root_cause":"The proximity window includes distance zero.","sha256":"6801cf80044279c4dd410873d8d8ae224e161e66f87a867a11c5040aef1fcb9a","title":"Same-period clashes included in proximity cost · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.713,"exit_code":1,"observations":[{"actual":[0,1,"0"],"check":"regression: proximity window 1","expected":[0,1,"0"],"passed":true},{"actual":[12,5,"12/5"],"check":"regression variant: proximity window 2","expected":[14,5,"14/5"],"passed":false},{"actual":[74,3,"74/3"],"check":"partial repair guard 3","expected":[76,3,"76/3"],"passed":false},{"actual":[0,1,"0"],"check":"boundary control 4","expected":[0,1,"0"],"passed":true},{"actual":[44,4,"11"],"check":"normal control 5","expected":[49,4,"49/4"],"passed":false},{"actual":[152,5,"152/5"],"check":"normal control 6","expected":[153,5,"153/5"],"passed":false},{"actual":[8,3,"8/3"],"check":"normal control 7","expected":[8,3,"8/3"],"passed":true},{"actual":[66,4,"33/2"],"check":"normal control 8","expected":[66,4,"33/2"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: proximity window 1\", \"actual\": [0, 1, \"0\"], \"expected\": [0, 1, \"0\"], \"passed\": true}, {\"check\": \"regression variant: proximity window 2\", \"actual\": [12, 5, \"12/5\"], \"expected\": [14, 5, \"14/5\"], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [74, 3, \"74/3\"], \"expected\": [76, 3, \"76/3\"], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [0, 1, \"0\"], \"expected\": [0, 1, \"0\"], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [44, 4, \"11\"], \"expected\": [49, 4, \"49/4\"], \"passed\": false}, {\"check\": \"normal control 6\", \"actual\": [152, 5, \"152/5\"], \"expected\": [153, 5, \"153/5\"], \"passed\": false}, {\"check\": \"normal control 7\", \"actual\": [8, 3, \"8/3\"], \"expected\": [8, 3, \"8/3\"], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [66, 4, \"33/2\"], \"expected\": [66, 4, \"33/2\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.434,"exit_code":1,"observations":[{"actual":[32,1,"32"],"check":"regression: proximity window 1","expected":[0,1,"0"],"passed":false},{"actual":[142,5,"142/5"],"check":"regression variant: proximity window 2","expected":[14,5,"14/5"],"passed":false},{"actual":[108,3,"36"],"check":"partial repair guard 3","expected":[76,3,"76/3"],"passed":false},{"actual":[0,1,"0"],"check":"boundary control 4","expected":[0,1,"0"],"passed":true},{"actual":[81,4,"81/4"],"check":"normal control 5","expected":[49,4,"49/4"],"passed":false},{"actual":[185,5,"37"],"check":"normal control 6","expected":[153,5,"153/5"],"passed":false},{"actual":[8,3,"8/3"],"check":"normal control 7","expected":[8,3,"8/3"],"passed":true},{"actual":[66,4,"33/2"],"check":"normal control 8","expected":[66,4,"33/2"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: proximity window 1\", \"actual\": [32, 1, \"32\"], \"expected\": [0, 1, \"0\"], \"passed\": false}, {\"check\": \"regression variant: proximity window 2\", \"actual\": [142, 5, \"142/5\"], \"expected\": [14, 5, \"14/5\"], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [108, 3, \"36\"], \"expected\": [76, 3, \"76/3\"], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [0, 1, \"0\"], \"expected\": [0, 1, \"0\"], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [81, 4, \"81/4\"], \"expected\": [49, 4, \"49/4\"], \"passed\": false}, {\"check\": \"normal control 6\", \"actual\": [185, 5, \"37\"], \"expected\": [153, 5, \"153/5\"], \"passed\": false}, {\"check\": \"normal control 7\", \"actual\": [8, 3, \"8/3\"], \"expected\": [8, 3, \"8/3\"], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [66, 4, \"33/2\"], \"expected\": [66, 4, \"33/2\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":46.407,"exit_code":0,"observations":[{"actual":[0,1,"0"],"check":"regression: proximity window 1","expected":[0,1,"0"],"passed":true},{"actual":[14,5,"14/5"],"check":"regression variant: proximity window 2","expected":[14,5,"14/5"],"passed":true},{"actual":[76,3,"76/3"],"check":"partial repair guard 3","expected":[76,3,"76/3"],"passed":true},{"actual":[0,1,"0"],"check":"boundary control 4","expected":[0,1,"0"],"passed":true},{"actual":[49,4,"49/4"],"check":"normal control 5","expected":[49,4,"49/4"],"passed":true},{"actual":[153,5,"153/5"],"check":"normal control 6","expected":[153,5,"153/5"],"passed":true},{"actual":[8,3,"8/3"],"check":"normal control 7","expected":[8,3,"8/3"],"passed":true},{"actual":[66,4,"33/2"],"check":"normal control 8","expected":[66,4,"33/2"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: proximity window 1\", \"actual\": [0, 1, \"0\"], \"expected\": [0, 1, \"0\"], \"passed\": true}, {\"check\": \"regression variant: proximity window 2\", \"actual\": [14, 5, \"14/5\"], \"expected\": [14, 5, \"14/5\"], \"passed\": true}, {\"check\": \"partial repair guard 3\", \"actual\": [76, 3, \"76/3\"], \"expected\": [76, 3, \"76/3\"], \"passed\": true}, {\"check\": \"boundary control 4\", \"actual\": [0, 1, \"0\"], \"expected\": [0, 1, \"0\"], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [49, 4, \"49/4\"], \"expected\": [49, 4, \"49/4\"], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [153, 5, \"153/5\"], \"expected\": [153, 5, \"153/5\"], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [8, 3, \"8/3\"], \"expected\": [8, 3, \"8/3\"], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [66, 4, \"33/2\"], \"expected\": [66, 4, \"33/2\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}