{"abstract":"\"AKs\" counts 12 combos.","category":"Poker hand evaluation","checks":8,"contract":"Input: {\"hand\": class such as \"AKs\", \"AKo\", \"AK\" or \"QQ\", \"dead\": [known cards, rank upper-case or lower-case, suit lower-case or upper-case]}. Enumerate the concrete two-card combos of the class (suits c,d,h,s) and return how many contain no dead card.","evaluation_group":"w2-poker_hand_evaluation-blocker-combo-enumeration","failed_approach":"Skipping by suit index order keeps mixed-suit combos.","family":"w2-poker_hand_evaluation-blocker-combo-enumeration-suited-filter","id":"FA-82161","implementations":{"attempt":{"sha256":"9eddd8730b8953dcb10bb4a2844f05dcc414ff7331197e51db1de52856a28b7e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    S='cdhs'\n    h=x['hand']; dead={c[0].upper()+c[1].lower() for c in x['dead']}\n    r1,r2=h[0],h[1]; suf=h[2:]\n    n=0\n    for i,s1 in enumerate(S):\n        for j,s2 in enumerate(S):\n            if r1==r2 and j<=i: continue\n            if suf=='s' and i>j: continue\n            if suf=='o' and s1==s2: continue\n            if r1+s1 in dead or r2+s2 in dead: continue\n            n+=1\n    return n\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1)],\n [('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3),\n  ('unrelated dead', {'dead': ['2c', '7d'], 'hand': 'AKs'}, 4),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1),\n  ('offsuit no blockers', {'dead': [], 'hand': 'T9o'}, 12)],\n [('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3),\n  ('unrelated dead', {'dead': ['2c', '7d'], 'hand': 'AKs'}, 4),\n  ('offsuit no blockers', {'dead': [], 'hand': 'T9o'}, 12),\n  ('blocked first rank only', {'dead': ['Qs', 'Qh'], 'hand': 'KQs'}, 2)],\n [('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3),\n  ('unrelated dead', {'dead': ['2c', '7d'], 'hand': 'AKs'}, 4),\n  ('blocked first rank only', {'dead': ['Qs', 'Qh'], 'hand': 'KQs'}, 2)],\n [('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1),\n  ('blocked first rank only', {'dead': ['Qs', 'Qh'], 'hand': 'KQs'}, 2)]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'error:' + type(exc).__name__\n    check(label, actual, 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":"22009411302bbb97d20d2461900fac8013a8a18b0247310849151f503116bebe","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    S='cdhs'\n    h=x['hand']; dead={c[0].upper()+c[1].lower() for c in x['dead']}\n    r1,r2=h[0],h[1]; suf=h[2:]\n    n=0\n    for i,s1 in enumerate(S):\n        for j,s2 in enumerate(S):\n            if r1==r2 and j<=i: continue\n            if suf=='s' and s1==s2: continue\n            if suf=='o' and s1==s2: continue\n            if r1+s1 in dead or r2+s2 in dead: continue\n            n+=1\n    return n\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1)],\n [('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3),\n  ('unrelated dead', {'dead': ['2c', '7d'], 'hand': 'AKs'}, 4),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1),\n  ('offsuit no blockers', {'dead': [], 'hand': 'T9o'}, 12)],\n [('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3),\n  ('unrelated dead', {'dead': ['2c', '7d'], 'hand': 'AKs'}, 4),\n  ('offsuit no blockers', {'dead': [], 'hand': 'T9o'}, 12),\n  ('blocked first rank only', {'dead': ['Qs', 'Qh'], 'hand': 'KQs'}, 2)],\n [('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3),\n  ('unrelated dead', {'dead': ['2c', '7d'], 'hand': 'AKs'}, 4),\n  ('blocked first rank only', {'dead': ['Qs', 'Qh'], 'hand': 'KQs'}, 2)],\n [('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1),\n  ('blocked first rank only', {'dead': ['Qs', 'Qh'], 'hand': 'KQs'}, 2)]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'error:' + type(exc).__name__\n    check(label, actual, 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":"d6ef26f01d266fcde7f50ab385775df96f1b3b0fd96c2f3e63cf5ecb5c5bc0ff","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    S='cdhs'\n    h=x['hand']; dead={c[0].upper()+c[1].lower() for c in x['dead']}\n    r1,r2=h[0],h[1]; suf=h[2:]\n    n=0\n    for i,s1 in enumerate(S):\n        for j,s2 in enumerate(S):\n            if r1==r2 and j<=i: continue\n            if suf=='s' and s1!=s2: continue\n            if suf=='o' and s1==s2: continue\n            if r1+s1 in dead or r2+s2 in dead: continue\n            n+=1\n    return n\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1)],\n [('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3),\n  ('unrelated dead', {'dead': ['2c', '7d'], 'hand': 'AKs'}, 4),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1),\n  ('offsuit no blockers', {'dead': [], 'hand': 'T9o'}, 12)],\n [('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3),\n  ('unrelated dead', {'dead': ['2c', '7d'], 'hand': 'AKs'}, 4),\n  ('offsuit no blockers', {'dead': [], 'hand': 'T9o'}, 12),\n  ('blocked first rank only', {'dead': ['Qs', 'Qh'], 'hand': 'KQs'}, 2)],\n [('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3),\n  ('unrelated dead', {'dead': ['2c', '7d'], 'hand': 'AKs'}, 4),\n  ('blocked first rank only', {'dead': ['Qs', 'Qh'], 'hand': 'KQs'}, 2)],\n [('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1),\n  ('blocked first rank only', {'dead': ['Qs', 'Qh'], 'hand': 'KQs'}, 2)]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'error:' + type(exc).__name__\n    check(label, actual, 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":"A deterministic toy model with an explicitly stated contract; card strings are rank+suit (for example \"As\", \"Td\"); no claim of conformance to any casino or tournament rulebook. 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-poker_hand_evaluation-blocker-combo-enumeration-suited-filter","generated_at":"2026-09-29T14:50:09.513191+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Blocker math decides how many value combos an opponent can still hold.","repair":"For a suited class, skip every combo whose suits differ.","root_cause":"The suited filter is inverted and discards the same-suit combos.","sha256":"9a02866ea3c722c09459d6b55292431728d40c5b0e98bf39c6ecff0b83b5b041","title":"Suited class enumerates offsuit combos · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":36.909,"exit_code":1,"observations":[{"actual":6,"check":"pair no blockers","expected":6,"passed":true},{"actual":3,"check":"pair one blocker","expected":3,"passed":true},{"actual":10,"check":"suited no blockers","expected":4,"passed":false},{"actual":8,"check":"suited blocked king","expected":3,"passed":false},{"actual":9,"check":"offsuit blocked king","expected":9,"passed":true},{"actual":9,"check":"any ace king two blockers","expected":9,"passed":true},{"actual":7,"check":"lower-case dead","expected":7,"passed":true},{"actual":1,"check":"pair two blockers","expected":1,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"pair no blockers\", \"actual\": 6, \"expected\": 6, \"passed\": true}, {\"check\": \"pair one blocker\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"suited no blockers\", \"actual\": 10, \"expected\": 4, \"passed\": false}, {\"check\": \"suited blocked king\", \"actual\": 8, \"expected\": 3, \"passed\": false}, {\"check\": \"offsuit blocked king\", \"actual\": 9, \"expected\": 9, \"passed\": true}, {\"check\": \"any ace king two blockers\", \"actual\": 9, \"expected\": 9, \"passed\": true}, {\"check\": \"lower-case dead\", \"actual\": 7, \"expected\": 7, \"passed\": true}, {\"check\": \"pair two blockers\", \"actual\": 1, \"expected\": 1, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.358,"exit_code":1,"observations":[{"actual":6,"check":"pair no blockers","expected":6,"passed":true},{"actual":3,"check":"pair one blocker","expected":3,"passed":true},{"actual":12,"check":"suited no blockers","expected":4,"passed":false},{"actual":9,"check":"suited blocked king","expected":3,"passed":false},{"actual":9,"check":"offsuit blocked king","expected":9,"passed":true},{"actual":9,"check":"any ace king two blockers","expected":9,"passed":true},{"actual":7,"check":"lower-case dead","expected":7,"passed":true},{"actual":1,"check":"pair two blockers","expected":1,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"pair no blockers\", \"actual\": 6, \"expected\": 6, \"passed\": true}, {\"check\": \"pair one blocker\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"suited no blockers\", \"actual\": 12, \"expected\": 4, \"passed\": false}, {\"check\": \"suited blocked king\", \"actual\": 9, \"expected\": 3, \"passed\": false}, {\"check\": \"offsuit blocked king\", \"actual\": 9, \"expected\": 9, \"passed\": true}, {\"check\": \"any ace king two blockers\", \"actual\": 9, \"expected\": 9, \"passed\": true}, {\"check\": \"lower-case dead\", \"actual\": 7, \"expected\": 7, \"passed\": true}, {\"check\": \"pair two blockers\", \"actual\": 1, \"expected\": 1, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":37.358,"exit_code":0,"observations":[{"actual":6,"check":"pair no blockers","expected":6,"passed":true},{"actual":3,"check":"pair one blocker","expected":3,"passed":true},{"actual":4,"check":"suited no blockers","expected":4,"passed":true},{"actual":3,"check":"suited blocked king","expected":3,"passed":true},{"actual":9,"check":"offsuit blocked king","expected":9,"passed":true},{"actual":9,"check":"any ace king two blockers","expected":9,"passed":true},{"actual":7,"check":"lower-case dead","expected":7,"passed":true},{"actual":1,"check":"pair two blockers","expected":1,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"pair no blockers\", \"actual\": 6, \"expected\": 6, \"passed\": true}, {\"check\": \"pair one blocker\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"suited no blockers\", \"actual\": 4, \"expected\": 4, \"passed\": true}, {\"check\": \"suited blocked king\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"offsuit blocked king\", \"actual\": 9, \"expected\": 9, \"passed\": true}, {\"check\": \"any ace king two blockers\", \"actual\": 9, \"expected\": 9, \"passed\": true}, {\"check\": \"lower-case dead\", \"actual\": 7, \"expected\": 7, \"passed\": true}, {\"check\": \"pair two blockers\", \"actual\": 1, \"expected\": 1, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}