FAILURE MAP
← Case archive

FA-82071 / Poker hand evaluation / Open access

Scooping player paid only the low half · case 01

A player who wins both high and low is paid half the pot.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The low half payout overwrites the high half entry instead of adding to it.

VERIFIED REPAIR

Accumulate each half into the player's total.

Unsuccessful approach: Keeping the larger half still pays the scooper only one half.

Case contract

Input: {"pot", "high": [winners], "low": [qualifying low winners, possibly empty], "order": [seat order from the button's left]}. With a qualifying low the pot is halved, the odd chip going to the high half; each half is split among its winners with odd chips by seat order. Without a low, high winners scoop. A player winning both halves is paid both. Return {player: chips} sorted.

Why this case matters

Hi-lo games halve and quarter pots; the odd chip and scoop rules are frequent disputes.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    pot=x['pot']; order=x['order']
    def split(amount, winners):
        k=len(winners); share=amount//k; rem=amount-share*k
        out={w:share for w in winners}
        for w in [s for s in order if s in winners][:rem]:
            out[w]+=1
        return out
    if x['low']:
        low_half=pot//2; high_half=pot-low_half
        parts=[split(high_half,x['high']), split(low_half,x['low'])]
    else:
        parts=[split(pot,x['high'])]
    res={}
    for part in parts:
        for k,v in part.items():
            res[k]=v
    return dict(sorted(res.items()))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},
   {'a': 51, 'b': 50}),
  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),
  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),
  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},
   {'a': 50, 'b': 25, 'c': 25}),
  ('high and shared low with scooper',
   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),
  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},
   {'b': 40, 'c': 40}),
  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},
   {'a': 25, 'b': 26}),
  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},
   {'a': 3, 'c': 4})],
 [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},
   {'a': 51, 'b': 50}),
  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),
  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),
  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},
   {'a': 50, 'b': 25, 'c': 25}),
  ('high and shared low with scooper',
   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),
  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},
   {'b': 40, 'c': 40}),
  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},
   {'a': 25, 'b': 26}),
  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},
   {'a': 3, 'c': 4})],
 [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},
   {'a': 51, 'b': 50}),
  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),
  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),
  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},
   {'a': 50, 'b': 25, 'c': 25}),
  ('high and shared low with scooper',
   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),
  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},
   {'b': 40, 'c': 40}),
  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},
   {'a': 25, 'b': 26}),
  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},
   {'a': 3, 'c': 4})],
 [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},
   {'a': 51, 'b': 50}),
  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),
  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),
  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},
   {'a': 50, 'b': 25, 'c': 25}),
  ('high and shared low with scooper',
   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),
  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},
   {'b': 40, 'c': 40}),
  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},
   {'a': 25, 'b': 26}),
  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},
   {'a': 3, 'c': 4})],
 [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},
   {'a': 51, 'b': 50}),
  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),
  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),
  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},
   {'a': 50, 'b': 25, 'c': 25}),
  ('high and shared low with scooper',
   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),
  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},
   {'b': 40, 'c': 40}),
  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},
   {'a': 25, 'b': 26}),
  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},
   {'a': 3, 'c': 4})]]
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 fixtureActualExpectedOutcome
odd pot two winners{'a': 51, 'b': 50}{'a': 51, 'b': 50}Passed
no low scoop{'a': 100}{'a': 100}Passed
scoop both halves{'a': 50}{'a': 101}Failed
quartered low{'a': 50, 'b': 25, 'c': 25}{'a': 50, 'b': 25, 'c': 25}Passed
high and shared low with scooper{'b': 23, 'c': 22}{'b': 23, 'c': 67}Failed
even pot{'b': 40, 'c': 40}{'b': 40, 'c': 40}Passed
odd pot no low split high{'a': 25, 'b': 26}{'a': 25, 'b': 26}Passed
small odd pot{'a': 3, 'c': 4}{'a': 3, 'c': 4}Passed

SHA-256 / efd4976fd168441d05800baf3908b04fd9e741f3b4767c79ef841a4a99ba45a4

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    pot=x['pot']; order=x['order']
    def split(amount, winners):
        k=len(winners); share=amount//k; rem=amount-share*k
        out={w:share for w in winners}
        for w in [s for s in order if s in winners][:rem]:
            out[w]+=1
        return out
    if x['low']:
        low_half=pot//2; high_half=pot-low_half
        parts=[split(high_half,x['high']), split(low_half,x['low'])]
    else:
        parts=[split(pot,x['high'])]
    res={}
    for part in parts:
        for k,v in part.items():
            res[k]=max(res.get(k,0),v)
    return dict(sorted(res.items()))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},
   {'a': 51, 'b': 50}),
  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),
  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),
  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},
   {'a': 50, 'b': 25, 'c': 25}),
  ('high and shared low with scooper',
   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),
  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},
   {'b': 40, 'c': 40}),
  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},
   {'a': 25, 'b': 26}),
  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},
   {'a': 3, 'c': 4})],
 [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},
   {'a': 51, 'b': 50}),
  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),
  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),
  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},
   {'a': 50, 'b': 25, 'c': 25}),
  ('high and shared low with scooper',
   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),
  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},
   {'b': 40, 'c': 40}),
  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},
   {'a': 25, 'b': 26}),
  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},
   {'a': 3, 'c': 4})],
 [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},
   {'a': 51, 'b': 50}),
  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),
  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),
  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},
   {'a': 50, 'b': 25, 'c': 25}),
  ('high and shared low with scooper',
   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),
  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},
   {'b': 40, 'c': 40}),
  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},
   {'a': 25, 'b': 26}),
  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},
   {'a': 3, 'c': 4})],
 [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},
   {'a': 51, 'b': 50}),
  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),
  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),
  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},
   {'a': 50, 'b': 25, 'c': 25}),
  ('high and shared low with scooper',
   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),
  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},
   {'b': 40, 'c': 40}),
  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},
   {'a': 25, 'b': 26}),
  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},
   {'a': 3, 'c': 4})],
 [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},
   {'a': 51, 'b': 50}),
  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),
  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),
  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},
   {'a': 50, 'b': 25, 'c': 25}),
  ('high and shared low with scooper',
   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),
  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},
   {'b': 40, 'c': 40}),
  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},
   {'a': 25, 'b': 26}),
  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},
   {'a': 3, 'c': 4})]]
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 fixtureActualExpectedOutcome
odd pot two winners{'a': 51, 'b': 50}{'a': 51, 'b': 50}Passed
no low scoop{'a': 100}{'a': 100}Passed
scoop both halves{'a': 51}{'a': 101}Failed
quartered low{'a': 50, 'b': 25, 'c': 25}{'a': 50, 'b': 25, 'c': 25}Passed
high and shared low with scooper{'b': 23, 'c': 45}{'b': 23, 'c': 67}Failed
even pot{'b': 40, 'c': 40}{'b': 40, 'c': 40}Passed
odd pot no low split high{'a': 25, 'b': 26}{'a': 25, 'b': 26}Passed
small odd pot{'a': 3, 'c': 4}{'a': 3, 'c': 4}Passed

SHA-256 / 3da64b65f9a44c42618f9f496970b199d5236009c0fa41e9299a0969149053b2

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    pot=x['pot']; order=x['order']
    def split(amount, winners):
        k=len(winners); share=amount//k; rem=amount-share*k
        out={w:share for w in winners}
        for w in [s for s in order if s in winners][:rem]:
            out[w]+=1
        return out
    if x['low']:
        low_half=pot//2; high_half=pot-low_half
        parts=[split(high_half,x['high']), split(low_half,x['low'])]
    else:
        parts=[split(pot,x['high'])]
    res={}
    for part in parts:
        for k,v in part.items():
            res[k]=res.get(k,0)+v
    return dict(sorted(res.items()))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},
   {'a': 51, 'b': 50}),
  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),
  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),
  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},
   {'a': 50, 'b': 25, 'c': 25}),
  ('high and shared low with scooper',
   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),
  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},
   {'b': 40, 'c': 40}),
  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},
   {'a': 25, 'b': 26}),
  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},
   {'a': 3, 'c': 4})],
 [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},
   {'a': 51, 'b': 50}),
  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),
  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),
  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},
   {'a': 50, 'b': 25, 'c': 25}),
  ('high and shared low with scooper',
   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),
  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},
   {'b': 40, 'c': 40}),
  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},
   {'a': 25, 'b': 26}),
  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},
   {'a': 3, 'c': 4})],
 [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},
   {'a': 51, 'b': 50}),
  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),
  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),
  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},
   {'a': 50, 'b': 25, 'c': 25}),
  ('high and shared low with scooper',
   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),
  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},
   {'b': 40, 'c': 40}),
  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},
   {'a': 25, 'b': 26}),
  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},
   {'a': 3, 'c': 4})],
 [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},
   {'a': 51, 'b': 50}),
  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),
  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),
  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},
   {'a': 50, 'b': 25, 'c': 25}),
  ('high and shared low with scooper',
   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),
  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},
   {'b': 40, 'c': 40}),
  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},
   {'a': 25, 'b': 26}),
  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},
   {'a': 3, 'c': 4})],
 [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},
   {'a': 51, 'b': 50}),
  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),
  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),
  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},
   {'a': 50, 'b': 25, 'c': 25}),
  ('high and shared low with scooper',
   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),
  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},
   {'b': 40, 'c': 40}),
  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},
   {'a': 25, 'b': 26}),
  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},
   {'a': 3, 'c': 4})]]
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 fixtureActualExpectedOutcome
odd pot two winners{'a': 51, 'b': 50}{'a': 51, 'b': 50}Passed
no low scoop{'a': 100}{'a': 100}Passed
scoop both halves{'a': 101}{'a': 101}Passed
quartered low{'a': 50, 'b': 25, 'c': 25}{'a': 50, 'b': 25, 'c': 25}Passed
high and shared low with scooper{'b': 23, 'c': 67}{'b': 23, 'c': 67}Passed
even pot{'b': 40, 'c': 40}{'b': 40, 'c': 40}Passed
odd pot no low split high{'a': 25, 'b': 26}{'a': 25, 'b': 26}Passed
small odd pot{'a': 3, 'c': 4}{'a': 3, 'c': 4}Passed

SHA-256 / 97cc244f7b5decd7f2ef226153619642926b0770672ef12b9fcd9f49f39393a6

Verification & scope

A deterministic toy model with an explicitly stated contract; 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.832646+00:00.

Case digest / 303ffea7bb3bbabd266ab43587e85bbe8e6ccd0e6b1e5709bdcb12ad49a0f114