FA-81991 / Poker hand evaluation / Open access
Flushes compared on the top card only · case 01
Two ace-high flushes are split although one has a better second or fifth card.
ROOT CAUSE
The flush tiebreak keeps only the highest card instead of all five flush cards.
VERIFIED REPAIR
Compare all five flush cards in descending order.
Unsuccessful approach: Keeping two cards still ties flushes that differ on the third, fourth or fifth card.
Case 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.
Why this case matters
Poker engines settle real money pots from these comparisons; a single misranked hand pays the wrong seat.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import collections
import itertools
N = 1
observations = []
def solve(x):
R='23456789TJQKA'
def key5(h):
vals=sorted((R.index(c[0])+2 for c in h), reverse=True)
cnt=collections.Counter(vals)
order=sorted(cnt, key=lambda v:(cnt[v],v), reverse=True)
shape=sorted(cnt.values(), reverse=True)
flush=len({c[1] for c in h})==1
straight=len(cnt)==5 and (vals[0]-vals[4]==4 or vals==[14,5,4,3,2])
top=5 if vals==[14,5,4,3,2] else vals[0]
if straight and flush: return (8,[top])
if shape==[4,1]: return (7,order)
if shape==[3,2]: return (6,order)
if flush: return (5,[vals[0]])
if straight: return (4,[top])
if shape==[3,1,1]: return (3,order)
if shape==[2,2,1]: return (2,order)
if shape==[2,1,1,1]: return (1,order)
return (0,vals)
board=x['board']; folded=x.get('folded',[])
scores={}
for name,hole in x['players'].items():
if name in folded: continue
scores[name]=max(key5(c) for c in itertools.combinations(hole+board,5))
best=max(scores.values())
return sorted(n for n,k in scores.items() if k==best)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('board plays for both',
{'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],
'folded': [],
'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},
['ann', 'bob']),
('one hole card plays',
{'board': ['Ah', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},
['ann']),
('kicker on paired board',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': [],
'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},
['ann']),
('folded best hand ignored',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': ['ann', 'dee'],
'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['cat']),
('folded first then other',
{'board': ['2h', '7d', '9c', 'Js', '4h'],
'folded': ['cat', 'ann'],
'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['bob']),
('flush second card decides',
{'board': ['2h', '7h', '9h', 'Jd', '4s'],
'folded': [],
'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},
['ann']),
('flush fourth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},
['bob']),
('flush fifth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},
['ann'])],
[('folded best hand ignored',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': ['ann', 'dee'],
'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['cat']),
('folded first then other',
{'board': ['2h', '7d', '9c', 'Js', '4h'],
'folded': ['cat', 'ann'],
'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['bob']),
('flush second card decides',
{'board': ['2h', '7h', '9h', 'Jd', '4s'],
'folded': [],
'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},
['ann']),
('flush fourth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},
['bob']),
('flush fifth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},
['ann']),
('flush kickers deep',
{'board': ['Ah', 'Kh', '9h', '3d', '4s'],
'folded': [],
'players': {'ann': ['7h', '2h'], 'bob': ['8h', '2c']}},
['ann']),
('same category different kicker',
{'board': ['Ah', '8d', '7c', '4s', '2h'],
'folded': [],
'players': {'ann': ['8c', 'Kd'], 'bob': ['8s', 'Qd']}},
['ann']),
('two pair split',
{'board': ['Kh', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},
['ann', 'bob'])],
[('flush fourth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},
['bob']),
('flush fifth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},
['ann']),
('flush kickers deep',
{'board': ['Ah', 'Kh', '9h', '3d', '4s'],
'folded': [],
'players': {'ann': ['7h', '2h'], 'bob': ['8h', '2c']}},
['ann']),
('same category different kicker',
{'board': ['Ah', '8d', '7c', '4s', '2h'],
'folded': [],
'players': {'ann': ['8c', 'Kd'], 'bob': ['8s', 'Qd']}},
['ann']),
('two pair split',
{'board': ['Kh', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},
['ann', 'bob']),
('set beats two pair',
{'board': ['Kh', '8d', '7c', '4s', '2h'],
'folded': [],
'players': {'ann': ['8c', '8s'], 'bob': ['Kc', '7d']}},
['ann']),
('three-way split',
{'board': ['6h', '7d', '8c', '9s', 'Th'],
'folded': [],
'players': {'ann': ['2c', '3d'], 'bob': ['2h', '3c'], 'cat': ['2d', '4c']}},
['ann', 'bob', 'cat']),
('single hole flush',
{'board': ['2s', '7s', '9s', 'Js', '4d'],
'folded': [],
'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},
['ann'])],
[('board plays for both',
{'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],
'folded': [],
'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},
['ann', 'bob']),
('one hole card plays',
{'board': ['Ah', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},
['ann']),
('kicker on paired board',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': [],
'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},
['ann']),
('flush fourth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},
['bob']),
('two pair split',
{'board': ['Kh', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},
['ann', 'bob']),
('set beats two pair',
{'board': ['Kh', '8d', '7c', '4s', '2h'],
'folded': [],
'players': {'ann': ['8c', '8s'], 'bob': ['Kc', '7d']}},
['ann']),
('three-way split',
{'board': ['6h', '7d', '8c', '9s', 'Th'],
'folded': [],
'players': {'ann': ['2c', '3d'], 'bob': ['2h', '3c'], 'cat': ['2d', '4c']}},
['ann', 'bob', 'cat']),
('single hole flush',
{'board': ['2s', '7s', '9s', 'Js', '4d'],
'folded': [],
'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},
['ann'])],
[('board plays for both',
{'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],
'folded': [],
'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},
['ann', 'bob']),
('one hole card plays',
{'board': ['Ah', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},
['ann']),
('kicker on paired board',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': [],
'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},
['ann']),
('folded best hand ignored',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': ['ann', 'dee'],
'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['cat']),
('folded first then other',
{'board': ['2h', '7d', '9c', 'Js', '4h'],
'folded': ['cat', 'ann'],
'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['bob']),
('flush second card decides',
{'board': ['2h', '7h', '9h', 'Jd', '4s'],
'folded': [],
'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},
['ann']),
('flush fourth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},
['bob']),
('single hole flush',
{'board': ['2s', '7s', '9s', 'Js', '4d'],
'folded': [],
'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},
['ann'])]]
for label, args, expected in fixtures[N-1]:
try:
actual = solve(args)
except Exception as exc:
actual = 'error:' + type(exc).__name__
check(label, actual, expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| board plays for both | ['ann', 'bob'] | ['ann', 'bob'] | Passed |
| one hole card plays | ['ann'] | ['ann'] | Passed |
| kicker on paired board | ['ann'] | ['ann'] | Passed |
| folded best hand ignored | ['cat'] | ['cat'] | Passed |
| folded first then other | ['bob'] | ['bob'] | Passed |
| flush second card decides | ['ann'] | ['ann'] | Passed |
| flush fourth card decides | ['ann', 'bob'] | ['bob'] | Failed |
| flush fifth card decides | ['ann'] | ['ann'] | Passed |
SHA-256 / 9a8e41a5ec892fb0cd8a1564139804b84548773e4b52df48b31fa2864ac75bb4
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import collections
import itertools
N = 1
observations = []
def solve(x):
R='23456789TJQKA'
def key5(h):
vals=sorted((R.index(c[0])+2 for c in h), reverse=True)
cnt=collections.Counter(vals)
order=sorted(cnt, key=lambda v:(cnt[v],v), reverse=True)
shape=sorted(cnt.values(), reverse=True)
flush=len({c[1] for c in h})==1
straight=len(cnt)==5 and (vals[0]-vals[4]==4 or vals==[14,5,4,3,2])
top=5 if vals==[14,5,4,3,2] else vals[0]
if straight and flush: return (8,[top])
if shape==[4,1]: return (7,order)
if shape==[3,2]: return (6,order)
if flush: return (5,vals[:2])
if straight: return (4,[top])
if shape==[3,1,1]: return (3,order)
if shape==[2,2,1]: return (2,order)
if shape==[2,1,1,1]: return (1,order)
return (0,vals)
board=x['board']; folded=x.get('folded',[])
scores={}
for name,hole in x['players'].items():
if name in folded: continue
scores[name]=max(key5(c) for c in itertools.combinations(hole+board,5))
best=max(scores.values())
return sorted(n for n,k in scores.items() if k==best)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('board plays for both',
{'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],
'folded': [],
'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},
['ann', 'bob']),
('one hole card plays',
{'board': ['Ah', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},
['ann']),
('kicker on paired board',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': [],
'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},
['ann']),
('folded best hand ignored',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': ['ann', 'dee'],
'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['cat']),
('folded first then other',
{'board': ['2h', '7d', '9c', 'Js', '4h'],
'folded': ['cat', 'ann'],
'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['bob']),
('flush second card decides',
{'board': ['2h', '7h', '9h', 'Jd', '4s'],
'folded': [],
'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},
['ann']),
('flush fourth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},
['bob']),
('flush fifth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},
['ann'])],
[('folded best hand ignored',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': ['ann', 'dee'],
'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['cat']),
('folded first then other',
{'board': ['2h', '7d', '9c', 'Js', '4h'],
'folded': ['cat', 'ann'],
'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['bob']),
('flush second card decides',
{'board': ['2h', '7h', '9h', 'Jd', '4s'],
'folded': [],
'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},
['ann']),
('flush fourth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},
['bob']),
('flush fifth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},
['ann']),
('flush kickers deep',
{'board': ['Ah', 'Kh', '9h', '3d', '4s'],
'folded': [],
'players': {'ann': ['7h', '2h'], 'bob': ['8h', '2c']}},
['ann']),
('same category different kicker',
{'board': ['Ah', '8d', '7c', '4s', '2h'],
'folded': [],
'players': {'ann': ['8c', 'Kd'], 'bob': ['8s', 'Qd']}},
['ann']),
('two pair split',
{'board': ['Kh', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},
['ann', 'bob'])],
[('flush fourth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},
['bob']),
('flush fifth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},
['ann']),
('flush kickers deep',
{'board': ['Ah', 'Kh', '9h', '3d', '4s'],
'folded': [],
'players': {'ann': ['7h', '2h'], 'bob': ['8h', '2c']}},
['ann']),
('same category different kicker',
{'board': ['Ah', '8d', '7c', '4s', '2h'],
'folded': [],
'players': {'ann': ['8c', 'Kd'], 'bob': ['8s', 'Qd']}},
['ann']),
('two pair split',
{'board': ['Kh', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},
['ann', 'bob']),
('set beats two pair',
{'board': ['Kh', '8d', '7c', '4s', '2h'],
'folded': [],
'players': {'ann': ['8c', '8s'], 'bob': ['Kc', '7d']}},
['ann']),
('three-way split',
{'board': ['6h', '7d', '8c', '9s', 'Th'],
'folded': [],
'players': {'ann': ['2c', '3d'], 'bob': ['2h', '3c'], 'cat': ['2d', '4c']}},
['ann', 'bob', 'cat']),
('single hole flush',
{'board': ['2s', '7s', '9s', 'Js', '4d'],
'folded': [],
'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},
['ann'])],
[('board plays for both',
{'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],
'folded': [],
'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},
['ann', 'bob']),
('one hole card plays',
{'board': ['Ah', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},
['ann']),
('kicker on paired board',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': [],
'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},
['ann']),
('flush fourth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},
['bob']),
('two pair split',
{'board': ['Kh', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},
['ann', 'bob']),
('set beats two pair',
{'board': ['Kh', '8d', '7c', '4s', '2h'],
'folded': [],
'players': {'ann': ['8c', '8s'], 'bob': ['Kc', '7d']}},
['ann']),
('three-way split',
{'board': ['6h', '7d', '8c', '9s', 'Th'],
'folded': [],
'players': {'ann': ['2c', '3d'], 'bob': ['2h', '3c'], 'cat': ['2d', '4c']}},
['ann', 'bob', 'cat']),
('single hole flush',
{'board': ['2s', '7s', '9s', 'Js', '4d'],
'folded': [],
'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},
['ann'])],
[('board plays for both',
{'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],
'folded': [],
'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},
['ann', 'bob']),
('one hole card plays',
{'board': ['Ah', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},
['ann']),
('kicker on paired board',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': [],
'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},
['ann']),
('folded best hand ignored',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': ['ann', 'dee'],
'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['cat']),
('folded first then other',
{'board': ['2h', '7d', '9c', 'Js', '4h'],
'folded': ['cat', 'ann'],
'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['bob']),
('flush second card decides',
{'board': ['2h', '7h', '9h', 'Jd', '4s'],
'folded': [],
'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},
['ann']),
('flush fourth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},
['bob']),
('single hole flush',
{'board': ['2s', '7s', '9s', 'Js', '4d'],
'folded': [],
'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},
['ann'])]]
for label, args, expected in fixtures[N-1]:
try:
actual = solve(args)
except Exception as exc:
actual = 'error:' + type(exc).__name__
check(label, actual, expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| board plays for both | ['ann', 'bob'] | ['ann', 'bob'] | Passed |
| one hole card plays | ['ann'] | ['ann'] | Passed |
| kicker on paired board | ['ann'] | ['ann'] | Passed |
| folded best hand ignored | ['cat'] | ['cat'] | Passed |
| folded first then other | ['bob'] | ['bob'] | Passed |
| flush second card decides | ['ann'] | ['ann'] | Passed |
| flush fourth card decides | ['ann', 'bob'] | ['bob'] | Failed |
| flush fifth card decides | ['ann'] | ['ann'] | Passed |
SHA-256 / b6d503a877dbea6c6b72156cd7c0fe8673adb0dd1977851b07a997668301d0c8
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import collections
import itertools
N = 1
observations = []
def solve(x):
R='23456789TJQKA'
def key5(h):
vals=sorted((R.index(c[0])+2 for c in h), reverse=True)
cnt=collections.Counter(vals)
order=sorted(cnt, key=lambda v:(cnt[v],v), reverse=True)
shape=sorted(cnt.values(), reverse=True)
flush=len({c[1] for c in h})==1
straight=len(cnt)==5 and (vals[0]-vals[4]==4 or vals==[14,5,4,3,2])
top=5 if vals==[14,5,4,3,2] else vals[0]
if straight and flush: return (8,[top])
if shape==[4,1]: return (7,order)
if shape==[3,2]: return (6,order)
if flush: return (5,vals)
if straight: return (4,[top])
if shape==[3,1,1]: return (3,order)
if shape==[2,2,1]: return (2,order)
if shape==[2,1,1,1]: return (1,order)
return (0,vals)
board=x['board']; folded=x.get('folded',[])
scores={}
for name,hole in x['players'].items():
if name in folded: continue
scores[name]=max(key5(c) for c in itertools.combinations(hole+board,5))
best=max(scores.values())
return sorted(n for n,k in scores.items() if k==best)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('board plays for both',
{'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],
'folded': [],
'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},
['ann', 'bob']),
('one hole card plays',
{'board': ['Ah', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},
['ann']),
('kicker on paired board',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': [],
'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},
['ann']),
('folded best hand ignored',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': ['ann', 'dee'],
'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['cat']),
('folded first then other',
{'board': ['2h', '7d', '9c', 'Js', '4h'],
'folded': ['cat', 'ann'],
'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['bob']),
('flush second card decides',
{'board': ['2h', '7h', '9h', 'Jd', '4s'],
'folded': [],
'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},
['ann']),
('flush fourth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},
['bob']),
('flush fifth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},
['ann'])],
[('folded best hand ignored',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': ['ann', 'dee'],
'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['cat']),
('folded first then other',
{'board': ['2h', '7d', '9c', 'Js', '4h'],
'folded': ['cat', 'ann'],
'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['bob']),
('flush second card decides',
{'board': ['2h', '7h', '9h', 'Jd', '4s'],
'folded': [],
'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},
['ann']),
('flush fourth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},
['bob']),
('flush fifth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},
['ann']),
('flush kickers deep',
{'board': ['Ah', 'Kh', '9h', '3d', '4s'],
'folded': [],
'players': {'ann': ['7h', '2h'], 'bob': ['8h', '2c']}},
['ann']),
('same category different kicker',
{'board': ['Ah', '8d', '7c', '4s', '2h'],
'folded': [],
'players': {'ann': ['8c', 'Kd'], 'bob': ['8s', 'Qd']}},
['ann']),
('two pair split',
{'board': ['Kh', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},
['ann', 'bob'])],
[('flush fourth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},
['bob']),
('flush fifth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['2h', 'Kc'], 'bob': ['Kd', '2d']}},
['ann']),
('flush kickers deep',
{'board': ['Ah', 'Kh', '9h', '3d', '4s'],
'folded': [],
'players': {'ann': ['7h', '2h'], 'bob': ['8h', '2c']}},
['ann']),
('same category different kicker',
{'board': ['Ah', '8d', '7c', '4s', '2h'],
'folded': [],
'players': {'ann': ['8c', 'Kd'], 'bob': ['8s', 'Qd']}},
['ann']),
('two pair split',
{'board': ['Kh', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},
['ann', 'bob']),
('set beats two pair',
{'board': ['Kh', '8d', '7c', '4s', '2h'],
'folded': [],
'players': {'ann': ['8c', '8s'], 'bob': ['Kc', '7d']}},
['ann']),
('three-way split',
{'board': ['6h', '7d', '8c', '9s', 'Th'],
'folded': [],
'players': {'ann': ['2c', '3d'], 'bob': ['2h', '3c'], 'cat': ['2d', '4c']}},
['ann', 'bob', 'cat']),
('single hole flush',
{'board': ['2s', '7s', '9s', 'Js', '4d'],
'folded': [],
'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},
['ann'])],
[('board plays for both',
{'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],
'folded': [],
'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},
['ann', 'bob']),
('one hole card plays',
{'board': ['Ah', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},
['ann']),
('kicker on paired board',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': [],
'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},
['ann']),
('flush fourth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},
['bob']),
('two pair split',
{'board': ['Kh', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['As', '4d']}},
['ann', 'bob']),
('set beats two pair',
{'board': ['Kh', '8d', '7c', '4s', '2h'],
'folded': [],
'players': {'ann': ['8c', '8s'], 'bob': ['Kc', '7d']}},
['ann']),
('three-way split',
{'board': ['6h', '7d', '8c', '9s', 'Th'],
'folded': [],
'players': {'ann': ['2c', '3d'], 'bob': ['2h', '3c'], 'cat': ['2d', '4c']}},
['ann', 'bob', 'cat']),
('single hole flush',
{'board': ['2s', '7s', '9s', 'Js', '4d'],
'folded': [],
'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},
['ann'])],
[('board plays for both',
{'board': ['Th', 'Jd', 'Qc', 'Ks', 'Ah'],
'folded': [],
'players': {'ann': ['2c', '3d'], 'bob': ['4h', '5s']}},
['ann', 'bob']),
('one hole card plays',
{'board': ['Ah', 'Kd', '7c', '7s', '2h'],
'folded': [],
'players': {'ann': ['Ac', '3d'], 'bob': ['Kc', 'Qs']}},
['ann']),
('kicker on paired board',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': [],
'players': {'ann': ['Ac', 'Jd'], 'bob': ['Kc', 'Qs']}},
['ann']),
('folded best hand ignored',
{'board': ['9h', '9d', '5c', '4s', '2h'],
'folded': ['ann', 'dee'],
'players': {'ann': ['9c', '9s'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['cat']),
('folded first then other',
{'board': ['2h', '7d', '9c', 'Js', '4h'],
'folded': ['cat', 'ann'],
'players': {'ann': ['Jc', 'Jh'], 'bob': ['Kc', 'Qs'], 'cat': ['Ac', '3s']}},
['bob']),
('flush second card decides',
{'board': ['2h', '7h', '9h', 'Jd', '4s'],
'folded': [],
'players': {'ann': ['Ah', '3h'], 'bob': ['Kh', 'Qh']}},
['ann']),
('flush fourth card decides',
{'board': ['Ah', 'Th', '9h', '3h', '4s'],
'folded': [],
'players': {'ann': ['7h', '2c'], 'bob': ['8h', '2d']}},
['bob']),
('single hole flush',
{'board': ['2s', '7s', '9s', 'Js', '4d'],
'folded': [],
'players': {'ann': ['As', 'Kd'], 'bob': ['Qc', 'Qd']}},
['ann'])]]
for label, args, expected in fixtures[N-1]:
try:
actual = solve(args)
except Exception as exc:
actual = 'error:' + type(exc).__name__
check(label, actual, expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| board plays for both | ['ann', 'bob'] | ['ann', 'bob'] | Passed |
| one hole card plays | ['ann'] | ['ann'] | Passed |
| kicker on paired board | ['ann'] | ['ann'] | Passed |
| folded best hand ignored | ['cat'] | ['cat'] | Passed |
| folded first then other | ['bob'] | ['bob'] | Passed |
| flush second card decides | ['ann'] | ['ann'] | Passed |
| flush fourth card decides | ['bob'] | ['bob'] | Passed |
| flush fifth card decides | ['ann'] | ['ann'] | Passed |
SHA-256 / 5bc65537680743daab88a1c7243bdd87fb5d7e71869916f2bd85e3c0e8f56341
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:50:08.157495+00:00.
Case digest / 517530870bd778501c7ae57d5fdb7624f96d192ee9baf37b77e9ddac2cb7e8c5