FA-81961 / Poker hand evaluation / Open access
Each rank prime divided out only once · case 01
Every paired hand is reported as high card.
ROOT CAUSE
The factorization divides by each prime at most once, so the multiplicity of a repeated rank is always 1.
VERIFIED REPAIR
Keep dividing while the prime still divides the product and count the divisions.
Unsuccessful approach: Dividing by p squared then p caps multiplicity at two, so trips and quads are misread.
Case contract
Input: five cards "Rs" (rank may be written "10" for ten; suits ignored, repeated ranks allowed up to four). Each rank maps to a distinct prime (2 for deuce ... 41 for ace); the product of the five primes is factored back into rank multiplicities, and the sorted multiplicity pattern names the rank shape: four of a kind, full house, three of a kind, two pair, one pair or high card.
Why this case matters
Prime-product hashing is how table-driven evaluators identify non-flush rank multisets.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
R='23456789TJQKA'
P=[2,3,5,7,11,13,17,19,23,29,31,37,41]
prod=1
for c in x:
prod*=P[R.index('T' if c[:-1]=='10' else c[:-1])]
exps=[]
for p in P:
e=0
if prod%p==0:
prod//=p
e+=1
if e: exps.append(e)
exps.sort(reverse=True)
names={(4,1):'four of a kind',(3,2):'full house',(3,1,1):'three of a kind',(2,2,1):'two pair',(2,1,1,1):'one pair',(1,1,1,1,1):'high card'}
return names[tuple(exps)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('ace high', ['Ah', 'Kd', '9c', '7s', '4h'], 'high card'),
('pair of aces', ['Ah', 'Ad', '9c', '7s', '4h'], 'one pair'),
('ace with three', ['Ah', '3d', '9c', '7s', '4h'], 'high card'),
('ace with king', ['Ah', 'Kd', 'Qc', '7s', '4h'], 'high card'),
('ace with seven pair', ['Ah', '7d', '7c', '2s', '4h'], 'one pair'),
('full house', ['Kh', 'Kd', '2c', '2s', '2h'], 'full house'),
('quads', ['9h', '9d', '9c', '9s', '2h'], 'four of a kind'),
('deuce and ace', ['2h', 'Ad', '8c', '6s', '4h'], 'high card')],
[('pair of aces', ['Ah', 'Ad', '9c', '7s', '4h'], 'one pair'),
('ace with seven pair', ['Ah', '7d', '7c', '2s', '4h'], 'one pair'),
('full house', ['Kh', 'Kd', '2c', '2s', '2h'], 'full house'),
('quads', ['9h', '9d', '9c', '9s', '2h'], 'four of a kind'),
('trips deuces', ['2h', '2d', '2c', 'Ks', 'Qh'], 'three of a kind'),
('deuce and ace', ['2h', 'Ad', '8c', '6s', '4h'], 'high card'),
('high card low', ['2h', '3d', '5c', '7s', '9h'], 'high card'),
('ten token with ace', ['10h', 'Ad', '8c', '6s', '4h'], 'high card')],
[('pair of aces', ['Ah', 'Ad', '9c', '7s', '4h'], 'one pair'),
('ace with seven pair', ['Ah', '7d', '7c', '2s', '4h'], 'one pair'),
('full house', ['Kh', 'Kd', '2c', '2s', '2h'], 'full house'),
('quads', ['9h', '9d', '9c', '9s', '2h'], 'four of a kind'),
('two pair', ['Jh', 'Jd', '4c', '4s', 'Ah'], 'two pair'),
('trips deuces', ['2h', '2d', '2c', 'Ks', 'Qh'], 'three of a kind'),
('pair of deuces', ['2h', '2d', '5c', '7s', '9h'], 'one pair'),
('ten token full house', ['10h', '10d', 'Tc', '6s', '6h'], 'full house')],
[('ace high', ['Ah', 'Kd', '9c', '7s', '4h'], 'high card'),
('full house', ['Kh', 'Kd', '2c', '2s', '2h'], 'full house'),
('quads', ['9h', '9d', '9c', '9s', '2h'], 'four of a kind'),
('two pair', ['Jh', 'Jd', '4c', '4s', 'Ah'], 'two pair'),
('trips deuces', ['2h', '2d', '2c', 'Ks', 'Qh'], 'three of a kind'),
('pair of deuces', ['2h', '2d', '5c', '7s', '9h'], 'one pair'),
('ten token pair', ['10h', 'Td', '8c', '6s', '4h'], 'one pair'),
('ten token full house', ['10h', '10d', 'Tc', '6s', '6h'], 'full house')],
[('ace high', ['Ah', 'Kd', '9c', '7s', '4h'], 'high card'),
('full house', ['Kh', 'Kd', '2c', '2s', '2h'], 'full house'),
('quads', ['9h', '9d', '9c', '9s', '2h'], 'four of a kind'),
('two pair', ['Jh', 'Jd', '4c', '4s', 'Ah'], 'two pair'),
('trips deuces', ['2h', '2d', '2c', 'Ks', 'Qh'], 'three of a kind'),
('pair of deuces', ['2h', '2d', '5c', '7s', '9h'], 'one pair'),
('ten token pair', ['10h', 'Td', '8c', '6s', '4h'], 'one pair'),
('ten token full house', ['10h', '10d', 'Tc', '6s', '6h'], 'full house')]]
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 |
|---|---|---|---|
| ace high | high card | high card | Passed |
| pair of aces | error:KeyError | one pair | Failed |
| ace with three | high card | high card | Passed |
| ace with king | high card | high card | Passed |
| ace with seven pair | error:KeyError | one pair | Failed |
| full house | error:KeyError | full house | Failed |
| quads | error:KeyError | four of a kind | Failed |
| deuce and ace | high card | high card | Passed |
SHA-256 / fcb25f197ca058238122b506234888214a3e9b7f154633fc45ebbec45c9001ec
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
R='23456789TJQKA'
P=[2,3,5,7,11,13,17,19,23,29,31,37,41]
prod=1
for c in x:
prod*=P[R.index('T' if c[:-1]=='10' else c[:-1])]
exps=[]
for p in P:
e=0
while prod%(p*p)==0:
prod//=p*p
e+=2
if prod%p==0:
prod//=p
e+=1
e=min(e,2)
if e: exps.append(e)
exps.sort(reverse=True)
names={(4,1):'four of a kind',(3,2):'full house',(3,1,1):'three of a kind',(2,2,1):'two pair',(2,1,1,1):'one pair',(1,1,1,1,1):'high card'}
return names[tuple(exps)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('ace high', ['Ah', 'Kd', '9c', '7s', '4h'], 'high card'),
('pair of aces', ['Ah', 'Ad', '9c', '7s', '4h'], 'one pair'),
('ace with three', ['Ah', '3d', '9c', '7s', '4h'], 'high card'),
('ace with king', ['Ah', 'Kd', 'Qc', '7s', '4h'], 'high card'),
('ace with seven pair', ['Ah', '7d', '7c', '2s', '4h'], 'one pair'),
('full house', ['Kh', 'Kd', '2c', '2s', '2h'], 'full house'),
('quads', ['9h', '9d', '9c', '9s', '2h'], 'four of a kind'),
('deuce and ace', ['2h', 'Ad', '8c', '6s', '4h'], 'high card')],
[('pair of aces', ['Ah', 'Ad', '9c', '7s', '4h'], 'one pair'),
('ace with seven pair', ['Ah', '7d', '7c', '2s', '4h'], 'one pair'),
('full house', ['Kh', 'Kd', '2c', '2s', '2h'], 'full house'),
('quads', ['9h', '9d', '9c', '9s', '2h'], 'four of a kind'),
('trips deuces', ['2h', '2d', '2c', 'Ks', 'Qh'], 'three of a kind'),
('deuce and ace', ['2h', 'Ad', '8c', '6s', '4h'], 'high card'),
('high card low', ['2h', '3d', '5c', '7s', '9h'], 'high card'),
('ten token with ace', ['10h', 'Ad', '8c', '6s', '4h'], 'high card')],
[('pair of aces', ['Ah', 'Ad', '9c', '7s', '4h'], 'one pair'),
('ace with seven pair', ['Ah', '7d', '7c', '2s', '4h'], 'one pair'),
('full house', ['Kh', 'Kd', '2c', '2s', '2h'], 'full house'),
('quads', ['9h', '9d', '9c', '9s', '2h'], 'four of a kind'),
('two pair', ['Jh', 'Jd', '4c', '4s', 'Ah'], 'two pair'),
('trips deuces', ['2h', '2d', '2c', 'Ks', 'Qh'], 'three of a kind'),
('pair of deuces', ['2h', '2d', '5c', '7s', '9h'], 'one pair'),
('ten token full house', ['10h', '10d', 'Tc', '6s', '6h'], 'full house')],
[('ace high', ['Ah', 'Kd', '9c', '7s', '4h'], 'high card'),
('full house', ['Kh', 'Kd', '2c', '2s', '2h'], 'full house'),
('quads', ['9h', '9d', '9c', '9s', '2h'], 'four of a kind'),
('two pair', ['Jh', 'Jd', '4c', '4s', 'Ah'], 'two pair'),
('trips deuces', ['2h', '2d', '2c', 'Ks', 'Qh'], 'three of a kind'),
('pair of deuces', ['2h', '2d', '5c', '7s', '9h'], 'one pair'),
('ten token pair', ['10h', 'Td', '8c', '6s', '4h'], 'one pair'),
('ten token full house', ['10h', '10d', 'Tc', '6s', '6h'], 'full house')],
[('ace high', ['Ah', 'Kd', '9c', '7s', '4h'], 'high card'),
('full house', ['Kh', 'Kd', '2c', '2s', '2h'], 'full house'),
('quads', ['9h', '9d', '9c', '9s', '2h'], 'four of a kind'),
('two pair', ['Jh', 'Jd', '4c', '4s', 'Ah'], 'two pair'),
('trips deuces', ['2h', '2d', '2c', 'Ks', 'Qh'], 'three of a kind'),
('pair of deuces', ['2h', '2d', '5c', '7s', '9h'], 'one pair'),
('ten token pair', ['10h', 'Td', '8c', '6s', '4h'], 'one pair'),
('ten token full house', ['10h', '10d', 'Tc', '6s', '6h'], 'full house')]]
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 |
|---|---|---|---|
| ace high | high card | high card | Passed |
| pair of aces | one pair | one pair | Passed |
| ace with three | high card | high card | Passed |
| ace with king | high card | high card | Passed |
| ace with seven pair | one pair | one pair | Passed |
| full house | error:KeyError | full house | Failed |
| quads | error:KeyError | four of a kind | Failed |
| deuce and ace | high card | high card | Passed |
SHA-256 / 871f8130908b6ce5755eaa92879e50e7849e77f143314a76ae2ecdc65f03dc39
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
R='23456789TJQKA'
P=[2,3,5,7,11,13,17,19,23,29,31,37,41]
prod=1
for c in x:
prod*=P[R.index('T' if c[:-1]=='10' else c[:-1])]
exps=[]
for p in P:
e=0
while prod%p==0:
prod//=p
e+=1
if e: exps.append(e)
exps.sort(reverse=True)
names={(4,1):'four of a kind',(3,2):'full house',(3,1,1):'three of a kind',(2,2,1):'two pair',(2,1,1,1):'one pair',(1,1,1,1,1):'high card'}
return names[tuple(exps)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('ace high', ['Ah', 'Kd', '9c', '7s', '4h'], 'high card'),
('pair of aces', ['Ah', 'Ad', '9c', '7s', '4h'], 'one pair'),
('ace with three', ['Ah', '3d', '9c', '7s', '4h'], 'high card'),
('ace with king', ['Ah', 'Kd', 'Qc', '7s', '4h'], 'high card'),
('ace with seven pair', ['Ah', '7d', '7c', '2s', '4h'], 'one pair'),
('full house', ['Kh', 'Kd', '2c', '2s', '2h'], 'full house'),
('quads', ['9h', '9d', '9c', '9s', '2h'], 'four of a kind'),
('deuce and ace', ['2h', 'Ad', '8c', '6s', '4h'], 'high card')],
[('pair of aces', ['Ah', 'Ad', '9c', '7s', '4h'], 'one pair'),
('ace with seven pair', ['Ah', '7d', '7c', '2s', '4h'], 'one pair'),
('full house', ['Kh', 'Kd', '2c', '2s', '2h'], 'full house'),
('quads', ['9h', '9d', '9c', '9s', '2h'], 'four of a kind'),
('trips deuces', ['2h', '2d', '2c', 'Ks', 'Qh'], 'three of a kind'),
('deuce and ace', ['2h', 'Ad', '8c', '6s', '4h'], 'high card'),
('high card low', ['2h', '3d', '5c', '7s', '9h'], 'high card'),
('ten token with ace', ['10h', 'Ad', '8c', '6s', '4h'], 'high card')],
[('pair of aces', ['Ah', 'Ad', '9c', '7s', '4h'], 'one pair'),
('ace with seven pair', ['Ah', '7d', '7c', '2s', '4h'], 'one pair'),
('full house', ['Kh', 'Kd', '2c', '2s', '2h'], 'full house'),
('quads', ['9h', '9d', '9c', '9s', '2h'], 'four of a kind'),
('two pair', ['Jh', 'Jd', '4c', '4s', 'Ah'], 'two pair'),
('trips deuces', ['2h', '2d', '2c', 'Ks', 'Qh'], 'three of a kind'),
('pair of deuces', ['2h', '2d', '5c', '7s', '9h'], 'one pair'),
('ten token full house', ['10h', '10d', 'Tc', '6s', '6h'], 'full house')],
[('ace high', ['Ah', 'Kd', '9c', '7s', '4h'], 'high card'),
('full house', ['Kh', 'Kd', '2c', '2s', '2h'], 'full house'),
('quads', ['9h', '9d', '9c', '9s', '2h'], 'four of a kind'),
('two pair', ['Jh', 'Jd', '4c', '4s', 'Ah'], 'two pair'),
('trips deuces', ['2h', '2d', '2c', 'Ks', 'Qh'], 'three of a kind'),
('pair of deuces', ['2h', '2d', '5c', '7s', '9h'], 'one pair'),
('ten token pair', ['10h', 'Td', '8c', '6s', '4h'], 'one pair'),
('ten token full house', ['10h', '10d', 'Tc', '6s', '6h'], 'full house')],
[('ace high', ['Ah', 'Kd', '9c', '7s', '4h'], 'high card'),
('full house', ['Kh', 'Kd', '2c', '2s', '2h'], 'full house'),
('quads', ['9h', '9d', '9c', '9s', '2h'], 'four of a kind'),
('two pair', ['Jh', 'Jd', '4c', '4s', 'Ah'], 'two pair'),
('trips deuces', ['2h', '2d', '2c', 'Ks', 'Qh'], 'three of a kind'),
('pair of deuces', ['2h', '2d', '5c', '7s', '9h'], 'one pair'),
('ten token pair', ['10h', 'Td', '8c', '6s', '4h'], 'one pair'),
('ten token full house', ['10h', '10d', 'Tc', '6s', '6h'], 'full house')]]
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 |
|---|---|---|---|
| ace high | high card | high card | Passed |
| pair of aces | one pair | one pair | Passed |
| ace with three | high card | high card | Passed |
| ace with king | high card | high card | Passed |
| ace with seven pair | one pair | one pair | Passed |
| full house | full house | full house | Passed |
| quads | four of a kind | four of a kind | Passed |
| deuce and ace | high card | high card | Passed |
SHA-256 / c319ad56b6beffe42a2c4cbc8403b557baebc1ce8e99d0b4ad11e96495fb7639
Verification & scope
A deterministic toy model with an explicitly stated contract; card strings are rank+suit (for example "As", "Td", "10h"); 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:07.660318+00:00.
Case digest / 46de30f0e201eb0bc3a877966792377e654c7657ed94cfe397c45a725edbf28e