{"abstract":"Two ace-high flushes are split although one has a better second or fifth card.","category":"Poker hand evaluation","checks":8,"contract":"Input: {\"board\": five community cards, \"players\": {name: two hole cards}, \"folded\": [names]}. Each live player uses the best five of their seven cards (zero, one or two hole cards may play). Return the sorted list of live players holding the best hand; ties split.","evaluation_group":"w2-poker_hand_evaluation-holdem-showdown","failed_approach":"Keeping two cards still ties flushes that differ on the third, fourth or fifth card.","family":"w2-poker_hand_evaluation-holdem-showdown-flush-tiebreak-depth","id":"FA-81991","implementations":{"attempt":{"sha256":"b6d503a877dbea6c6b72156cd7c0fe8673adb0dd1977851b07a997668301d0c8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport collections\nimport itertools\nN = 1\nobservations = []\ndef solve(x):\n    R='23456789TJQKA'\n    def key5(h):\n        vals=sorted((R.index(c[0])+2 for c in h), reverse=True)\n        cnt=collections.Counter(vals)\n        order=sorted(cnt, key=lambda v:(cnt[v],v), reverse=True)\n        shape=sorted(cnt.values(), reverse=True)\n        flush=len({c[1] for c in h})==1\n        straight=len(cnt)==5 and (vals[0]-vals[4]==4 or vals==[14,5,4,3,2])\n        top=5 if vals==[14,5,4,3,2] else vals[0]\n        if straight and flush: return (8,[top])\n        if shape==[4,1]: return (7,order)\n        if shape==[3,2]: return (6,order)\n        if flush: return (5,vals[:2])\n        if straight: return (4,[top])\n        if shape==[3,1,1]: return (3,order)\n        if shape==[2,2,1]: return (2,order)\n        if shape==[2,1,1,1]: return (1,order)\n        return (0,vals)\n    \n    board=x['board']; folded=x.get('folded',[])\n    scores={}\n    for name,hole in x['players'].items():\n        if name in folded: continue\n        scores[name]=max(key5(c) for c in itertools.combinations(hole+board,5))\n    best=max(scores.values())\n    return sorted(n for n,k in scores.items() if k==best)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('board plays for both',\n   {'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],\n    'folded': [],\n    'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},\n   ['ann', 'bob']),\n  ('one hole card plays',\n   {'board': ['Ah', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('kicker on paired board',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('folded best hand ignored',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': ['ann', 'dee'],\n    'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['cat']),\n  ('folded first then other',\n   {'board': ['2h', '7d', '9c', 'Js', '4h'],\n    'folded': ['cat', 'ann'],\n    'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['bob']),\n  ('flush second card decides',\n   {'board': ['2h', '7h', '9h', 'Jd', '4s'],\n    'folded': [],\n    'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},\n   ['ann']),\n  ('flush fourth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},\n   ['bob']),\n  ('flush fifth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},\n   ['ann'])],\n [('folded best hand ignored',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': ['ann', 'dee'],\n    'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['cat']),\n  ('folded first then other',\n   {'board': ['2h', '7d', '9c', 'Js', '4h'],\n    'folded': ['cat', 'ann'],\n    'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['bob']),\n  ('flush second card decides',\n   {'board': ['2h', '7h', '9h', 'Jd', '4s'],\n    'folded': [],\n    'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},\n   ['ann']),\n  ('flush fourth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},\n   ['bob']),\n  ('flush fifth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},\n   ['ann']),\n  ('flush kickers deep',\n   {'board': ['Ah', 'Kh', '9h', '3d', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2h'], 'bob': ['8h', '2c']}},\n   ['ann']),\n  ('same category different kicker',\n   {'board': ['Ah', '8d', '7c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['8c', 'Kd'], 'bob': ['8s', 'Qd']}},\n   ['ann']),\n  ('two pair split',\n   {'board': ['Kh', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},\n   ['ann', 'bob'])],\n [('flush fourth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},\n   ['bob']),\n  ('flush fifth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},\n   ['ann']),\n  ('flush kickers deep',\n   {'board': ['Ah', 'Kh', '9h', '3d', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2h'], 'bob': ['8h', '2c']}},\n   ['ann']),\n  ('same category different kicker',\n   {'board': ['Ah', '8d', '7c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['8c', 'Kd'], 'bob': ['8s', 'Qd']}},\n   ['ann']),\n  ('two pair split',\n   {'board': ['Kh', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},\n   ['ann', 'bob']),\n  ('set beats two pair',\n   {'board': ['Kh', '8d', '7c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['8c', '8s'], 'bob': ['Kc', '7d']}},\n   ['ann']),\n  ('three-way split',\n   {'board': ['6h', '7d', '8c', '9s', 'Th'],\n    'folded': [],\n    'players': {'ann': ['2c', '3d'], 'bob': ['2h', '3c'], 'cat': ['2d', '4c']}},\n   ['ann', 'bob', 'cat']),\n  ('single hole flush',\n   {'board': ['2s', '7s', '9s', 'Js', '4d'],\n    'folded': [],\n    'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},\n   ['ann'])],\n [('board plays for both',\n   {'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],\n    'folded': [],\n    'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},\n   ['ann', 'bob']),\n  ('one hole card plays',\n   {'board': ['Ah', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('kicker on paired board',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('flush fourth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},\n   ['bob']),\n  ('two pair split',\n   {'board': ['Kh', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},\n   ['ann', 'bob']),\n  ('set beats two pair',\n   {'board': ['Kh', '8d', '7c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['8c', '8s'], 'bob': ['Kc', '7d']}},\n   ['ann']),\n  ('three-way split',\n   {'board': ['6h', '7d', '8c', '9s', 'Th'],\n    'folded': [],\n    'players': {'ann': ['2c', '3d'], 'bob': ['2h', '3c'], 'cat': ['2d', '4c']}},\n   ['ann', 'bob', 'cat']),\n  ('single hole flush',\n   {'board': ['2s', '7s', '9s', 'Js', '4d'],\n    'folded': [],\n    'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},\n   ['ann'])],\n [('board plays for both',\n   {'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],\n    'folded': [],\n    'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},\n   ['ann', 'bob']),\n  ('one hole card plays',\n   {'board': ['Ah', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('kicker on paired board',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('folded best hand ignored',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': ['ann', 'dee'],\n    'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['cat']),\n  ('folded first then other',\n   {'board': ['2h', '7d', '9c', 'Js', '4h'],\n    'folded': ['cat', 'ann'],\n    'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['bob']),\n  ('flush second card decides',\n   {'board': ['2h', '7h', '9h', 'Jd', '4s'],\n    'folded': [],\n    'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},\n   ['ann']),\n  ('flush fourth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},\n   ['bob']),\n  ('single hole flush',\n   {'board': ['2s', '7s', '9s', 'Js', '4d'],\n    'folded': [],\n    'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},\n   ['ann'])]]\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":"9a8e41a5ec892fb0cd8a1564139804b84548773e4b52df48b31fa2864ac75bb4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport collections\nimport itertools\nN = 1\nobservations = []\ndef solve(x):\n    R='23456789TJQKA'\n    def key5(h):\n        vals=sorted((R.index(c[0])+2 for c in h), reverse=True)\n        cnt=collections.Counter(vals)\n        order=sorted(cnt, key=lambda v:(cnt[v],v), reverse=True)\n        shape=sorted(cnt.values(), reverse=True)\n        flush=len({c[1] for c in h})==1\n        straight=len(cnt)==5 and (vals[0]-vals[4]==4 or vals==[14,5,4,3,2])\n        top=5 if vals==[14,5,4,3,2] else vals[0]\n        if straight and flush: return (8,[top])\n        if shape==[4,1]: return (7,order)\n        if shape==[3,2]: return (6,order)\n        if flush: return (5,[vals[0]])\n        if straight: return (4,[top])\n        if shape==[3,1,1]: return (3,order)\n        if shape==[2,2,1]: return (2,order)\n        if shape==[2,1,1,1]: return (1,order)\n        return (0,vals)\n    \n    board=x['board']; folded=x.get('folded',[])\n    scores={}\n    for name,hole in x['players'].items():\n        if name in folded: continue\n        scores[name]=max(key5(c) for c in itertools.combinations(hole+board,5))\n    best=max(scores.values())\n    return sorted(n for n,k in scores.items() if k==best)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('board plays for both',\n   {'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],\n    'folded': [],\n    'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},\n   ['ann', 'bob']),\n  ('one hole card plays',\n   {'board': ['Ah', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('kicker on paired board',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('folded best hand ignored',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': ['ann', 'dee'],\n    'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['cat']),\n  ('folded first then other',\n   {'board': ['2h', '7d', '9c', 'Js', '4h'],\n    'folded': ['cat', 'ann'],\n    'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['bob']),\n  ('flush second card decides',\n   {'board': ['2h', '7h', '9h', 'Jd', '4s'],\n    'folded': [],\n    'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},\n   ['ann']),\n  ('flush fourth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},\n   ['bob']),\n  ('flush fifth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},\n   ['ann'])],\n [('folded best hand ignored',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': ['ann', 'dee'],\n    'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['cat']),\n  ('folded first then other',\n   {'board': ['2h', '7d', '9c', 'Js', '4h'],\n    'folded': ['cat', 'ann'],\n    'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['bob']),\n  ('flush second card decides',\n   {'board': ['2h', '7h', '9h', 'Jd', '4s'],\n    'folded': [],\n    'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},\n   ['ann']),\n  ('flush fourth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},\n   ['bob']),\n  ('flush fifth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},\n   ['ann']),\n  ('flush kickers deep',\n   {'board': ['Ah', 'Kh', '9h', '3d', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2h'], 'bob': ['8h', '2c']}},\n   ['ann']),\n  ('same category different kicker',\n   {'board': ['Ah', '8d', '7c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['8c', 'Kd'], 'bob': ['8s', 'Qd']}},\n   ['ann']),\n  ('two pair split',\n   {'board': ['Kh', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},\n   ['ann', 'bob'])],\n [('flush fourth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},\n   ['bob']),\n  ('flush fifth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},\n   ['ann']),\n  ('flush kickers deep',\n   {'board': ['Ah', 'Kh', '9h', '3d', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2h'], 'bob': ['8h', '2c']}},\n   ['ann']),\n  ('same category different kicker',\n   {'board': ['Ah', '8d', '7c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['8c', 'Kd'], 'bob': ['8s', 'Qd']}},\n   ['ann']),\n  ('two pair split',\n   {'board': ['Kh', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},\n   ['ann', 'bob']),\n  ('set beats two pair',\n   {'board': ['Kh', '8d', '7c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['8c', '8s'], 'bob': ['Kc', '7d']}},\n   ['ann']),\n  ('three-way split',\n   {'board': ['6h', '7d', '8c', '9s', 'Th'],\n    'folded': [],\n    'players': {'ann': ['2c', '3d'], 'bob': ['2h', '3c'], 'cat': ['2d', '4c']}},\n   ['ann', 'bob', 'cat']),\n  ('single hole flush',\n   {'board': ['2s', '7s', '9s', 'Js', '4d'],\n    'folded': [],\n    'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},\n   ['ann'])],\n [('board plays for both',\n   {'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],\n    'folded': [],\n    'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},\n   ['ann', 'bob']),\n  ('one hole card plays',\n   {'board': ['Ah', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('kicker on paired board',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('flush fourth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},\n   ['bob']),\n  ('two pair split',\n   {'board': ['Kh', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},\n   ['ann', 'bob']),\n  ('set beats two pair',\n   {'board': ['Kh', '8d', '7c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['8c', '8s'], 'bob': ['Kc', '7d']}},\n   ['ann']),\n  ('three-way split',\n   {'board': ['6h', '7d', '8c', '9s', 'Th'],\n    'folded': [],\n    'players': {'ann': ['2c', '3d'], 'bob': ['2h', '3c'], 'cat': ['2d', '4c']}},\n   ['ann', 'bob', 'cat']),\n  ('single hole flush',\n   {'board': ['2s', '7s', '9s', 'Js', '4d'],\n    'folded': [],\n    'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},\n   ['ann'])],\n [('board plays for both',\n   {'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],\n    'folded': [],\n    'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},\n   ['ann', 'bob']),\n  ('one hole card plays',\n   {'board': ['Ah', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('kicker on paired board',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('folded best hand ignored',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': ['ann', 'dee'],\n    'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['cat']),\n  ('folded first then other',\n   {'board': ['2h', '7d', '9c', 'Js', '4h'],\n    'folded': ['cat', 'ann'],\n    'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['bob']),\n  ('flush second card decides',\n   {'board': ['2h', '7h', '9h', 'Jd', '4s'],\n    'folded': [],\n    'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},\n   ['ann']),\n  ('flush fourth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},\n   ['bob']),\n  ('single hole flush',\n   {'board': ['2s', '7s', '9s', 'Js', '4d'],\n    'folded': [],\n    'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},\n   ['ann'])]]\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":"5bc65537680743daab88a1c7243bdd87fb5d7e71869916f2bd85e3c0e8f56341","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport collections\nimport itertools\nN = 1\nobservations = []\ndef solve(x):\n    R='23456789TJQKA'\n    def key5(h):\n        vals=sorted((R.index(c[0])+2 for c in h), reverse=True)\n        cnt=collections.Counter(vals)\n        order=sorted(cnt, key=lambda v:(cnt[v],v), reverse=True)\n        shape=sorted(cnt.values(), reverse=True)\n        flush=len({c[1] for c in h})==1\n        straight=len(cnt)==5 and (vals[0]-vals[4]==4 or vals==[14,5,4,3,2])\n        top=5 if vals==[14,5,4,3,2] else vals[0]\n        if straight and flush: return (8,[top])\n        if shape==[4,1]: return (7,order)\n        if shape==[3,2]: return (6,order)\n        if flush: return (5,vals)\n        if straight: return (4,[top])\n        if shape==[3,1,1]: return (3,order)\n        if shape==[2,2,1]: return (2,order)\n        if shape==[2,1,1,1]: return (1,order)\n        return (0,vals)\n    \n    board=x['board']; folded=x.get('folded',[])\n    scores={}\n    for name,hole in x['players'].items():\n        if name in folded: continue\n        scores[name]=max(key5(c) for c in itertools.combinations(hole+board,5))\n    best=max(scores.values())\n    return sorted(n for n,k in scores.items() if k==best)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('board plays for both',\n   {'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],\n    'folded': [],\n    'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},\n   ['ann', 'bob']),\n  ('one hole card plays',\n   {'board': ['Ah', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('kicker on paired board',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('folded best hand ignored',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': ['ann', 'dee'],\n    'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['cat']),\n  ('folded first then other',\n   {'board': ['2h', '7d', '9c', 'Js', '4h'],\n    'folded': ['cat', 'ann'],\n    'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['bob']),\n  ('flush second card decides',\n   {'board': ['2h', '7h', '9h', 'Jd', '4s'],\n    'folded': [],\n    'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},\n   ['ann']),\n  ('flush fourth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},\n   ['bob']),\n  ('flush fifth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},\n   ['ann'])],\n [('folded best hand ignored',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': ['ann', 'dee'],\n    'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['cat']),\n  ('folded first then other',\n   {'board': ['2h', '7d', '9c', 'Js', '4h'],\n    'folded': ['cat', 'ann'],\n    'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['bob']),\n  ('flush second card decides',\n   {'board': ['2h', '7h', '9h', 'Jd', '4s'],\n    'folded': [],\n    'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},\n   ['ann']),\n  ('flush fourth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},\n   ['bob']),\n  ('flush fifth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},\n   ['ann']),\n  ('flush kickers deep',\n   {'board': ['Ah', 'Kh', '9h', '3d', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2h'], 'bob': ['8h', '2c']}},\n   ['ann']),\n  ('same category different kicker',\n   {'board': ['Ah', '8d', '7c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['8c', 'Kd'], 'bob': ['8s', 'Qd']}},\n   ['ann']),\n  ('two pair split',\n   {'board': ['Kh', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},\n   ['ann', 'bob'])],\n [('flush fourth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},\n   ['bob']),\n  ('flush fifth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},\n   ['ann']),\n  ('flush kickers deep',\n   {'board': ['Ah', 'Kh', '9h', '3d', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2h'], 'bob': ['8h', '2c']}},\n   ['ann']),\n  ('same category different kicker',\n   {'board': ['Ah', '8d', '7c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['8c', 'Kd'], 'bob': ['8s', 'Qd']}},\n   ['ann']),\n  ('two pair split',\n   {'board': ['Kh', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},\n   ['ann', 'bob']),\n  ('set beats two pair',\n   {'board': ['Kh', '8d', '7c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['8c', '8s'], 'bob': ['Kc', '7d']}},\n   ['ann']),\n  ('three-way split',\n   {'board': ['6h', '7d', '8c', '9s', 'Th'],\n    'folded': [],\n    'players': {'ann': ['2c', '3d'], 'bob': ['2h', '3c'], 'cat': ['2d', '4c']}},\n   ['ann', 'bob', 'cat']),\n  ('single hole flush',\n   {'board': ['2s', '7s', '9s', 'Js', '4d'],\n    'folded': [],\n    'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},\n   ['ann'])],\n [('board plays for both',\n   {'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],\n    'folded': [],\n    'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},\n   ['ann', 'bob']),\n  ('one hole card plays',\n   {'board': ['Ah', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('kicker on paired board',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('flush fourth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},\n   ['bob']),\n  ('two pair split',\n   {'board': ['Kh', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},\n   ['ann', 'bob']),\n  ('set beats two pair',\n   {'board': ['Kh', '8d', '7c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['8c', '8s'], 'bob': ['Kc', '7d']}},\n   ['ann']),\n  ('three-way split',\n   {'board': ['6h', '7d', '8c', '9s', 'Th'],\n    'folded': [],\n    'players': {'ann': ['2c', '3d'], 'bob': ['2h', '3c'], 'cat': ['2d', '4c']}},\n   ['ann', 'bob', 'cat']),\n  ('single hole flush',\n   {'board': ['2s', '7s', '9s', 'Js', '4d'],\n    'folded': [],\n    'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},\n   ['ann'])],\n [('board plays for both',\n   {'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],\n    'folded': [],\n    'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},\n   ['ann', 'bob']),\n  ('one hole card plays',\n   {'board': ['Ah', 'Kd', '7c', '7s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('kicker on paired board',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': [],\n    'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},\n   ['ann']),\n  ('folded best hand ignored',\n   {'board': ['9h', '9d', '5c', '4s', '2h'],\n    'folded': ['ann', 'dee'],\n    'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['cat']),\n  ('folded first then other',\n   {'board': ['2h', '7d', '9c', 'Js', '4h'],\n    'folded': ['cat', 'ann'],\n    'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},\n   ['bob']),\n  ('flush second card decides',\n   {'board': ['2h', '7h', '9h', 'Jd', '4s'],\n    'folded': [],\n    'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},\n   ['ann']),\n  ('flush fourth card decides',\n   {'board': ['Ah', 'Th', '9h', '3h', '4s'],\n    'folded': [],\n    'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},\n   ['bob']),\n  ('single hole flush',\n   {'board': ['2s', '7s', '9s', 'Js', '4d'],\n    'folded': [],\n    'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},\n   ['ann'])]]\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-holdem-showdown-flush-tiebreak-depth","generated_at":"2026-09-29T14:50:08.157495+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Poker engines settle real money pots from these comparisons; a single misranked hand pays the wrong seat.","repair":"Compare all five flush cards in descending order.","root_cause":"The flush tiebreak keeps only the highest card instead of all five flush cards.","sha256":"517530870bd778501c7ae57d5fdb7624f96d192ee9baf37b77e9ddac2cb7e8c5","title":"Flushes compared on the top card only · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.697,"exit_code":1,"observations":[{"actual":["ann","bob"],"check":"board plays for both","expected":["ann","bob"],"passed":true},{"actual":["ann"],"check":"one hole card plays","expected":["ann"],"passed":true},{"actual":["ann"],"check":"kicker on paired board","expected":["ann"],"passed":true},{"actual":["cat"],"check":"folded best hand ignored","expected":["cat"],"passed":true},{"actual":["bob"],"check":"folded first then other","expected":["bob"],"passed":true},{"actual":["ann"],"check":"flush second card decides","expected":["ann"],"passed":true},{"actual":["ann","bob"],"check":"flush fourth card decides","expected":["bob"],"passed":false},{"actual":["ann"],"check":"flush fifth card decides","expected":["ann"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"board plays for both\", \"actual\": [\"ann\", \"bob\"], \"expected\": [\"ann\", \"bob\"], \"passed\": true}, {\"check\": \"one hole card plays\", \"actual\": [\"ann\"], \"expected\": [\"ann\"], \"passed\": true}, {\"check\": \"kicker on paired board\", \"actual\": [\"ann\"], \"expected\": [\"ann\"], \"passed\": true}, {\"check\": \"folded best hand ignored\", \"actual\": [\"cat\"], \"expected\": [\"cat\"], \"passed\": true}, {\"check\": \"folded first then other\", \"actual\": [\"bob\"], \"expected\": [\"bob\"], \"passed\": true}, {\"check\": \"flush second card decides\", \"actual\": [\"ann\"], \"expected\": [\"ann\"], \"passed\": true}, {\"check\": \"flush fourth card decides\", \"actual\": [\"ann\", \"bob\"], \"expected\": [\"bob\"], \"passed\": false}, {\"check\": \"flush fifth card decides\", \"actual\": [\"ann\"], \"expected\": [\"ann\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.538,"exit_code":1,"observations":[{"actual":["ann","bob"],"check":"board plays for both","expected":["ann","bob"],"passed":true},{"actual":["ann"],"check":"one hole card plays","expected":["ann"],"passed":true},{"actual":["ann"],"check":"kicker on paired board","expected":["ann"],"passed":true},{"actual":["cat"],"check":"folded best hand ignored","expected":["cat"],"passed":true},{"actual":["bob"],"check":"folded first then other","expected":["bob"],"passed":true},{"actual":["ann"],"check":"flush second card decides","expected":["ann"],"passed":true},{"actual":["ann","bob"],"check":"flush fourth card decides","expected":["bob"],"passed":false},{"actual":["ann"],"check":"flush fifth card decides","expected":["ann"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"board plays for both\", \"actual\": [\"ann\", \"bob\"], \"expected\": [\"ann\", \"bob\"], \"passed\": true}, {\"check\": \"one hole card plays\", \"actual\": [\"ann\"], \"expected\": [\"ann\"], \"passed\": true}, {\"check\": \"kicker on paired board\", \"actual\": [\"ann\"], \"expected\": [\"ann\"], \"passed\": true}, {\"check\": \"folded best hand ignored\", \"actual\": [\"cat\"], \"expected\": [\"cat\"], \"passed\": true}, {\"check\": \"folded first then other\", \"actual\": [\"bob\"], \"expected\": [\"bob\"], \"passed\": true}, {\"check\": \"flush second card decides\", \"actual\": [\"ann\"], \"expected\": [\"ann\"], \"passed\": true}, {\"check\": \"flush fourth card decides\", \"actual\": [\"ann\", \"bob\"], \"expected\": [\"bob\"], \"passed\": false}, {\"check\": \"flush fifth card decides\", \"actual\": [\"ann\"], \"expected\": [\"ann\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.872,"exit_code":0,"observations":[{"actual":["ann","bob"],"check":"board plays for both","expected":["ann","bob"],"passed":true},{"actual":["ann"],"check":"one hole card plays","expected":["ann"],"passed":true},{"actual":["ann"],"check":"kicker on paired board","expected":["ann"],"passed":true},{"actual":["cat"],"check":"folded best hand ignored","expected":["cat"],"passed":true},{"actual":["bob"],"check":"folded first then other","expected":["bob"],"passed":true},{"actual":["ann"],"check":"flush second card decides","expected":["ann"],"passed":true},{"actual":["bob"],"check":"flush fourth card decides","expected":["bob"],"passed":true},{"actual":["ann"],"check":"flush fifth card decides","expected":["ann"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"board plays for both\", \"actual\": [\"ann\", \"bob\"], \"expected\": [\"ann\", \"bob\"], \"passed\": true}, {\"check\": \"one hole card plays\", \"actual\": [\"ann\"], \"expected\": [\"ann\"], \"passed\": true}, {\"check\": \"kicker on paired board\", \"actual\": [\"ann\"], \"expected\": [\"ann\"], \"passed\": true}, {\"check\": \"folded best hand ignored\", \"actual\": [\"cat\"], \"expected\": [\"cat\"], \"passed\": true}, {\"check\": \"folded first then other\", \"actual\": [\"bob\"], \"expected\": [\"bob\"], \"passed\": true}, {\"check\": \"flush second card decides\", \"actual\": [\"ann\"], \"expected\": [\"ann\"], \"passed\": true}, {\"check\": \"flush fourth card decides\", \"actual\": [\"bob\"], \"expected\": [\"bob\"], \"passed\": true}, {\"check\": \"flush fifth card decides\", \"actual\": [\"ann\"], \"expected\": [\"ann\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}