{"abstract":"Exams far apart are penalised more than adjacent ones.","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].","contract_signature":"enrol, period","evaluation_group":"w2-exam-timetabling-constraints-carter-proximity-cost","failed_approach":"An inverse-distance weight does not match the halving schedule.","family":"w2-exam-timetabling-constraints-carter-proximity-cost-proximity-weight","id":"FA-94416","implementations":{"attempt":{"sha256":"7276e02e141612257b6d96759fc196fb5a01bbfa3cf1e267b585614bf868fe79","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 += 32 // 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 weight 1', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 1}],\n   [16, 1, '16']),\n  ('regression variant: proximity weight 2',\n   [[['s2', 'HIST140'], ['s2', 'BIO130'], ['s2', 'CHEM120'], ['s1', 'ECON150'], ['s1', 'MATH101H'],\n     ['s2', 'PHYS110'], ['s1', 'MATH101'], ['s3', 'MATH101'], ['s1', 'ECON150'], ['s4', 'MATH101H'],\n     ['s4', 'PHYS110']],\n    {'MATH101': 6, 'MATH101H': 6, 'PHYS110': 3, 'CHEM120': 4, 'BIO130': 4, 'HIST140': 4, 'ECON150': 0}],\n   [52, 4, '13']),\n  ('partial repair guard 3',\n   [[['s4', 'HIST140'], ['s5', 'MATH101H'], ['s2', 'CHEM120'], ['s1', 'BIO130'], ['s1', 'MATH101H'],\n     ['s4', 'MATH101'], ['s4', 'PHYS110'], ['s1', 'CHEM120'], ['s4', 'ECON150'], ['s5', 'ECON150'],\n     ['s1', 'HIST140'], ['s1', 'BIO130'], ['s5', 'HIST140']],\n    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 0, 'CHEM120': 2, 'BIO130': 5, 'HIST140': 1, 'ECON150': 5}],\n   [105, 4, '105/4']),\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', 'BIO130'], ['s1', 'HIST140'], ['s1', 'PHYS110'], ['s3', 'ECON150'], ['s3', 'PHYS110'],\n     ['s4', 'HIST140'], ['s3', 'HIST140'], ['s3', 'BIO130'], ['s1', 'CHEM120']],\n    {'MATH101': 4, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 4, 'HIST140': 7, 'ECON150': 0}],\n   [75, 3, '25']),\n  ('normal control 7',\n   [[['s1', 'PHYS110'], ['s5', 'CHEM120'], ['s5', 'HIST140'], ['s4', 'BIO130'], ['s5', 'MATH101'],\n     ['s1', 'HIST140'], ['s4', 'CHEM120'], ['s2', 'MATH101H'], ['s2', 'CHEM120'], ['s1', 'CHEM120']],\n    {'MATH101': 7, 'MATH101H': 7, 'PHYS110': 2, 'CHEM120': 5, 'BIO130': 4, 'HIST140': 4, 'ECON150': 4}],\n   [80, 4, '20']),\n  ('normal control 8',\n   [[['s5', 'PHYS110'], ['s2', 'PHYS110'], ['s2', 'CHEM120'], ['s1', 'CHEM120'], ['s1', 'PHYS110'],\n     ['s5', 'ECON150'], ['s3', 'HIST140'], ['s2', 'ECON150'], ['s1', 'HIST140'], ['s2', 'MATH101H'],\n     ['s4', 'HIST140'], ['s4', 'MATH101H'], ['s3', 'PHYS110']],\n    {'MATH101': 3, 'MATH101H': 4, 'PHYS110': 7, 'CHEM120': 7, 'BIO130': 7, 'HIST140': 0, 'ECON150': 7}],\n   [14, 5, '14/5'])],\n [('regression: proximity weight 1', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 5}],\n   [1, 1, '1']),\n  ('regression variant: proximity weight 2',\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  ('partial repair guard 3',\n   [[['s2', 'PHYS110'], ['s2', 'MATH101H']],\n    {'MATH101': 2, 'MATH101H': 4, 'PHYS110': 1, 'CHEM120': 4, 'BIO130': 5, 'HIST140': 3, 'ECON150': 3}],\n   [4, 1, '4']),\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', 'CHEM120'], ['s2', 'ECON150'], ['s1', 'ECON150'], ['s1', 'MATH101'],\n     ['s1', 'CHEM120'], ['s2', 'HIST140'], ['s2', 'BIO130']],\n    {'MATH101': 7, 'MATH101H': 4, 'PHYS110': 1, 'CHEM120': 4, 'BIO130': 3, 'HIST140': 5, 'ECON150': 7}],\n   [62, 2, '31']),\n  ('normal control 7',\n   [[['s4', 'CHEM120'], ['s4', 'PHYS110'], ['s5', 'MATH101H'], ['s2', 'CHEM120'], ['s4', 'MATH101'],\n     ['s5', 'HIST140'], ['s2', 'ECON150'], ['s2', 'MATH101H'], ['s5', 'CHEM120']],\n    {'MATH101': 3, 'MATH101H': 1, 'PHYS110': 1, 'CHEM120': 6, 'BIO130': 7, 'HIST140': 6, 'ECON150': 6}],\n   [17, 3, '17/3']),\n  ('normal control 8',\n   [[['s2', 'PHYS110'], ['s2', 'ECON150']],\n    {'MATH101': 6, 'MATH101H': 1, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 5, 'HIST140': 3, 'ECON150': 1}],\n   [16, 1, '16'])],\n [('regression: proximity weight 1',\n   [[['s1', 'MATH101'], ['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 2}], [8, 1, '8']),\n  ('regression variant: proximity weight 2',\n   [[['s5', 'PHYS110'], ['s5', 'BIO130'], ['s4', 'ECON150'], ['s5', 'HIST140'], ['s5', 'PHYS110'],\n     ['s5', 'MATH101H'], ['s1', 'CHEM120'], ['s1', 'ECON150'], ['s4', 'HIST140']],\n    {'MATH101': 3, 'MATH101H': 4, 'PHYS110': 2, 'CHEM120': 5, 'BIO130': 5, 'HIST140': 3, 'ECON150': 1}],\n   [78, 3, '26']),\n  ('partial repair guard 3',\n   [[['s4', 'ECON150'], ['s4', 'MATH101H'], ['s3', 'MATH101H'], ['s4', 'HIST140'], ['s1', 'PHYS110'],\n     ['s4', 'PHYS110'], ['s1', 'BIO130'], ['s1', 'MATH101'], ['s1', 'CHEM120']],\n    {'MATH101': 3, 'MATH101H': 7, 'PHYS110': 7, 'CHEM120': 4, 'BIO130': 0, 'HIST140': 7, 'ECON150': 1}],\n   [28, 3, '28/3']),\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', 'CHEM120'], ['s4', 'BIO130'], ['s4', 'PHYS110'], ['s3', 'ECON150'], ['s2', 'MATH101'],\n     ['s4', 'MATH101H'], ['s3', 'PHYS110']],\n    {'MATH101': 3, 'MATH101H': 6, 'PHYS110': 5, 'CHEM120': 3, 'BIO130': 4, 'HIST140': 5, 'ECON150': 7}],\n   [58, 3, '58/3']),\n  ('normal control 7',\n   [[['s3', 'BIO130'], ['s2', 'ECON150'], ['s1', 'ECON150'], ['s3', 'MATH101H'], ['s3', 'PHYS110'],\n     ['s2', 'MATH101H'], ['s1', 'CHEM120'], ['s5', 'HIST140']],\n    {'MATH101': 2, 'MATH101H': 1, 'PHYS110': 7, 'CHEM120': 0, 'BIO130': 1, 'HIST140': 5, 'ECON150': 1}],\n   [16, 4, '4']),\n  ('normal control 8',\n   [[['s2', 'BIO130'], ['s2', 'HIST140'], ['s2', 'MATH101'], ['s2', 'PHYS110'], ['s5', 'HIST140'],\n     ['s3', 'CHEM120'], ['s5', 'ECON150'], ['s3', 'MATH101H'], ['s5', 'MATH101'], ['s5', 'MATH101H'],\n     ['s2', 'HIST140']],\n    {'MATH101': 1, 'MATH101H': 4, 'PHYS110': 7, 'CHEM120': 2, 'BIO130': 4, 'HIST140': 1, 'ECON150': 6}],\n   [38, 3, '38/3'])],\n [('regression: proximity weight 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 weight 2',\n   [[['s4', 'MATH101H'], ['s5', 'MATH101'], ['s5', 'HIST140'], ['s1', 'MATH101H'], ['s1', 'ECON150'],\n     ['s1', 'PHYS110'], ['s5', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'PHYS110'], ['s1', 'HIST140'],\n     ['s3', 'PHYS110'], ['s5', 'MATH101'], ['s2', 'HIST140'], ['s2', 'BIO130'], ['s4', 'MATH101']],\n    {'MATH101': 0, 'MATH101H': 0, 'PHYS110': 5, 'CHEM120': 2, 'BIO130': 3, 'HIST140': 6, 'ECON150': 7}],\n   [94, 5, '94/5']),\n  ('partial repair guard 3',\n   [[['s5', 'CHEM120'], ['s3', 'MATH101H'], ['s2', 'ECON150'], ['s5', 'MATH101H'], ['s1', 'ECON150'],\n     ['s4', 'CHEM120'], ['s2', 'CHEM120'], ['s3', 'BIO130'], ['s4', 'PHYS110'], ['s5', 'ECON150'],\n     ['s3', 'ECON150'], ['s2', 'PHYS110'], ['s5', 'HIST140'], ['s4', 'MATH101H'], ['s4', 'BIO130'],\n     ['s4', 'BIO130'], ['s3', 'HIST140'], ['s2', 'MATH101H']],\n    {'MATH101': 3, 'MATH101H': 6, 'PHYS110': 1, 'CHEM120': 1, 'BIO130': 6, 'HIST140': 6, 'ECON150': 5}],\n   [110, 5, '22']),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 1}],\n   [16, 1, '16']),\n  ('normal control 5',\n   [[['s5', 'MATH101'], ['s3', 'BIO130'], ['s5', 'CHEM120'], ['s2', 'ECON150'], ['s2', 'PHYS110'],\n     ['s2', 'PHYS110'], ['s2', 'MATH101H']],\n    {'MATH101': 0, 'MATH101H': 2, 'PHYS110': 0, 'CHEM120': 5, 'BIO130': 6, 'HIST140': 7, 'ECON150': 6}],\n   [11, 3, '11/3']),\n  ('normal control 6',\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  ('normal control 7',\n   [[['s5', 'MATH101'], ['s5', 'HIST140'], ['s1', 'HIST140'], ['s1', 'BIO130'], ['s5', 'BIO130'],\n     ['s1', 'PHYS110'], ['s2', 'HIST140']],\n    {'MATH101': 4, 'MATH101H': 7, 'PHYS110': 7, 'CHEM120': 6, 'BIO130': 3, 'HIST140': 2, 'ECON150': 4}],\n   [59, 3, '59/3']),\n  ('normal control 8',\n   [[['s1', 'MATH101H'], ['s1', 'CHEM120'], ['s3', 'HIST140'], ['s3', 'PHYS110'], ['s3', 'MATH101'],\n     ['s3', 'ECON150'], ['s4', 'PHYS110'], ['s3', 'HIST140']],\n    {'MATH101': 4, 'MATH101H': 4, 'PHYS110': 6, 'CHEM120': 7, 'BIO130': 0, 'HIST140': 0, 'ECON150': 5}],\n   [47, 3, '47/3'])],\n [('regression: proximity weight 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 weight 2',\n   [[['s5', 'MATH101H'], ['s3', 'HIST140'], ['s4', 'ECON150'], ['s5', 'CHEM120'], ['s4', 'HIST140'],\n     ['s5', 'HIST140'], ['s3', 'ECON150'], ['s4', 'ECON150'], ['s3', 'MATH101']],\n    {'MATH101': 2, 'MATH101H': 4, 'PHYS110': 4, 'CHEM120': 2, 'BIO130': 1, 'HIST140': 1, 'ECON150': 3}],\n   [76, 3, '76/3']),\n  ('partial repair guard 3',\n   [[['s5', 'PHYS110'], ['s5', 'BIO130'], ['s4', 'ECON150'], ['s5', 'HIST140'], ['s5', 'PHYS110'],\n     ['s5', 'MATH101H'], ['s1', 'CHEM120'], ['s1', 'ECON150'], ['s4', 'HIST140']],\n    {'MATH101': 3, 'MATH101H': 4, 'PHYS110': 2, 'CHEM120': 5, 'BIO130': 5, 'HIST140': 3, 'ECON150': 1}],\n   [78, 3, '26']),\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   [[['s2', 'ECON150'], ['s2', 'ECON150'], ['s4', 'MATH101H'], ['s4', 'HIST140'], ['s3', 'HIST140'],\n     ['s3', 'PHYS110'], ['s3', 'CHEM120'], ['s3', 'MATH101'], ['s2', 'PHYS110'], ['s4', 'CHEM120'],\n     ['s4', 'BIO130'], ['s2', 'CHEM120'], ['s1', 'MATH101']],\n    {'MATH101': 7, 'MATH101H': 5, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 7, 'HIST140': 4, 'ECON150': 5}],\n   [116, 4, '29']),\n  ('normal control 7',\n   [[['s2', 'BIO130'], ['s3', 'ECON150'], ['s4', 'BIO130'], ['s2', 'MATH101H'], ['s1', 'BIO130'],\n     ['s1', 'MATH101'], ['s5', 'HIST140'], ['s2', 'MATH101H'], ['s2', 'MATH101'], ['s1', 'PHYS110'],\n     ['s4', 'CHEM120'], ['s2', 'ECON150'], ['s1', 'MATH101H']],\n    {'MATH101': 6, 'MATH101H': 2, 'PHYS110': 7, 'CHEM120': 1, 'BIO130': 4, 'HIST140': 4, 'ECON150': 4}],\n   [77, 5, '77/5']),\n  ('normal control 8',\n   [[['s2', 'PHYS110'], ['s1', 'PHYS110'], ['s2', 'CHEM120'], ['s2', 'ECON150'], ['s1', 'CHEM120'],\n     ['s5', 'BIO130'], ['s5', 'ECON150'], ['s1', 'ECON150'], ['s1', 'HIST140'], ['s2', 'BIO130']],\n    {'MATH101': 3, 'MATH101H': 5, 'PHYS110': 7, 'CHEM120': 1, 'BIO130': 2, 'HIST140': 6, 'ECON150': 1}],\n   [67, 3, '67/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":"6ab15dd54b1ee93452b9c7c16183cd78c8047ff0a164878e2807cd14ba1f3121","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 ** (d - 1)\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 weight 1', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 1}],\n   [16, 1, '16']),\n  ('regression variant: proximity weight 2',\n   [[['s2', 'HIST140'], ['s2', 'BIO130'], ['s2', 'CHEM120'], ['s1', 'ECON150'], ['s1', 'MATH101H'],\n     ['s2', 'PHYS110'], ['s1', 'MATH101'], ['s3', 'MATH101'], ['s1', 'ECON150'], ['s4', 'MATH101H'],\n     ['s4', 'PHYS110']],\n    {'MATH101': 6, 'MATH101H': 6, 'PHYS110': 3, 'CHEM120': 4, 'BIO130': 4, 'HIST140': 4, 'ECON150': 0}],\n   [52, 4, '13']),\n  ('partial repair guard 3',\n   [[['s4', 'HIST140'], ['s5', 'MATH101H'], ['s2', 'CHEM120'], ['s1', 'BIO130'], ['s1', 'MATH101H'],\n     ['s4', 'MATH101'], ['s4', 'PHYS110'], ['s1', 'CHEM120'], ['s4', 'ECON150'], ['s5', 'ECON150'],\n     ['s1', 'HIST140'], ['s1', 'BIO130'], ['s5', 'HIST140']],\n    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 0, 'CHEM120': 2, 'BIO130': 5, 'HIST140': 1, 'ECON150': 5}],\n   [105, 4, '105/4']),\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', 'BIO130'], ['s1', 'HIST140'], ['s1', 'PHYS110'], ['s3', 'ECON150'], ['s3', 'PHYS110'],\n     ['s4', 'HIST140'], ['s3', 'HIST140'], ['s3', 'BIO130'], ['s1', 'CHEM120']],\n    {'MATH101': 4, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 4, 'HIST140': 7, 'ECON150': 0}],\n   [75, 3, '25']),\n  ('normal control 7',\n   [[['s1', 'PHYS110'], ['s5', 'CHEM120'], ['s5', 'HIST140'], ['s4', 'BIO130'], ['s5', 'MATH101'],\n     ['s1', 'HIST140'], ['s4', 'CHEM120'], ['s2', 'MATH101H'], ['s2', 'CHEM120'], ['s1', 'CHEM120']],\n    {'MATH101': 7, 'MATH101H': 7, 'PHYS110': 2, 'CHEM120': 5, 'BIO130': 4, 'HIST140': 4, 'ECON150': 4}],\n   [80, 4, '20']),\n  ('normal control 8',\n   [[['s5', 'PHYS110'], ['s2', 'PHYS110'], ['s2', 'CHEM120'], ['s1', 'CHEM120'], ['s1', 'PHYS110'],\n     ['s5', 'ECON150'], ['s3', 'HIST140'], ['s2', 'ECON150'], ['s1', 'HIST140'], ['s2', 'MATH101H'],\n     ['s4', 'HIST140'], ['s4', 'MATH101H'], ['s3', 'PHYS110']],\n    {'MATH101': 3, 'MATH101H': 4, 'PHYS110': 7, 'CHEM120': 7, 'BIO130': 7, 'HIST140': 0, 'ECON150': 7}],\n   [14, 5, '14/5'])],\n [('regression: proximity weight 1', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 5}],\n   [1, 1, '1']),\n  ('regression variant: proximity weight 2',\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  ('partial repair guard 3',\n   [[['s2', 'PHYS110'], ['s2', 'MATH101H']],\n    {'MATH101': 2, 'MATH101H': 4, 'PHYS110': 1, 'CHEM120': 4, 'BIO130': 5, 'HIST140': 3, 'ECON150': 3}],\n   [4, 1, '4']),\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', 'CHEM120'], ['s2', 'ECON150'], ['s1', 'ECON150'], ['s1', 'MATH101'],\n     ['s1', 'CHEM120'], ['s2', 'HIST140'], ['s2', 'BIO130']],\n    {'MATH101': 7, 'MATH101H': 4, 'PHYS110': 1, 'CHEM120': 4, 'BIO130': 3, 'HIST140': 5, 'ECON150': 7}],\n   [62, 2, '31']),\n  ('normal control 7',\n   [[['s4', 'CHEM120'], ['s4', 'PHYS110'], ['s5', 'MATH101H'], ['s2', 'CHEM120'], ['s4', 'MATH101'],\n     ['s5', 'HIST140'], ['s2', 'ECON150'], ['s2', 'MATH101H'], ['s5', 'CHEM120']],\n    {'MATH101': 3, 'MATH101H': 1, 'PHYS110': 1, 'CHEM120': 6, 'BIO130': 7, 'HIST140': 6, 'ECON150': 6}],\n   [17, 3, '17/3']),\n  ('normal control 8',\n   [[['s2', 'PHYS110'], ['s2', 'ECON150']],\n    {'MATH101': 6, 'MATH101H': 1, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 5, 'HIST140': 3, 'ECON150': 1}],\n   [16, 1, '16'])],\n [('regression: proximity weight 1',\n   [[['s1', 'MATH101'], ['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 2}], [8, 1, '8']),\n  ('regression variant: proximity weight 2',\n   [[['s5', 'PHYS110'], ['s5', 'BIO130'], ['s4', 'ECON150'], ['s5', 'HIST140'], ['s5', 'PHYS110'],\n     ['s5', 'MATH101H'], ['s1', 'CHEM120'], ['s1', 'ECON150'], ['s4', 'HIST140']],\n    {'MATH101': 3, 'MATH101H': 4, 'PHYS110': 2, 'CHEM120': 5, 'BIO130': 5, 'HIST140': 3, 'ECON150': 1}],\n   [78, 3, '26']),\n  ('partial repair guard 3',\n   [[['s4', 'ECON150'], ['s4', 'MATH101H'], ['s3', 'MATH101H'], ['s4', 'HIST140'], ['s1', 'PHYS110'],\n     ['s4', 'PHYS110'], ['s1', 'BIO130'], ['s1', 'MATH101'], ['s1', 'CHEM120']],\n    {'MATH101': 3, 'MATH101H': 7, 'PHYS110': 7, 'CHEM120': 4, 'BIO130': 0, 'HIST140': 7, 'ECON150': 1}],\n   [28, 3, '28/3']),\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', 'CHEM120'], ['s4', 'BIO130'], ['s4', 'PHYS110'], ['s3', 'ECON150'], ['s2', 'MATH101'],\n     ['s4', 'MATH101H'], ['s3', 'PHYS110']],\n    {'MATH101': 3, 'MATH101H': 6, 'PHYS110': 5, 'CHEM120': 3, 'BIO130': 4, 'HIST140': 5, 'ECON150': 7}],\n   [58, 3, '58/3']),\n  ('normal control 7',\n   [[['s3', 'BIO130'], ['s2', 'ECON150'], ['s1', 'ECON150'], ['s3', 'MATH101H'], ['s3', 'PHYS110'],\n     ['s2', 'MATH101H'], ['s1', 'CHEM120'], ['s5', 'HIST140']],\n    {'MATH101': 2, 'MATH101H': 1, 'PHYS110': 7, 'CHEM120': 0, 'BIO130': 1, 'HIST140': 5, 'ECON150': 1}],\n   [16, 4, '4']),\n  ('normal control 8',\n   [[['s2', 'BIO130'], ['s2', 'HIST140'], ['s2', 'MATH101'], ['s2', 'PHYS110'], ['s5', 'HIST140'],\n     ['s3', 'CHEM120'], ['s5', 'ECON150'], ['s3', 'MATH101H'], ['s5', 'MATH101'], ['s5', 'MATH101H'],\n     ['s2', 'HIST140']],\n    {'MATH101': 1, 'MATH101H': 4, 'PHYS110': 7, 'CHEM120': 2, 'BIO130': 4, 'HIST140': 1, 'ECON150': 6}],\n   [38, 3, '38/3'])],\n [('regression: proximity weight 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 weight 2',\n   [[['s4', 'MATH101H'], ['s5', 'MATH101'], ['s5', 'HIST140'], ['s1', 'MATH101H'], ['s1', 'ECON150'],\n     ['s1', 'PHYS110'], ['s5', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'PHYS110'], ['s1', 'HIST140'],\n     ['s3', 'PHYS110'], ['s5', 'MATH101'], ['s2', 'HIST140'], ['s2', 'BIO130'], ['s4', 'MATH101']],\n    {'MATH101': 0, 'MATH101H': 0, 'PHYS110': 5, 'CHEM120': 2, 'BIO130': 3, 'HIST140': 6, 'ECON150': 7}],\n   [94, 5, '94/5']),\n  ('partial repair guard 3',\n   [[['s5', 'CHEM120'], ['s3', 'MATH101H'], ['s2', 'ECON150'], ['s5', 'MATH101H'], ['s1', 'ECON150'],\n     ['s4', 'CHEM120'], ['s2', 'CHEM120'], ['s3', 'BIO130'], ['s4', 'PHYS110'], ['s5', 'ECON150'],\n     ['s3', 'ECON150'], ['s2', 'PHYS110'], ['s5', 'HIST140'], ['s4', 'MATH101H'], ['s4', 'BIO130'],\n     ['s4', 'BIO130'], ['s3', 'HIST140'], ['s2', 'MATH101H']],\n    {'MATH101': 3, 'MATH101H': 6, 'PHYS110': 1, 'CHEM120': 1, 'BIO130': 6, 'HIST140': 6, 'ECON150': 5}],\n   [110, 5, '22']),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0, 'PHYS110': 1}],\n   [16, 1, '16']),\n  ('normal control 5',\n   [[['s5', 'MATH101'], ['s3', 'BIO130'], ['s5', 'CHEM120'], ['s2', 'ECON150'], ['s2', 'PHYS110'],\n     ['s2', 'PHYS110'], ['s2', 'MATH101H']],\n    {'MATH101': 0, 'MATH101H': 2, 'PHYS110': 0, 'CHEM120': 5, 'BIO130': 6, 'HIST140': 7, 'ECON150': 6}],\n   [11, 3, '11/3']),\n  ('normal control 6',\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  ('normal control 7',\n   [[['s5', 'MATH101'], ['s5', 'HIST140'], ['s1', 'HIST140'], ['s1', 'BIO130'], ['s5', 'BIO130'],\n     ['s1', 'PHYS110'], ['s2', 'HIST140']],\n    {'MATH101': 4, 'MATH101H': 7, 'PHYS110': 7, 'CHEM120': 6, 'BIO130': 3, 'HIST140': 2, 'ECON150': 4}],\n   [59, 3, '59/3']),\n  ('normal control 8',\n   [[['s1', 'MATH101H'], ['s1', 'CHEM120'], ['s3', 'HIST140'], ['s3', 'PHYS110'], ['s3', 'MATH101'],\n     ['s3', 'ECON150'], ['s4', 'PHYS110'], ['s3', 'HIST140']],\n    {'MATH101': 4, 'MATH101H': 4, 'PHYS110': 6, 'CHEM120': 7, 'BIO130': 0, 'HIST140': 0, 'ECON150': 5}],\n   [47, 3, '47/3'])],\n [('regression: proximity weight 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 weight 2',\n   [[['s5', 'MATH101H'], ['s3', 'HIST140'], ['s4', 'ECON150'], ['s5', 'CHEM120'], ['s4', 'HIST140'],\n     ['s5', 'HIST140'], ['s3', 'ECON150'], ['s4', 'ECON150'], ['s3', 'MATH101']],\n    {'MATH101': 2, 'MATH101H': 4, 'PHYS110': 4, 'CHEM120': 2, 'BIO130': 1, 'HIST140': 1, 'ECON150': 3}],\n   [76, 3, '76/3']),\n  ('partial repair guard 3',\n   [[['s5', 'PHYS110'], ['s5', 'BIO130'], ['s4', 'ECON150'], ['s5', 'HIST140'], ['s5', 'PHYS110'],\n     ['s5', 'MATH101H'], ['s1', 'CHEM120'], ['s1', 'ECON150'], ['s4', 'HIST140']],\n    {'MATH101': 3, 'MATH101H': 4, 'PHYS110': 2, 'CHEM120': 5, 'BIO130': 5, 'HIST140': 3, 'ECON150': 1}],\n   [78, 3, '26']),\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   [[['s2', 'ECON150'], ['s2', 'ECON150'], ['s4', 'MATH101H'], ['s4', 'HIST140'], ['s3', 'HIST140'],\n     ['s3', 'PHYS110'], ['s3', 'CHEM120'], ['s3', 'MATH101'], ['s2', 'PHYS110'], ['s4', 'CHEM120'],\n     ['s4', 'BIO130'], ['s2', 'CHEM120'], ['s1', 'MATH101']],\n    {'MATH101': 7, 'MATH101H': 5, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 7, 'HIST140': 4, 'ECON150': 5}],\n   [116, 4, '29']),\n  ('normal control 7',\n   [[['s2', 'BIO130'], ['s3', 'ECON150'], ['s4', 'BIO130'], ['s2', 'MATH101H'], ['s1', 'BIO130'],\n     ['s1', 'MATH101'], ['s5', 'HIST140'], ['s2', 'MATH101H'], ['s2', 'MATH101'], ['s1', 'PHYS110'],\n     ['s4', 'CHEM120'], ['s2', 'ECON150'], ['s1', 'MATH101H']],\n    {'MATH101': 6, 'MATH101H': 2, 'PHYS110': 7, 'CHEM120': 1, 'BIO130': 4, 'HIST140': 4, 'ECON150': 4}],\n   [77, 5, '77/5']),\n  ('normal control 8',\n   [[['s2', 'PHYS110'], ['s1', 'PHYS110'], ['s2', 'CHEM120'], ['s2', 'ECON150'], ['s1', 'CHEM120'],\n     ['s5', 'BIO130'], ['s5', 'ECON150'], ['s1', 'ECON150'], ['s1', 'HIST140'], ['s2', 'BIO130']],\n    {'MATH101': 3, 'MATH101H': 5, 'PHYS110': 7, 'CHEM120': 1, 'BIO130': 2, 'HIST140': 6, 'ECON150': 1}],\n   [67, 3, '67/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-weight","generated_at":"2026-09-29T14:52:04.121717+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.","root_cause":"The weight exponent is reversed.","sha256":"a61f6c3d713b44683a44f484c6b0a2a3803a3d0d2acf64e050aafe2a8e94dbaf","title":"Proximity weight grows with distance · 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":42.539,"exit_code":1,"observations":[{"actual":[32,1,"32"],"check":"regression: proximity weight 1","expected":[16,1,"16"],"passed":false},{"actual":[106,4,"53/2"],"check":"regression variant: proximity weight 2","expected":[52,4,"13"],"passed":false},{"actual":[238,4,"119/2"],"check":"partial repair guard 3","expected":[105,4,"105/4"],"passed":false},{"actual":[0,1,"0"],"check":"boundary control 4","expected":[0,1,"0"],"passed":true},{"actual":[0,1,"0"],"check":"boundary control 5","expected":[0,1,"0"],"passed":true},{"actual":[172,3,"172/3"],"check":"normal control 6","expected":[75,3,"25"],"passed":false},{"actual":[164,4,"41"],"check":"normal control 7","expected":[80,4,"20"],"passed":false},{"actual":[38,5,"38/5"],"check":"normal control 8","expected":[14,5,"14/5"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: proximity weight 1\", \"actual\": [32, 1, \"32\"], \"expected\": [16, 1, \"16\"], \"passed\": false}, {\"check\": \"regression variant: proximity weight 2\", \"actual\": [106, 4, \"53/2\"], \"expected\": [52, 4, \"13\"], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [238, 4, \"119/2\"], \"expected\": [105, 4, \"105/4\"], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [0, 1, \"0\"], \"expected\": [0, 1, \"0\"], \"passed\": true}, {\"check\": \"boundary control 5\", \"actual\": [0, 1, \"0\"], \"expected\": [0, 1, \"0\"], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [172, 3, \"172/3\"], \"expected\": [75, 3, \"25\"], \"passed\": false}, {\"check\": \"normal control 7\", \"actual\": [164, 4, \"41\"], \"expected\": [80, 4, \"20\"], \"passed\": false}, {\"check\": \"normal control 8\", \"actual\": [38, 5, \"38/5\"], \"expected\": [14, 5, \"14/5\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":46.351,"exit_code":1,"observations":[{"actual":[1,1,"1"],"check":"regression: proximity weight 1","expected":[16,1,"16"],"passed":false},{"actual":[7,4,"7/4"],"check":"regression variant: proximity weight 2","expected":[52,4,"13"],"passed":false},{"actual":[90,4,"45/2"],"check":"partial repair guard 3","expected":[105,4,"105/4"],"passed":false},{"actual":[0,1,"0"],"check":"boundary control 4","expected":[0,1,"0"],"passed":true},{"actual":[0,1,"0"],"check":"boundary control 5","expected":[0,1,"0"],"passed":true},{"actual":[57,3,"19"],"check":"normal control 6","expected":[75,3,"25"],"passed":false},{"actual":[17,4,"17/4"],"check":"normal control 7","expected":[80,4,"20"],"passed":false},{"actual":[20,5,"4"],"check":"normal control 8","expected":[14,5,"14/5"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: proximity weight 1\", \"actual\": [1, 1, \"1\"], \"expected\": [16, 1, \"16\"], \"passed\": false}, {\"check\": \"regression variant: proximity weight 2\", \"actual\": [7, 4, \"7/4\"], \"expected\": [52, 4, \"13\"], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [90, 4, \"45/2\"], \"expected\": [105, 4, \"105/4\"], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [0, 1, \"0\"], \"expected\": [0, 1, \"0\"], \"passed\": true}, {\"check\": \"boundary control 5\", \"actual\": [0, 1, \"0\"], \"expected\": [0, 1, \"0\"], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [57, 3, \"19\"], \"expected\": [75, 3, \"25\"], \"passed\": false}, {\"check\": \"normal control 7\", \"actual\": [17, 4, \"17/4\"], \"expected\": [80, 4, \"20\"], \"passed\": false}, {\"check\": \"normal control 8\", \"actual\": [20, 5, \"4\"], \"expected\": [14, 5, \"14/5\"], \"passed\": false}], \"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."}}