{"abstract":"A Friday-afternoon restriction still allows a Friday-evening exam.","category":"Exam timetabling constraints","checks":8,"contract":"sits [student, exam, period]; periods index -> [weekday 0=Mon..6=Sun, slot am/pm/eve]; avoid student -> rules \"day\" (whole day) or \"day-slot\" (that slot and later slots that day). Each sitting matching any rule is reported once as [student, exam, period]; return rows sorted.","contract_signature":"sits, periods, avoid","evaluation_group":"w2-exam-timetabling-constraints-observance-unavailability","failed_approach":"A strict comparison excludes the named slot itself.","family":"w2-exam-timetabling-constraints-observance-unavailability-slot-onward","id":"FA-94721","implementations":{"attempt":{"sha256":"289204c86855d9b40ff2735825b41843efaa0487ef0c29b2ca091c1ad0a06da7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(sits, periods, avoid):\n    names = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']\n    order = ['am', 'pm', 'eve']\n    out = []\n    for st, ex, p in sits:\n        wd, slot = periods[p]\n        for rule in avoid.get(st, []):\n            parts = rule.split('-')\n            if parts[0] != names[wd]:\n                continue\n            if len(parts) == 1 or order.index(slot) > order.index(parts[1]):\n                out.append([st, ex, p])\n                break\n    return sorted(out)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: slot onward 1', [[['s1', 'A', 0]], [[4, 'eve']], {'s1': ['fri-pm']}], [['s1', 'A', 0]]),\n  ('regression variant: slot onward 2',\n   [[['s3', 'ECON150', 5], ['s1', 'PHYS110', 5], ['s3', 'BIO130', 4]],\n    [[5, 'pm'], [0, 'eve'], [1, 'pm'], [2, 'pm'], [6, 'eve'], [0, 'pm']],\n    {'s1': ['fri'], 's2': ['sat', 'sun-am'], 's3': ['sun-am', 'fri']}],\n   [['s3', 'BIO130', 4]]),\n  ('partial repair guard 3',\n   [[['s3', 'MATH101H', 4]], [[6, 'am'], [5, 'eve'], [0, 'am'], [5, 'pm'], [6, 'am'], [6, 'am']],\n    {'s1': ['sat', 'sun-am', 'fri-eve'], 's2': ['fri-pm', 'sun-am'], 's3': ['sun-am', 'fri', 'fri-eve']}],\n   [['s3', 'MATH101H', 4]]),\n  ('boundary control 4', [[['s1', 'A', 0]], [[4, 'eve']], {'s1': ['fri-eve', 'fri-pm']}], [['s1', 'A', 0]]),\n  ('normal control 5',\n   [[['s2', 'MATH101', 3], ['s1', 'BIO130', 2], ['s2', 'BIO130', 3]],\n    [[1, 'pm'], [6, 'am'], [2, 'pm'], [2, 'pm'], [3, 'eve'], [3, 'eve']],\n    {'s1': ['fri', 'sat'], 's3': ['sun-am', 'fri']}],\n   []),\n  ('normal control 6',\n   [[['s1', 'CHEM120', 3], ['s1', 'BIO130', 4], ['s2', 'ECON150', 4], ['s1', 'HIST140', 0],\n     ['s1', 'CHEM120', 1]],\n    [[6, 'pm'], [3, 'pm'], [5, 'pm'], [0, 'eve'], [6, 'am'], [1, 'am']],\n    {'s1': ['mon-eve', 'fri', 'sun-am'], 's2': ['sat', 'fri-pm', 'fri']}],\n   [['s1', 'BIO130', 4], ['s1', 'CHEM120', 3], ['s1', 'HIST140', 0]]),\n  ('normal control 7',\n   [[['s1', 'ECON150', 3], ['s1', 'CHEM120', 1], ['s2', 'PHYS110', 2], ['s3', 'MATH101', 1],\n     ['s3', 'PHYS110', 1], ['s3', 'ECON150', 1]],\n    [[3, 'am'], [1, 'eve'], [1, 'pm'], [3, 'pm'], [1, 'am'], [4, 'am']],\n    {'s1': ['sat', 'sun-am', 'fri-eve'], 's2': ['fri-eve'], 's3': ['sat', 'fri-eve', 'fri']}],\n   []),\n  ('normal control 8',\n   [[['s3', 'BIO130', 1]], [[2, 'pm'], [0, 'am'], [2, 'am'], [6, 'eve'], [3, 'pm'], [3, 'eve']],\n    {'s1': ['sun-am', 'fri-pm', 'sat'], 's3': ['fri-pm']}],\n   [])],\n [('regression: slot onward 1',\n   [[['s2', 'PHYS110', 4], ['s3', 'BIO130', 3], ['s1', 'CHEM120', 1], ['s1', 'HIST140', 5],\n     ['s3', 'HIST140', 3], ['s3', 'HIST140', 5]],\n    [[5, 'eve'], [3, 'eve'], [1, 'eve'], [6, 'eve'], [0, 'am'], [5, 'am']],\n    {'s1': ['mon-eve', 'sat'], 's2': ['fri-pm'], 's3': ['mon-eve', 'sun-am']}],\n   [['s1', 'HIST140', 5], ['s3', 'BIO130', 3], ['s3', 'HIST140', 3]]),\n  ('regression variant: slot onward 2',\n   [[['s1', 'PHYS110', 5], ['s3', 'PHYS110', 0], ['s3', 'ECON150', 0], ['s3', 'MATH101', 5],\n     ['s2', 'BIO130', 3], ['s1', 'HIST140', 4]],\n    [[3, 'am'], [5, 'am'], [1, 'pm'], [0, 'pm'], [5, 'eve'], [6, 'eve']],\n    {'s1': ['fri-eve', 'sun-am', 'sat'], 's2': ['fri', 'sat'], 's3': ['sat', 'fri-pm', 'sun-am']}],\n   [['s1', 'HIST140', 4], ['s1', 'PHYS110', 5], ['s3', 'MATH101', 5]]),\n  ('partial repair guard 3',\n   [[['s2', 'BIO130', 5], ['s3', 'MATH101', 3]],\n    [[5, 'pm'], [5, 'eve'], [3, 'pm'], [4, 'eve'], [1, 'eve'], [2, 'am']],\n    {'s2': ['fri', 'fri-eve', 'mon-eve'], 's3': ['fri-eve']}],\n   [['s3', 'MATH101', 3]]),\n  ('boundary control 4', [[['s1', 'A', 0]], [[4, 'am']], {'s1': ['fri-pm']}], []),\n  ('normal control 5',\n   [[['s1', 'HIST140', 4], ['s2', 'BIO130', 5], ['s2', 'ECON150', 5], ['s3', 'BIO130', 2],\n     ['s2', 'BIO130', 4], ['s2', 'ECON150', 3]],\n    [[3, 'pm'], [5, 'pm'], [1, 'pm'], [4, 'am'], [2, 'eve'], [3, 'am']],\n    {'s1': ['sat'], 's3': ['fri', 'fri-eve', 'sun-am']}],\n   []),\n  ('normal control 6',\n   [[['s3', 'MATH101', 3], ['s3', 'CHEM120', 0], ['s1', 'PHYS110', 5], ['s1', 'BIO130', 1]],\n    [[3, 'eve'], [0, 'am'], [4, 'eve'], [1, 'am'], [5, 'am'], [4, 'pm']],\n    {'s1': ['sun-am', 'fri-pm'], 's2': ['mon-eve', 'sun-am'], 's3': ['sun-am', 'mon-eve']}],\n   [['s1', 'PHYS110', 5]]),\n  ('normal control 7',\n   [[['s3', 'HIST140', 2], ['s1', 'CHEM120', 3], ['s3', 'MATH101', 0], ['s2', 'PHYS110', 5]],\n    [[5, 'eve'], [1, 'am'], [0, 'pm'], [5, 'pm'], [1, 'am'], [5, 'pm']],\n    {'s2': ['fri-eve', 'fri', 'sat'], 's3': ['fri', 'sat']}],\n   [['s2', 'PHYS110', 5], ['s3', 'MATH101', 0]]),\n  ('normal control 8',\n   [[['s2', 'HIST140', 4]], [[4, 'eve'], [1, 'am'], [3, 'pm'], [2, 'eve'], [1, 'am'], [6, 'am']],\n    {'s1': ['sun-am', 'sat'], 's3': ['fri-pm', 'fri']}],\n   [])],\n [('regression: slot onward 1',\n   [[['s3', 'PHYS110', 5], ['s2', 'MATH101', 5], ['s3', 'MATH101H', 2]],\n    [[1, 'am'], [2, 'eve'], [0, 'eve'], [2, 'eve'], [4, 'eve'], [6, 'eve']],\n    {'s1': ['fri', 'fri-eve', 'sun-am'], 's2': ['fri-pm'], 's3': ['sun-am', 'fri']}],\n   [['s3', 'PHYS110', 5]]),\n  ('regression variant: slot onward 2',\n   [[['s1', 'BIO130', 4], ['s3', 'MATH101H', 3], ['s2', 'CHEM120', 5], ['s1', 'MATH101', 3],\n     ['s3', 'MATH101', 4]],\n    [[5, 'eve'], [6, 'am'], [2, 'eve'], [4, 'eve'], [2, 'eve'], [5, 'am']],\n    {'s1': ['sat', 'fri-pm'], 's2': ['sat', 'fri-pm', 'fri'], 's3': ['sat', 'sun-am']}],\n   [['s1', 'MATH101', 3], ['s2', 'CHEM120', 5]]),\n  ('partial repair guard 3',\n   [[['s2', 'MATH101', 0], ['s1', 'PHYS110', 1]],\n    [[0, 'eve'], [0, 'pm'], [2, 'pm'], [5, 'pm'], [5, 'pm'], [1, 'am']],\n    {'s1': ['sun-am'], 's2': ['sun-am', 'mon-eve'], 's3': ['sun-am', 'sat']}],\n   [['s2', 'MATH101', 0]]),\n  ('boundary control 4', [[['s1', 'A', 0]], [[0, 'am']], {'s1': ['sun']}], []),\n  ('normal control 5',\n   [[['s1', 'ECON150', 5], ['s1', 'HIST140', 3], ['s3', 'HIST140', 3], ['s2', 'PHYS110', 5],\n     ['s3', 'BIO130', 4], ['s3', 'BIO130', 4]],\n    [[0, 'pm'], [5, 'eve'], [4, 'pm'], [1, 'pm'], [2, 'eve'], [0, 'pm']],\n    {'s1': ['mon-eve'], 's2': ['fri-eve', 'sun-am'], 's3': ['mon-eve']}],\n   []),\n  ('normal control 6',\n   [[['s3', 'MATH101', 1], ['s1', 'HIST140', 1], ['s3', 'ECON150', 5]],\n    [[6, 'am'], [4, 'pm'], [6, 'eve'], [6, 'am'], [3, 'am'], [5, 'pm']],\n    {'s1': ['sun-am', 'fri-eve', 'sat'], 's2': ['sun-am'], 's3': ['fri-eve']}],\n   []),\n  ('normal control 7',\n   [[['s3', 'PHYS110', 2], ['s1', 'MATH101H', 5]],\n    [[2, 'pm'], [2, 'pm'], [1, 'am'], [3, 'pm'], [2, 'am'], [5, 'eve']],\n    {'s1': ['mon-eve'], 's2': ['fri-eve', 'sat'], 's3': ['fri-pm', 'sat']}],\n   []),\n  ('normal control 8',\n   [[['s1', 'ECON150', 4], ['s2', 'CHEM120', 4], ['s1', 'BIO130', 0], ['s2', 'ECON150', 4],\n     ['s3', 'CHEM120', 3], ['s3', 'MATH101H', 0]],\n    [[0, 'pm'], [1, 'pm'], [5, 'pm'], [1, 'eve'], [0, 'pm'], [5, 'eve']],\n    {'s1': ['fri-eve'], 's2': ['fri'], 's3': ['sun-am']}],\n   [])],\n [('regression: slot onward 1',\n   [[['s1', 'HIST140', 4]], [[4, 'eve'], [3, 'am'], [5, 'eve'], [6, 'pm'], [6, 'eve'], [6, 'pm']],\n    {'s1': ['fri-pm', 'fri-eve', 'sun-am'], 's2': ['mon-eve', 'fri'], 's3': ['fri', 'fri-eve']}],\n   [['s1', 'HIST140', 4]]),\n  ('regression variant: slot onward 2',\n   [[['s1', 'CHEM120', 4], ['s2', 'ECON150', 4], ['s3', 'CHEM120', 4], ['s3', 'MATH101H', 0],\n     ['s2', 'PHYS110', 2]],\n    [[3, 'pm'], [2, 'pm'], [3, 'pm'], [1, 'pm'], [6, 'eve'], [4, 'eve']],\n    {'s3': ['sun-am', 'sat', 'fri-eve']}],\n   [['s3', 'CHEM120', 4]]),\n  ('partial repair guard 3',\n   [[['s2', 'BIO130', 4], ['s1', 'ECON150', 1], ['s2', 'BIO130', 1], ['s2', 'ECON150', 1]],\n    [[6, 'eve'], [5, 'eve'], [1, 'pm'], [5, 'eve'], [6, 'am'], [3, 'eve']],\n    {'s1': ['fri-eve', 'sun-am', 'sat'], 's2': ['fri', 'fri-eve', 'sun-am'], 's3': ['sat']}],\n   [['s1', 'ECON150', 1], ['s2', 'BIO130', 4]]),\n  ('boundary control 4', [[['s1', 'A', 0]], [[5, 'am']], {'s1': ['sat', 'fri-pm']}], [['s1', 'A', 0]]),\n  ('normal control 5',\n   [[['s3', 'ECON150', 5], ['s1', 'PHYS110', 5], ['s3', 'BIO130', 4]],\n    [[5, 'pm'], [0, 'eve'], [1, 'pm'], [2, 'pm'], [6, 'eve'], [0, 'pm']],\n    {'s1': ['fri'], 's2': ['sat', 'sun-am'], 's3': ['sun-am', 'fri']}],\n   [['s3', 'BIO130', 4]]),\n  ('normal control 6',\n   [[['s1', 'CHEM120', 5], ['s2', 'CHEM120', 3], ['s2', 'MATH101H', 1], ['s2', 'MATH101', 0],\n     ['s3', 'MATH101', 3]],\n    [[0, 'eve'], [1, 'am'], [5, 'am'], [4, 'pm'], [4, 'eve'], [1, 'eve']],\n    {'s1': ['fri-pm', 'fri-eve'], 's2': ['fri-pm']}],\n   [['s2', 'CHEM120', 3]]),\n  ('normal control 7',\n   [[['s2', 'PHYS110', 1], ['s2', 'ECON150', 2], ['s2', 'BIO130', 0], ['s3', 'CHEM120', 2]],\n    [[1, 'eve'], [0, 'eve'], [5, 'eve'], [3, 'am'], [1, 'am'], [2, 'am']],\n    {'s1': ['fri-pm'], 's2': ['mon-eve'], 's3': ['sat', 'fri-eve', 'fri']}],\n   [['s2', 'PHYS110', 1], ['s3', 'CHEM120', 2]]),\n  ('normal control 8',\n   [[['s2', 'BIO130', 1], ['s1', 'ECON150', 0], ['s2', 'BIO130', 0], ['s2', 'CHEM120', 0]],\n    [[0, 'eve'], [5, 'am'], [0, 'pm'], [3, 'eve'], [1, 'eve'], [6, 'pm']],\n    {'s1': ['sun-am', 'mon-eve'], 's2': ['fri-pm', 'sun-am'], 's3': ['sat', 'fri-eve']}],\n   [['s1', 'ECON150', 0]])],\n [('regression: slot onward 1',\n   [[['s3', 'BIO130', 4], ['s3', 'MATH101', 1], ['s3', 'ECON150', 4], ['s2', 'CHEM120', 0]],\n    [[6, 'pm'], [5, 'pm'], [1, 'eve'], [4, 'eve'], [3, 'am'], [3, 'pm']],\n    {'s2': ['sun-am'], 's3': ['fri-eve', 'fri']}],\n   [['s2', 'CHEM120', 0]]),\n  ('regression variant: slot onward 2',\n   [[['s3', 'ECON150', 2], ['s3', 'HIST140', 5], ['s1', 'PHYS110', 4]],\n    [[2, 'am'], [2, 'pm'], [6, 'eve'], [1, 'eve'], [2, 'pm'], [2, 'pm']],\n    {'s1': ['sat', 'fri', 'mon-eve'], 's2': ['sat'], 's3': ['sun-am', 'fri']}],\n   [['s3', 'ECON150', 2]]),\n  ('partial repair guard 3',\n   [[['s2', 'ECON150', 3], ['s2', 'CHEM120', 4]],\n    [[2, 'pm'], [2, 'pm'], [2, 'eve'], [0, 'eve'], [6, 'am'], [1, 'eve']],\n    {'s2': ['sun-am', 'fri'], 's3': ['fri-eve', 'fri-pm', 'fri']}],\n   [['s2', 'CHEM120', 4]]),\n  ('boundary control 4', [[['s1', 'A', 0]], [[4, 'eve']], {'s1': ['fri-pm']}], [['s1', 'A', 0]]),\n  ('normal control 5',\n   [[['s1', 'MATH101H', 3], ['s1', 'ECON150', 2], ['s1', 'HIST140', 2], ['s2', 'MATH101', 3],\n     ['s2', 'ECON150', 1]],\n    [[2, 'am'], [5, 'eve'], [3, 'am'], [1, 'eve'], [0, 'eve'], [2, 'am']],\n    {'s1': ['mon-eve', 'fri-eve'], 's2': ['fri-pm', 'fri-eve', 'mon-eve'], 's3': ['fri', 'sat', 'fri-pm']}],\n   []),\n  ('normal control 6',\n   [[['s1', 'MATH101H', 4], ['s3', 'BIO130', 1], ['s3', 'BIO130', 2], ['s3', 'BIO130', 3],\n     ['s1', 'ECON150', 4], ['s1', 'PHYS110', 3]],\n    [[0, 'am'], [1, 'eve'], [3, 'eve'], [6, 'pm'], [5, 'eve'], [2, 'eve']], {'s2': ['sat']}],\n   []),\n  ('normal control 7',\n   [[['s3', 'MATH101', 5], ['s2', 'MATH101H', 4]],\n    [[3, 'eve'], [2, 'eve'], [2, 'am'], [1, 'pm'], [0, 'eve'], [2, 'pm']],\n    {'s1': ['fri-pm', 'mon-eve', 'sun-am'], 's3': ['fri']}],\n   []),\n  ('normal control 8',\n   [[['s2', 'HIST140', 3], ['s3', 'CHEM120', 1], ['s3', 'HIST140', 0], ['s2', 'ECON150', 3]],\n    [[3, 'pm'], [6, 'pm'], [3, 'pm'], [0, 'pm'], [1, 'eve'], [1, 'pm']],\n    {'s1': ['mon-eve', 'fri-eve', 'fri-pm'], 's2': ['mon-eve', 'sun-am'], 's3': ['fri-eve']}],\n   [])]]\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":"2bf802598d9de19ed91cc207c5f91d765fe70ef19df8958a9cc6b12b48bc9d53","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(sits, periods, avoid):\n    names = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']\n    order = ['am', 'pm', 'eve']\n    out = []\n    for st, ex, p in sits:\n        wd, slot = periods[p]\n        for rule in avoid.get(st, []):\n            parts = rule.split('-')\n            if parts[0] != names[wd]:\n                continue\n            if len(parts) == 1 or order.index(slot) == order.index(parts[1]):\n                out.append([st, ex, p])\n                break\n    return sorted(out)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: slot onward 1', [[['s1', 'A', 0]], [[4, 'eve']], {'s1': ['fri-pm']}], [['s1', 'A', 0]]),\n  ('regression variant: slot onward 2',\n   [[['s3', 'ECON150', 5], ['s1', 'PHYS110', 5], ['s3', 'BIO130', 4]],\n    [[5, 'pm'], [0, 'eve'], [1, 'pm'], [2, 'pm'], [6, 'eve'], [0, 'pm']],\n    {'s1': ['fri'], 's2': ['sat', 'sun-am'], 's3': ['sun-am', 'fri']}],\n   [['s3', 'BIO130', 4]]),\n  ('partial repair guard 3',\n   [[['s3', 'MATH101H', 4]], [[6, 'am'], [5, 'eve'], [0, 'am'], [5, 'pm'], [6, 'am'], [6, 'am']],\n    {'s1': ['sat', 'sun-am', 'fri-eve'], 's2': ['fri-pm', 'sun-am'], 's3': ['sun-am', 'fri', 'fri-eve']}],\n   [['s3', 'MATH101H', 4]]),\n  ('boundary control 4', [[['s1', 'A', 0]], [[4, 'eve']], {'s1': ['fri-eve', 'fri-pm']}], [['s1', 'A', 0]]),\n  ('normal control 5',\n   [[['s2', 'MATH101', 3], ['s1', 'BIO130', 2], ['s2', 'BIO130', 3]],\n    [[1, 'pm'], [6, 'am'], [2, 'pm'], [2, 'pm'], [3, 'eve'], [3, 'eve']],\n    {'s1': ['fri', 'sat'], 's3': ['sun-am', 'fri']}],\n   []),\n  ('normal control 6',\n   [[['s1', 'CHEM120', 3], ['s1', 'BIO130', 4], ['s2', 'ECON150', 4], ['s1', 'HIST140', 0],\n     ['s1', 'CHEM120', 1]],\n    [[6, 'pm'], [3, 'pm'], [5, 'pm'], [0, 'eve'], [6, 'am'], [1, 'am']],\n    {'s1': ['mon-eve', 'fri', 'sun-am'], 's2': ['sat', 'fri-pm', 'fri']}],\n   [['s1', 'BIO130', 4], ['s1', 'CHEM120', 3], ['s1', 'HIST140', 0]]),\n  ('normal control 7',\n   [[['s1', 'ECON150', 3], ['s1', 'CHEM120', 1], ['s2', 'PHYS110', 2], ['s3', 'MATH101', 1],\n     ['s3', 'PHYS110', 1], ['s3', 'ECON150', 1]],\n    [[3, 'am'], [1, 'eve'], [1, 'pm'], [3, 'pm'], [1, 'am'], [4, 'am']],\n    {'s1': ['sat', 'sun-am', 'fri-eve'], 's2': ['fri-eve'], 's3': ['sat', 'fri-eve', 'fri']}],\n   []),\n  ('normal control 8',\n   [[['s3', 'BIO130', 1]], [[2, 'pm'], [0, 'am'], [2, 'am'], [6, 'eve'], [3, 'pm'], [3, 'eve']],\n    {'s1': ['sun-am', 'fri-pm', 'sat'], 's3': ['fri-pm']}],\n   [])],\n [('regression: slot onward 1',\n   [[['s2', 'PHYS110', 4], ['s3', 'BIO130', 3], ['s1', 'CHEM120', 1], ['s1', 'HIST140', 5],\n     ['s3', 'HIST140', 3], ['s3', 'HIST140', 5]],\n    [[5, 'eve'], [3, 'eve'], [1, 'eve'], [6, 'eve'], [0, 'am'], [5, 'am']],\n    {'s1': ['mon-eve', 'sat'], 's2': ['fri-pm'], 's3': ['mon-eve', 'sun-am']}],\n   [['s1', 'HIST140', 5], ['s3', 'BIO130', 3], ['s3', 'HIST140', 3]]),\n  ('regression variant: slot onward 2',\n   [[['s1', 'PHYS110', 5], ['s3', 'PHYS110', 0], ['s3', 'ECON150', 0], ['s3', 'MATH101', 5],\n     ['s2', 'BIO130', 3], ['s1', 'HIST140', 4]],\n    [[3, 'am'], [5, 'am'], [1, 'pm'], [0, 'pm'], [5, 'eve'], [6, 'eve']],\n    {'s1': ['fri-eve', 'sun-am', 'sat'], 's2': ['fri', 'sat'], 's3': ['sat', 'fri-pm', 'sun-am']}],\n   [['s1', 'HIST140', 4], ['s1', 'PHYS110', 5], ['s3', 'MATH101', 5]]),\n  ('partial repair guard 3',\n   [[['s2', 'BIO130', 5], ['s3', 'MATH101', 3]],\n    [[5, 'pm'], [5, 'eve'], [3, 'pm'], [4, 'eve'], [1, 'eve'], [2, 'am']],\n    {'s2': ['fri', 'fri-eve', 'mon-eve'], 's3': ['fri-eve']}],\n   [['s3', 'MATH101', 3]]),\n  ('boundary control 4', [[['s1', 'A', 0]], [[4, 'am']], {'s1': ['fri-pm']}], []),\n  ('normal control 5',\n   [[['s1', 'HIST140', 4], ['s2', 'BIO130', 5], ['s2', 'ECON150', 5], ['s3', 'BIO130', 2],\n     ['s2', 'BIO130', 4], ['s2', 'ECON150', 3]],\n    [[3, 'pm'], [5, 'pm'], [1, 'pm'], [4, 'am'], [2, 'eve'], [3, 'am']],\n    {'s1': ['sat'], 's3': ['fri', 'fri-eve', 'sun-am']}],\n   []),\n  ('normal control 6',\n   [[['s3', 'MATH101', 3], ['s3', 'CHEM120', 0], ['s1', 'PHYS110', 5], ['s1', 'BIO130', 1]],\n    [[3, 'eve'], [0, 'am'], [4, 'eve'], [1, 'am'], [5, 'am'], [4, 'pm']],\n    {'s1': ['sun-am', 'fri-pm'], 's2': ['mon-eve', 'sun-am'], 's3': ['sun-am', 'mon-eve']}],\n   [['s1', 'PHYS110', 5]]),\n  ('normal control 7',\n   [[['s3', 'HIST140', 2], ['s1', 'CHEM120', 3], ['s3', 'MATH101', 0], ['s2', 'PHYS110', 5]],\n    [[5, 'eve'], [1, 'am'], [0, 'pm'], [5, 'pm'], [1, 'am'], [5, 'pm']],\n    {'s2': ['fri-eve', 'fri', 'sat'], 's3': ['fri', 'sat']}],\n   [['s2', 'PHYS110', 5], ['s3', 'MATH101', 0]]),\n  ('normal control 8',\n   [[['s2', 'HIST140', 4]], [[4, 'eve'], [1, 'am'], [3, 'pm'], [2, 'eve'], [1, 'am'], [6, 'am']],\n    {'s1': ['sun-am', 'sat'], 's3': ['fri-pm', 'fri']}],\n   [])],\n [('regression: slot onward 1',\n   [[['s3', 'PHYS110', 5], ['s2', 'MATH101', 5], ['s3', 'MATH101H', 2]],\n    [[1, 'am'], [2, 'eve'], [0, 'eve'], [2, 'eve'], [4, 'eve'], [6, 'eve']],\n    {'s1': ['fri', 'fri-eve', 'sun-am'], 's2': ['fri-pm'], 's3': ['sun-am', 'fri']}],\n   [['s3', 'PHYS110', 5]]),\n  ('regression variant: slot onward 2',\n   [[['s1', 'BIO130', 4], ['s3', 'MATH101H', 3], ['s2', 'CHEM120', 5], ['s1', 'MATH101', 3],\n     ['s3', 'MATH101', 4]],\n    [[5, 'eve'], [6, 'am'], [2, 'eve'], [4, 'eve'], [2, 'eve'], [5, 'am']],\n    {'s1': ['sat', 'fri-pm'], 's2': ['sat', 'fri-pm', 'fri'], 's3': ['sat', 'sun-am']}],\n   [['s1', 'MATH101', 3], ['s2', 'CHEM120', 5]]),\n  ('partial repair guard 3',\n   [[['s2', 'MATH101', 0], ['s1', 'PHYS110', 1]],\n    [[0, 'eve'], [0, 'pm'], [2, 'pm'], [5, 'pm'], [5, 'pm'], [1, 'am']],\n    {'s1': ['sun-am'], 's2': ['sun-am', 'mon-eve'], 's3': ['sun-am', 'sat']}],\n   [['s2', 'MATH101', 0]]),\n  ('boundary control 4', [[['s1', 'A', 0]], [[0, 'am']], {'s1': ['sun']}], []),\n  ('normal control 5',\n   [[['s1', 'ECON150', 5], ['s1', 'HIST140', 3], ['s3', 'HIST140', 3], ['s2', 'PHYS110', 5],\n     ['s3', 'BIO130', 4], ['s3', 'BIO130', 4]],\n    [[0, 'pm'], [5, 'eve'], [4, 'pm'], [1, 'pm'], [2, 'eve'], [0, 'pm']],\n    {'s1': ['mon-eve'], 's2': ['fri-eve', 'sun-am'], 's3': ['mon-eve']}],\n   []),\n  ('normal control 6',\n   [[['s3', 'MATH101', 1], ['s1', 'HIST140', 1], ['s3', 'ECON150', 5]],\n    [[6, 'am'], [4, 'pm'], [6, 'eve'], [6, 'am'], [3, 'am'], [5, 'pm']],\n    {'s1': ['sun-am', 'fri-eve', 'sat'], 's2': ['sun-am'], 's3': ['fri-eve']}],\n   []),\n  ('normal control 7',\n   [[['s3', 'PHYS110', 2], ['s1', 'MATH101H', 5]],\n    [[2, 'pm'], [2, 'pm'], [1, 'am'], [3, 'pm'], [2, 'am'], [5, 'eve']],\n    {'s1': ['mon-eve'], 's2': ['fri-eve', 'sat'], 's3': ['fri-pm', 'sat']}],\n   []),\n  ('normal control 8',\n   [[['s1', 'ECON150', 4], ['s2', 'CHEM120', 4], ['s1', 'BIO130', 0], ['s2', 'ECON150', 4],\n     ['s3', 'CHEM120', 3], ['s3', 'MATH101H', 0]],\n    [[0, 'pm'], [1, 'pm'], [5, 'pm'], [1, 'eve'], [0, 'pm'], [5, 'eve']],\n    {'s1': ['fri-eve'], 's2': ['fri'], 's3': ['sun-am']}],\n   [])],\n [('regression: slot onward 1',\n   [[['s1', 'HIST140', 4]], [[4, 'eve'], [3, 'am'], [5, 'eve'], [6, 'pm'], [6, 'eve'], [6, 'pm']],\n    {'s1': ['fri-pm', 'fri-eve', 'sun-am'], 's2': ['mon-eve', 'fri'], 's3': ['fri', 'fri-eve']}],\n   [['s1', 'HIST140', 4]]),\n  ('regression variant: slot onward 2',\n   [[['s1', 'CHEM120', 4], ['s2', 'ECON150', 4], ['s3', 'CHEM120', 4], ['s3', 'MATH101H', 0],\n     ['s2', 'PHYS110', 2]],\n    [[3, 'pm'], [2, 'pm'], [3, 'pm'], [1, 'pm'], [6, 'eve'], [4, 'eve']],\n    {'s3': ['sun-am', 'sat', 'fri-eve']}],\n   [['s3', 'CHEM120', 4]]),\n  ('partial repair guard 3',\n   [[['s2', 'BIO130', 4], ['s1', 'ECON150', 1], ['s2', 'BIO130', 1], ['s2', 'ECON150', 1]],\n    [[6, 'eve'], [5, 'eve'], [1, 'pm'], [5, 'eve'], [6, 'am'], [3, 'eve']],\n    {'s1': ['fri-eve', 'sun-am', 'sat'], 's2': ['fri', 'fri-eve', 'sun-am'], 's3': ['sat']}],\n   [['s1', 'ECON150', 1], ['s2', 'BIO130', 4]]),\n  ('boundary control 4', [[['s1', 'A', 0]], [[5, 'am']], {'s1': ['sat', 'fri-pm']}], [['s1', 'A', 0]]),\n  ('normal control 5',\n   [[['s3', 'ECON150', 5], ['s1', 'PHYS110', 5], ['s3', 'BIO130', 4]],\n    [[5, 'pm'], [0, 'eve'], [1, 'pm'], [2, 'pm'], [6, 'eve'], [0, 'pm']],\n    {'s1': ['fri'], 's2': ['sat', 'sun-am'], 's3': ['sun-am', 'fri']}],\n   [['s3', 'BIO130', 4]]),\n  ('normal control 6',\n   [[['s1', 'CHEM120', 5], ['s2', 'CHEM120', 3], ['s2', 'MATH101H', 1], ['s2', 'MATH101', 0],\n     ['s3', 'MATH101', 3]],\n    [[0, 'eve'], [1, 'am'], [5, 'am'], [4, 'pm'], [4, 'eve'], [1, 'eve']],\n    {'s1': ['fri-pm', 'fri-eve'], 's2': ['fri-pm']}],\n   [['s2', 'CHEM120', 3]]),\n  ('normal control 7',\n   [[['s2', 'PHYS110', 1], ['s2', 'ECON150', 2], ['s2', 'BIO130', 0], ['s3', 'CHEM120', 2]],\n    [[1, 'eve'], [0, 'eve'], [5, 'eve'], [3, 'am'], [1, 'am'], [2, 'am']],\n    {'s1': ['fri-pm'], 's2': ['mon-eve'], 's3': ['sat', 'fri-eve', 'fri']}],\n   [['s2', 'PHYS110', 1], ['s3', 'CHEM120', 2]]),\n  ('normal control 8',\n   [[['s2', 'BIO130', 1], ['s1', 'ECON150', 0], ['s2', 'BIO130', 0], ['s2', 'CHEM120', 0]],\n    [[0, 'eve'], [5, 'am'], [0, 'pm'], [3, 'eve'], [1, 'eve'], [6, 'pm']],\n    {'s1': ['sun-am', 'mon-eve'], 's2': ['fri-pm', 'sun-am'], 's3': ['sat', 'fri-eve']}],\n   [['s1', 'ECON150', 0]])],\n [('regression: slot onward 1',\n   [[['s3', 'BIO130', 4], ['s3', 'MATH101', 1], ['s3', 'ECON150', 4], ['s2', 'CHEM120', 0]],\n    [[6, 'pm'], [5, 'pm'], [1, 'eve'], [4, 'eve'], [3, 'am'], [3, 'pm']],\n    {'s2': ['sun-am'], 's3': ['fri-eve', 'fri']}],\n   [['s2', 'CHEM120', 0]]),\n  ('regression variant: slot onward 2',\n   [[['s3', 'ECON150', 2], ['s3', 'HIST140', 5], ['s1', 'PHYS110', 4]],\n    [[2, 'am'], [2, 'pm'], [6, 'eve'], [1, 'eve'], [2, 'pm'], [2, 'pm']],\n    {'s1': ['sat', 'fri', 'mon-eve'], 's2': ['sat'], 's3': ['sun-am', 'fri']}],\n   [['s3', 'ECON150', 2]]),\n  ('partial repair guard 3',\n   [[['s2', 'ECON150', 3], ['s2', 'CHEM120', 4]],\n    [[2, 'pm'], [2, 'pm'], [2, 'eve'], [0, 'eve'], [6, 'am'], [1, 'eve']],\n    {'s2': ['sun-am', 'fri'], 's3': ['fri-eve', 'fri-pm', 'fri']}],\n   [['s2', 'CHEM120', 4]]),\n  ('boundary control 4', [[['s1', 'A', 0]], [[4, 'eve']], {'s1': ['fri-pm']}], [['s1', 'A', 0]]),\n  ('normal control 5',\n   [[['s1', 'MATH101H', 3], ['s1', 'ECON150', 2], ['s1', 'HIST140', 2], ['s2', 'MATH101', 3],\n     ['s2', 'ECON150', 1]],\n    [[2, 'am'], [5, 'eve'], [3, 'am'], [1, 'eve'], [0, 'eve'], [2, 'am']],\n    {'s1': ['mon-eve', 'fri-eve'], 's2': ['fri-pm', 'fri-eve', 'mon-eve'], 's3': ['fri', 'sat', 'fri-pm']}],\n   []),\n  ('normal control 6',\n   [[['s1', 'MATH101H', 4], ['s3', 'BIO130', 1], ['s3', 'BIO130', 2], ['s3', 'BIO130', 3],\n     ['s1', 'ECON150', 4], ['s1', 'PHYS110', 3]],\n    [[0, 'am'], [1, 'eve'], [3, 'eve'], [6, 'pm'], [5, 'eve'], [2, 'eve']], {'s2': ['sat']}],\n   []),\n  ('normal control 7',\n   [[['s3', 'MATH101', 5], ['s2', 'MATH101H', 4]],\n    [[3, 'eve'], [2, 'eve'], [2, 'am'], [1, 'pm'], [0, 'eve'], [2, 'pm']],\n    {'s1': ['fri-pm', 'mon-eve', 'sun-am'], 's3': ['fri']}],\n   []),\n  ('normal control 8',\n   [[['s2', 'HIST140', 3], ['s3', 'CHEM120', 1], ['s3', 'HIST140', 0], ['s2', 'ECON150', 3]],\n    [[3, 'pm'], [6, 'pm'], [3, 'pm'], [0, 'pm'], [1, 'eve'], [1, 'pm']],\n    {'s1': ['mon-eve', 'fri-eve', 'fri-pm'], 's2': ['mon-eve', 'sun-am'], 's3': ['fri-eve']}],\n   [])]]\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-observance-unavailability-slot-onward","generated_at":"2026-09-29T14:52:07.121794+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Religious-observance and other unavailability constraints are student-specific hard constraints.","root_cause":"The slot rule matches only equality.","sha256":"7ce8330bd11f98e6f587a1c88d9352f2c3ae95de34fba4e0d3a32372a80eb531","title":"Day-slot restriction applies only to the named slot · 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":43.875,"exit_code":1,"observations":[{"actual":[["s1","A",0]],"check":"regression: slot onward 1","expected":[["s1","A",0]],"passed":true},{"actual":[["s3","BIO130",4]],"check":"regression variant: slot onward 2","expected":[["s3","BIO130",4]],"passed":true},{"actual":[],"check":"partial repair guard 3","expected":[["s3","MATH101H",4]],"passed":false},{"actual":[["s1","A",0]],"check":"boundary control 4","expected":[["s1","A",0]],"passed":true},{"actual":[],"check":"normal control 5","expected":[],"passed":true},{"actual":[["s1","HIST140",0]],"check":"normal control 6","expected":[["s1","BIO130",4],["s1","CHEM120",3],["s1","HIST140",0]],"passed":false},{"actual":[],"check":"normal control 7","expected":[],"passed":true},{"actual":[],"check":"normal control 8","expected":[],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: slot onward 1\", \"actual\": [[\"s1\", \"A\", 0]], \"expected\": [[\"s1\", \"A\", 0]], \"passed\": true}, {\"check\": \"regression variant: slot onward 2\", \"actual\": [[\"s3\", \"BIO130\", 4]], \"expected\": [[\"s3\", \"BIO130\", 4]], \"passed\": true}, {\"check\": \"partial repair guard 3\", \"actual\": [], \"expected\": [[\"s3\", \"MATH101H\", 4]], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [[\"s1\", \"A\", 0]], \"expected\": [[\"s1\", \"A\", 0]], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [[\"s1\", \"HIST140\", 0]], \"expected\": [[\"s1\", \"BIO130\", 4], [\"s1\", \"CHEM120\", 3], [\"s1\", \"HIST140\", 0]], \"passed\": false}, {\"check\": \"normal control 7\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.375,"exit_code":1,"observations":[{"actual":[],"check":"regression: slot onward 1","expected":[["s1","A",0]],"passed":false},{"actual":[],"check":"regression variant: slot onward 2","expected":[["s3","BIO130",4]],"passed":false},{"actual":[["s3","MATH101H",4]],"check":"partial repair guard 3","expected":[["s3","MATH101H",4]],"passed":true},{"actual":[["s1","A",0]],"check":"boundary control 4","expected":[["s1","A",0]],"passed":true},{"actual":[],"check":"normal control 5","expected":[],"passed":true},{"actual":[["s1","BIO130",4],["s1","CHEM120",3]],"check":"normal control 6","expected":[["s1","BIO130",4],["s1","CHEM120",3],["s1","HIST140",0]],"passed":false},{"actual":[],"check":"normal control 7","expected":[],"passed":true},{"actual":[],"check":"normal control 8","expected":[],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: slot onward 1\", \"actual\": [], \"expected\": [[\"s1\", \"A\", 0]], \"passed\": false}, {\"check\": \"regression variant: slot onward 2\", \"actual\": [], \"expected\": [[\"s3\", \"BIO130\", 4]], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [[\"s3\", \"MATH101H\", 4]], \"expected\": [[\"s3\", \"MATH101H\", 4]], \"passed\": true}, {\"check\": \"boundary control 4\", \"actual\": [[\"s1\", \"A\", 0]], \"expected\": [[\"s1\", \"A\", 0]], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [[\"s1\", \"BIO130\", 4], [\"s1\", \"CHEM120\", 3]], \"expected\": [[\"s1\", \"BIO130\", 4], [\"s1\", \"CHEM120\", 3], [\"s1\", \"HIST140\", 0]], \"passed\": false}, {\"check\": \"normal control 7\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}