FA-83696 / Card game rule engines / Open access
Dealing starts with the dealer · case 01
The dealer receives the first batch.
ROOT CAUSE
The seat loop starts at offset 0.
VERIFIED REPAIR
Start at dealer+1.
Unsuccessful approach: Dealing counter-clockwise from the dealer right sends batches the wrong way round.
Case contract
Input [players, dealer, batch_pattern, deck]. For each batch size in order, deal that many cards to each player starting left of the dealer (dealer+1) clockwise. Remaining cards form the kitty. Return [hands_by_seat, kitty].
Why this case matters
Card-game engines, scoring apps and online tables apply this rule automatically on every hand.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
n, dealer, pattern, deck = x
hands = [[] for _ in range(n)]
pos = 0
for batch in pattern:
for k in range(n):
seat = (dealer + k) % n
hands[seat].extend(deck[pos:pos + batch])
pos += batch
return [hands, deck[pos:]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[3, 0, [1], ['7H', '5C', '5S', '9C', 'QS', 'AS']], [[['5S'], ['7H'], ['5C']], ['9C', 'QS', 'AS']]], [[4, 1, [1, 1, 1], ['AH', '3H', '7D', 'AS', 'TD', '4C', 'TH', '4H', '5H', '6S', '3S', '4D']], [[['7D', 'TH', '3S'], ['AS', '4H', '4D'], ['AH', 'TD', '5H'], ['3H', '4C', '6S']], []]], [[2, 1, [1], ['QC', '6S', 'AH']], [[['QC'], ['6S']], ['AH']]], [[2, 1, [3, 2], ['9H', 'AH', '7S', '4D', 'KD', '3H', '5D', '7C', 'TD', 'QS']], [[['9H', 'AH', '7S', '5D', '7C'], ['4D', 'KD', '3H', 'TD', 'QS']], []]], [[5, 1, [1, 1, 1], ['9H', 'AS', '2H', 'TS', 'QH', '5S', 'QD', '5H', 'AH', '3H', '8H', '7C', '3S', 'JS', '2S', '6H']], [[['TS', 'AH', 'JS'], ['QH', '3H', '2S'], ['9H', '5S', '8H'], ['AS', 'QD', '7C'], ['2H', '5H', '3S']], ['6H']]], [[3, 1, [5], ['KH', 'QH', '7S', '2H', '4S', '5D', 'AC', '9S', '6H', 'AS', 'TH', '8C', 'TS', '4D', 'QC']], [[['5D', 'AC', '9S', '6H', 'AS'], ['TH', '8C', 'TS', '4D', 'QC'], ['KH', 'QH', '7S', '2H', '4S']], []]], [[3, 2, [1, 1, 1], ['5C', 'JC', '6H', '9D', '2C', 'TH', 'JD', '7D', 'TS', 'KC', 'AD', '9H', '6D']], [[['5C', '9D', 'JD'], ['JC', '2C', '7D'], ['6H', 'TH', 'TS']], ['KC', 'AD', '9H', '6D']]], [[4, 3, [2, 2, 1], ['2S', '5S', 'QD', 'QS', 'TH', 'JS', '5H', '2H', '4D', '6C', '5C', 'AD', '8D', '3S', 'TC', '4C', 'KS', '9H', 'QH', 'TD', '3H', '7C', '7D', 'JC']], [[['2S', '5S', '4D', '6C', 'KS'], ['QD', 'QS', '5C', 'AD', '9H'], ['TH', 'JS', '8D', '3S', 'QH'], ['5H', '2H', 'TC', '4C', 'TD']], ['3H', '7C', '7D', 'JC']]]], [[[4, 0, [5], ['AD', 'QD', 'TD', '9D', '3H', '9C', '4H', 'AS', 'KH', 'KD', 'KC', '5C', 'QH', 'AH', '7D', '5H', '8H', 'JD', 'TH', '2S', '4S']], [[['5H', '8H', 'JD', 'TH', '2S'], ['AD', 'QD', 'TD', '9D', '3H'], ['9C', '4H', 'AS', 'KH', 'KD'], ['KC', '5C', 'QH', 'AH', '7D']], ['4S']]], [[4, 3, [2, 2, 1], ['2S', '5S', 'QD', 'QS', 'TH', 'JS', '5H', '2H', '4D', '6C', '5C', 'AD', '8D', '3S', 'TC', '4C', 'KS', '9H', 'QH', 'TD', '3H', '7C', '7D', 'JC']], [[['2S', '5S', '4D', '6C', 'KS'], ['QD', 'QS', '5C', 'AD', '9H'], ['TH', 'JS', '8D', '3S', 'QH'], ['5H', '2H', 'TC', '4C', 'TD']], ['3H', '7C', '7D', 'JC']]], [[3, 0, [1, 1, 1], ['3S', '7C', '4H', '7H', 'AS', '2S', '8C', '7D', '5S']], [[['4H', '2S', '5S'], ['3S', '7H', '8C'], ['7C', 'AS', '7D']], []]], [[4, 2, [3, 2], ['4C', 'JC', '4H', '7D', 'QS', '5S', '2H', 'JH', '2D', '4S', 'TC', '7S', 'AH', '2C', '5C', '4D', '7H', '6C', 'KC', 'TH']], [[['7D', 'QS', '5S', '5C', '4D'], ['2H', 'JH', '2D', '7H', '6C'], ['4S', 'TC', '7S', 'KC', 'TH'], ['4C', 'JC', '4H', 'AH', '2C']], []]], [[4, 2, [2, 3], ['5D', '9D', '7C', '8D', 'AS', 'AH', 'TD', '3C', '6H', '9H', '4H', '5H', '9C', 'KD', 'AC', 'QD', '6D', '5S', 'AD', 'QH', '6S']], [[['7C', '8D', '5H', '9C', 'KD'], ['AS', 'AH', 'AC', 'QD', '6D'], ['TD', '3C', '5S', 'AD', 'QH'], ['5D', '9D', '6H', '9H', '4H']], ['6S']]], [[5, 3, [2, 2, 1], ['AS', '6S', '9C', '6C', '5S', '6D', 'JS', '2H', '8S', '5D', '8H', '2D', 'TH', 'JD', '3D', '7D', '2C', 'QH', '8C', '3S', '8D', '9S', 'AC', 'KH', '7H', '4C']], [[['9C', '6C', 'TH', 'JD', '9S'], ['5S', '6D', '3D', '7D', 'AC'], ['JS', '2H', '2C', 'QH', 'KH'], ['8S', '5D', '8C', '3S', '7H'], ['AS', '6S', '8H', '2D', '8D']], ['4C']]], [[4, 2, [5], ['QC', '8C', '6C', 'TD', '8H', 'JS', '5C', 'TH', '3H', '5D', '3S', 'JH', 'TS', 'AD', '7H', '6S', 'JD', '7D', '7S', '7C']], [[['JS', '5C', 'TH', '3H', '5D'], ['3S', 'JH', 'TS', 'AD', '7H'], ['6S', 'JD', '7D', '7S', '7C'], ['QC', '8C', '6C', 'TD', '8H']], []]], [[3, 2, [2, 3], ['2D', '7S', '2H', 'KH', '5S', '8S', '5C', 'AD', 'TC', '9C', '3D', '9D', '6C', 'KS', '4H']], [[['2D', '7S', '5C', 'AD', 'TC'], ['2H', 'KH', '9C', '3D', '9D'], ['5S', '8S', '6C', 'KS', '4H']], []]]], [[[4, 1, [1, 1, 1], ['AH', '3H', '7D', 'AS', 'TD', '4C', 'TH', '4H', '5H', '6S', '3S', '4D']], [[['7D', 'TH', '3S'], ['AS', '4H', '4D'], ['AH', 'TD', '5H'], ['3H', '4C', '6S']], []]], [[5, 3, [2, 2, 1], ['AS', '6S', '9C', '6C', '5S', '6D', 'JS', '2H', '8S', '5D', '8H', '2D', 'TH', 'JD', '3D', '7D', '2C', 'QH', '8C', '3S', '8D', '9S', 'AC', 'KH', '7H', '4C']], [[['9C', '6C', 'TH', 'JD', '9S'], ['5S', '6D', '3D', '7D', 'AC'], ['JS', '2H', '2C', 'QH', 'KH'], ['8S', '5D', '8C', '3S', '7H'], ['AS', '6S', '8H', '2D', '8D']], ['4C']]], [[4, 3, [5], ['KD', '2H', '3H', 'JC', 'QC', 'TC', 'AS', 'JS', '4D', 'KC', '2S', 'QH', 'AC', '4S', '8S', 'TH', '3C', 'JD', 'TS', '5H']], [[['KD', '2H', '3H', 'JC', 'QC'], ['TC', 'AS', 'JS', '4D', 'KC'], ['2S', 'QH', 'AC', '4S', '8S'], ['TH', '3C', 'JD', 'TS', '5H']], []]], [[5, 4, [3, 2], ['4S', 'QD', 'JH', '8S', '8C', '2C', 'TD', 'AS', '5H', '9C', '7S', '9H', 'JC', 'QS', 'KD', '8D', '3H', '2D', 'TH', '6S', '4D', '2H', '7H', '7C', '9S', 'AC']], [[['4S', 'QD', 'JH', '8D', '3H'], ['8S', '8C', '2C', '2D', 'TH'], ['TD', 'AS', '5H', '6S', '4D'], ['9C', '7S', '9H', '2H', '7H'], ['JC', 'QS', 'KD', '7C', '9S']], ['AC']]], [[3, 1, [2, 2, 1], ['QS', '3C', '2H', 'QC', '2C', 'AH', 'AD', '6C', '7H', '6H', 'KS', '9H', 'TD', '4H', 'AS', '8H']], [[['2H', 'QC', '7H', '6H', '4H'], ['2C', 'AH', 'KS', '9H', 'AS'], ['QS', '3C', 'AD', '6C', 'TD']], ['8H']]], [[2, 1, [1], ['TH', 'JC']], [[['TH'], ['JC']], []]], [[2, 0, [3, 2], ['QD', 'TH', '7S', '5C', 'TC', '2D', '2H', 'TS', 'JD', '9S', 'QS']], [[['5C', 'TC', '2D', 'JD', '9S'], ['QD', 'TH', '7S', '2H', 'TS']], ['QS']]], [[5, 2, [2, 3], ['TS', '8C', 'QD', '3C', '6H', 'QS', '4C', 'QC', '2C', '7S', '2D', 'TD', '6C', '5H', '8D', 'KH', '5S', '4S', '9D', '9H', '5C', '7D', '2H', '3S', '6S']], [[['6H', 'QS', '5S', '4S', '9D'], ['4C', 'QC', '9H', '5C', '7D'], ['2C', '7S', '2H', '3S', '6S'], ['TS', '8C', '2D', 'TD', '6C'], ['QD', '3C', '5H', '8D', 'KH']], []]]], [[[2, 1, [1], ['QC', '6S', 'AH']], [[['QC'], ['6S']], ['AH']]], [[3, 1, [2, 2, 1], ['QS', '3C', '2H', 'QC', '2C', 'AH', 'AD', '6C', '7H', '6H', 'KS', '9H', 'TD', '4H', 'AS', '8H']], [[['2H', 'QC', '7H', '6H', '4H'], ['2C', 'AH', 'KS', '9H', 'AS'], ['QS', '3C', 'AD', '6C', 'TD']], ['8H']]], [[5, 2, [1, 1, 1], ['8C', '5C', '3C', '6C', 'KH', '2S', '2D', 'KS', '3H', '9D', 'AD', 'JC', 'AC', 'QC', '8S', 'TS']], [[['3C', 'KS', 'AC'], ['6C', '3H', 'QC'], ['KH', '9D', '8S'], ['8C', '2S', 'AD'], ['5C', '2D', 'JC']], ['TS']]], [[2, 0, [5], ['2D', '7H', '4C', '7D', '5C', 'TC', '3D', 'QD', '4S', 'KS', 'JD']], [[['TC', '3D', 'QD', '4S', 'KS'], ['2D', '7H', '4C', '7D', '5C']], ['JD']]], [[3, 2, [3, 2], ['2D', '8C', 'JS', '6H', '8H', '4S', '9C', '5H', 'QH', '7C', '4H', 'QC', '3H', '6S', 'AD', '4C']], [[['2D', '8C', 'JS', '7C', '4H'], ['6H', '8H', '4S', 'QC', '3H'], ['9C', '5H', 'QH', '6S', 'AD']], ['4C']]], [[4, 2, [2, 3], ['8S', 'QS', 'JS', '2C', '5S', '3S', '6S', 'KS', '9D', 'TD', 'TH', '6D', '9H', '8D', 'JH', 'JC', '8C', '9S', '4C', '9C', 'TS', '7C', 'TC', 'KH']], [[['JS', '2C', '6D', '9H', '8D'], ['5S', '3S', 'JH', 'JC', '8C'], ['6S', 'KS', '9S', '4C', '9C'], ['8S', 'QS', '9D', 'TD', 'TH']], ['TS', '7C', 'TC', 'KH']]], [[2, 0, [3, 2], ['JC', '4C', 'KH', '7C', '6S', 'KS', 'TC', '2D', '9D', '5S', '4H', '2C', '4D', '5D']], [[['7C', '6S', 'KS', '9D', '5S'], ['JC', '4C', 'KH', 'TC', '2D']], ['4H', '2C', '4D', '5D']]], [[4, 2, [3, 2], ['2H', '7H', '5C', 'QD', 'JC', '9D', 'AH', 'KD', '2S', '4C', '4H', '6C', '8H', 'JH', 'QC', 'JD', '8S', '8C', '2D', '5S']], [[['QD', 'JC', '9D', 'QC', 'JD'], ['AH', 'KD', '2S', '8S', '8C'], ['4C', '4H', '6C', '2D', '5S'], ['2H', '7H', '5C', '8H', 'JH']], []]]], [[[3, 1, [5], ['KH', 'QH', '7S', '2H', '4S', '5D', 'AC', '9S', '6H', 'AS', 'TH', '8C', 'TS', '4D', 'QC']], [[['5D', 'AC', '9S', '6H', 'AS'], ['TH', '8C', 'TS', '4D', 'QC'], ['KH', 'QH', '7S', '2H', '4S']], []]], [[4, 2, [2, 3], ['8S', 'QS', 'JS', '2C', '5S', '3S', '6S', 'KS', '9D', 'TD', 'TH', '6D', '9H', '8D', 'JH', 'JC', '8C', '9S', '4C', '9C', 'TS', '7C', 'TC', 'KH']], [[['JS', '2C', '6D', '9H', '8D'], ['5S', '3S', 'JH', 'JC', '8C'], ['6S', 'KS', '9S', '4C', '9C'], ['8S', 'QS', '9D', 'TD', 'TH']], ['TS', '7C', 'TC', 'KH']]], [[5, 0, [1], ['JH', 'QC', 'TC', 'AD', '4S', '7H', '4D', '3C', '3D']], [[['4S'], ['JH'], ['QC'], ['TC'], ['AD']], ['7H', '4D', '3C', '3D']]], [[2, 1, [1], ['6S', '9H', 'AD', '3H', '3D', '4C']], [[['6S'], ['9H']], ['AD', '3H', '3D', '4C']]], [[2, 1, [5], ['7D', '8C', '5H', 'TD', '4H', 'AD', 'JS', 'QC', 'QH', '8D', '7C', '5S', '5C']], [[['7D', '8C', '5H', 'TD', '4H'], ['AD', 'JS', 'QC', 'QH', '8D']], ['7C', '5S', '5C']]], [[2, 1, [3, 2], ['TD', 'JD', '7D', '5S', '9H', 'QH', '8D', 'JH', '9D', 'QS', 'AS', '2D', 'TS', '2H']], [[['TD', 'JD', '7D', '8D', 'JH'], ['5S', '9H', 'QH', '9D', 'QS']], ['AS', '2D', 'TS', '2H']]], [[4, 0, [1, 1, 1], ['8H', '4C', 'TS', 'JD', '2H', '2S', '3C', '7S', '6D', 'KD', '3S', '8D']], [[['JD', '7S', '8D'], ['8H', '2H', '6D'], ['4C', '2S', 'KD'], ['TS', '3C', '3S']], []]], [[5, 2, [1, 1, 1], ['KS', '2H', '3C', 'KD', '5C', 'AC', 'JS', '8S', 'AD', 'TC', '3S', '4S', 'QH', '9H', '7H']], [[['3C', '8S', 'QH'], ['KD', 'AD', '9H'], ['5C', 'TC', '7H'], ['KS', 'AC', '3S'], ['2H', 'JS', '4S']], []]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("deal case %d" % i, solve(args), 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 |
|---|---|---|---|
| deal case 0 | [[['7H'], ['5C'], ['5S']], ['9C', 'QS', 'AS']] | [[['5S'], ['7H'], ['5C']], ['9C', 'QS', 'AS']] | Failed |
| deal case 1 | [[['AS', '4H', '4D'], ['AH', 'TD', '5H'], ['3H', '4C', '6S'], ['7D', 'TH', '3S']], []] | [[['7D', 'TH', '3S'], ['AS', '4H', '4D'], ['AH', 'TD', '5H'], ['3H', '4C', '6S']], []] | Failed |
| deal case 2 | [[['6S'], ['QC']], ['AH']] | [[['QC'], ['6S']], ['AH']] | Failed |
| deal case 3 | [[['4D', 'KD', '3H', 'TD', 'QS'], ['9H', 'AH', '7S', '5D', '7C']], []] | [[['9H', 'AH', '7S', '5D', '7C'], ['4D', 'KD', '3H', 'TD', 'QS']], []] | Failed |
| deal case 4 | [[['QH', '3H', '2S'], ['9H', '5S', '8H'], ['AS', 'QD', '7C'], ['2H', '5H', '3S'], ['TS', 'AH', 'JS']], ['6H']] | [[['TS', 'AH', 'JS'], ['QH', '3H', '2S'], ['9H', '5S', '8H'], ['AS', 'QD', '7C'], ['2H', '5H', '3S']], ['6H']] | Failed |
| deal case 5 | [[['TH', '8C', 'TS', '4D', 'QC'], ['KH', 'QH', '7S', '2H', '4S'], ['5D', 'AC', '9S', '6H', 'AS']], []] | [[['5D', 'AC', '9S', '6H', 'AS'], ['TH', '8C', 'TS', '4D', 'QC'], ['KH', 'QH', '7S', '2H', '4S']], []] | Failed |
| deal case 6 | [[['JC', '2C', '7D'], ['6H', 'TH', 'TS'], ['5C', '9D', 'JD']], ['KC', 'AD', '9H', '6D']] | [[['5C', '9D', 'JD'], ['JC', '2C', '7D'], ['6H', 'TH', 'TS']], ['KC', 'AD', '9H', '6D']] | Failed |
| deal case 7 | [[['QD', 'QS', '5C', 'AD', '9H'], ['TH', 'JS', '8D', '3S', 'QH'], ['5H', '2H', 'TC', '4C', 'TD'], ['2S', '5S', '4D', '6C', 'KS']], ['3H', '7C', '7D', 'JC']] | [[['2S', '5S', '4D', '6C', 'KS'], ['QD', 'QS', '5C', 'AD', '9H'], ['TH', 'JS', '8D', '3S', 'QH'], ['5H', '2H', 'TC', '4C', 'TD']], ['3H', '7C', '7D', 'JC']] | Failed |
SHA-256 / 53322654bf6afa31449011303f0daa07d6cfd6083e795da2cb04c8e2da18377b
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
n, dealer, pattern, deck = x
hands = [[] for _ in range(n)]
pos = 0
for batch in pattern:
for k in range(1, n + 1):
seat = (dealer - k) % n
hands[seat].extend(deck[pos:pos + batch])
pos += batch
return [hands, deck[pos:]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[3, 0, [1], ['7H', '5C', '5S', '9C', 'QS', 'AS']], [[['5S'], ['7H'], ['5C']], ['9C', 'QS', 'AS']]], [[4, 1, [1, 1, 1], ['AH', '3H', '7D', 'AS', 'TD', '4C', 'TH', '4H', '5H', '6S', '3S', '4D']], [[['7D', 'TH', '3S'], ['AS', '4H', '4D'], ['AH', 'TD', '5H'], ['3H', '4C', '6S']], []]], [[2, 1, [1], ['QC', '6S', 'AH']], [[['QC'], ['6S']], ['AH']]], [[2, 1, [3, 2], ['9H', 'AH', '7S', '4D', 'KD', '3H', '5D', '7C', 'TD', 'QS']], [[['9H', 'AH', '7S', '5D', '7C'], ['4D', 'KD', '3H', 'TD', 'QS']], []]], [[5, 1, [1, 1, 1], ['9H', 'AS', '2H', 'TS', 'QH', '5S', 'QD', '5H', 'AH', '3H', '8H', '7C', '3S', 'JS', '2S', '6H']], [[['TS', 'AH', 'JS'], ['QH', '3H', '2S'], ['9H', '5S', '8H'], ['AS', 'QD', '7C'], ['2H', '5H', '3S']], ['6H']]], [[3, 1, [5], ['KH', 'QH', '7S', '2H', '4S', '5D', 'AC', '9S', '6H', 'AS', 'TH', '8C', 'TS', '4D', 'QC']], [[['5D', 'AC', '9S', '6H', 'AS'], ['TH', '8C', 'TS', '4D', 'QC'], ['KH', 'QH', '7S', '2H', '4S']], []]], [[3, 2, [1, 1, 1], ['5C', 'JC', '6H', '9D', '2C', 'TH', 'JD', '7D', 'TS', 'KC', 'AD', '9H', '6D']], [[['5C', '9D', 'JD'], ['JC', '2C', '7D'], ['6H', 'TH', 'TS']], ['KC', 'AD', '9H', '6D']]], [[4, 3, [2, 2, 1], ['2S', '5S', 'QD', 'QS', 'TH', 'JS', '5H', '2H', '4D', '6C', '5C', 'AD', '8D', '3S', 'TC', '4C', 'KS', '9H', 'QH', 'TD', '3H', '7C', '7D', 'JC']], [[['2S', '5S', '4D', '6C', 'KS'], ['QD', 'QS', '5C', 'AD', '9H'], ['TH', 'JS', '8D', '3S', 'QH'], ['5H', '2H', 'TC', '4C', 'TD']], ['3H', '7C', '7D', 'JC']]]], [[[4, 0, [5], ['AD', 'QD', 'TD', '9D', '3H', '9C', '4H', 'AS', 'KH', 'KD', 'KC', '5C', 'QH', 'AH', '7D', '5H', '8H', 'JD', 'TH', '2S', '4S']], [[['5H', '8H', 'JD', 'TH', '2S'], ['AD', 'QD', 'TD', '9D', '3H'], ['9C', '4H', 'AS', 'KH', 'KD'], ['KC', '5C', 'QH', 'AH', '7D']], ['4S']]], [[4, 3, [2, 2, 1], ['2S', '5S', 'QD', 'QS', 'TH', 'JS', '5H', '2H', '4D', '6C', '5C', 'AD', '8D', '3S', 'TC', '4C', 'KS', '9H', 'QH', 'TD', '3H', '7C', '7D', 'JC']], [[['2S', '5S', '4D', '6C', 'KS'], ['QD', 'QS', '5C', 'AD', '9H'], ['TH', 'JS', '8D', '3S', 'QH'], ['5H', '2H', 'TC', '4C', 'TD']], ['3H', '7C', '7D', 'JC']]], [[3, 0, [1, 1, 1], ['3S', '7C', '4H', '7H', 'AS', '2S', '8C', '7D', '5S']], [[['4H', '2S', '5S'], ['3S', '7H', '8C'], ['7C', 'AS', '7D']], []]], [[4, 2, [3, 2], ['4C', 'JC', '4H', '7D', 'QS', '5S', '2H', 'JH', '2D', '4S', 'TC', '7S', 'AH', '2C', '5C', '4D', '7H', '6C', 'KC', 'TH']], [[['7D', 'QS', '5S', '5C', '4D'], ['2H', 'JH', '2D', '7H', '6C'], ['4S', 'TC', '7S', 'KC', 'TH'], ['4C', 'JC', '4H', 'AH', '2C']], []]], [[4, 2, [2, 3], ['5D', '9D', '7C', '8D', 'AS', 'AH', 'TD', '3C', '6H', '9H', '4H', '5H', '9C', 'KD', 'AC', 'QD', '6D', '5S', 'AD', 'QH', '6S']], [[['7C', '8D', '5H', '9C', 'KD'], ['AS', 'AH', 'AC', 'QD', '6D'], ['TD', '3C', '5S', 'AD', 'QH'], ['5D', '9D', '6H', '9H', '4H']], ['6S']]], [[5, 3, [2, 2, 1], ['AS', '6S', '9C', '6C', '5S', '6D', 'JS', '2H', '8S', '5D', '8H', '2D', 'TH', 'JD', '3D', '7D', '2C', 'QH', '8C', '3S', '8D', '9S', 'AC', 'KH', '7H', '4C']], [[['9C', '6C', 'TH', 'JD', '9S'], ['5S', '6D', '3D', '7D', 'AC'], ['JS', '2H', '2C', 'QH', 'KH'], ['8S', '5D', '8C', '3S', '7H'], ['AS', '6S', '8H', '2D', '8D']], ['4C']]], [[4, 2, [5], ['QC', '8C', '6C', 'TD', '8H', 'JS', '5C', 'TH', '3H', '5D', '3S', 'JH', 'TS', 'AD', '7H', '6S', 'JD', '7D', '7S', '7C']], [[['JS', '5C', 'TH', '3H', '5D'], ['3S', 'JH', 'TS', 'AD', '7H'], ['6S', 'JD', '7D', '7S', '7C'], ['QC', '8C', '6C', 'TD', '8H']], []]], [[3, 2, [2, 3], ['2D', '7S', '2H', 'KH', '5S', '8S', '5C', 'AD', 'TC', '9C', '3D', '9D', '6C', 'KS', '4H']], [[['2D', '7S', '5C', 'AD', 'TC'], ['2H', 'KH', '9C', '3D', '9D'], ['5S', '8S', '6C', 'KS', '4H']], []]]], [[[4, 1, [1, 1, 1], ['AH', '3H', '7D', 'AS', 'TD', '4C', 'TH', '4H', '5H', '6S', '3S', '4D']], [[['7D', 'TH', '3S'], ['AS', '4H', '4D'], ['AH', 'TD', '5H'], ['3H', '4C', '6S']], []]], [[5, 3, [2, 2, 1], ['AS', '6S', '9C', '6C', '5S', '6D', 'JS', '2H', '8S', '5D', '8H', '2D', 'TH', 'JD', '3D', '7D', '2C', 'QH', '8C', '3S', '8D', '9S', 'AC', 'KH', '7H', '4C']], [[['9C', '6C', 'TH', 'JD', '9S'], ['5S', '6D', '3D', '7D', 'AC'], ['JS', '2H', '2C', 'QH', 'KH'], ['8S', '5D', '8C', '3S', '7H'], ['AS', '6S', '8H', '2D', '8D']], ['4C']]], [[4, 3, [5], ['KD', '2H', '3H', 'JC', 'QC', 'TC', 'AS', 'JS', '4D', 'KC', '2S', 'QH', 'AC', '4S', '8S', 'TH', '3C', 'JD', 'TS', '5H']], [[['KD', '2H', '3H', 'JC', 'QC'], ['TC', 'AS', 'JS', '4D', 'KC'], ['2S', 'QH', 'AC', '4S', '8S'], ['TH', '3C', 'JD', 'TS', '5H']], []]], [[5, 4, [3, 2], ['4S', 'QD', 'JH', '8S', '8C', '2C', 'TD', 'AS', '5H', '9C', '7S', '9H', 'JC', 'QS', 'KD', '8D', '3H', '2D', 'TH', '6S', '4D', '2H', '7H', '7C', '9S', 'AC']], [[['4S', 'QD', 'JH', '8D', '3H'], ['8S', '8C', '2C', '2D', 'TH'], ['TD', 'AS', '5H', '6S', '4D'], ['9C', '7S', '9H', '2H', '7H'], ['JC', 'QS', 'KD', '7C', '9S']], ['AC']]], [[3, 1, [2, 2, 1], ['QS', '3C', '2H', 'QC', '2C', 'AH', 'AD', '6C', '7H', '6H', 'KS', '9H', 'TD', '4H', 'AS', '8H']], [[['2H', 'QC', '7H', '6H', '4H'], ['2C', 'AH', 'KS', '9H', 'AS'], ['QS', '3C', 'AD', '6C', 'TD']], ['8H']]], [[2, 1, [1], ['TH', 'JC']], [[['TH'], ['JC']], []]], [[2, 0, [3, 2], ['QD', 'TH', '7S', '5C', 'TC', '2D', '2H', 'TS', 'JD', '9S', 'QS']], [[['5C', 'TC', '2D', 'JD', '9S'], ['QD', 'TH', '7S', '2H', 'TS']], ['QS']]], [[5, 2, [2, 3], ['TS', '8C', 'QD', '3C', '6H', 'QS', '4C', 'QC', '2C', '7S', '2D', 'TD', '6C', '5H', '8D', 'KH', '5S', '4S', '9D', '9H', '5C', '7D', '2H', '3S', '6S']], [[['6H', 'QS', '5S', '4S', '9D'], ['4C', 'QC', '9H', '5C', '7D'], ['2C', '7S', '2H', '3S', '6S'], ['TS', '8C', '2D', 'TD', '6C'], ['QD', '3C', '5H', '8D', 'KH']], []]]], [[[2, 1, [1], ['QC', '6S', 'AH']], [[['QC'], ['6S']], ['AH']]], [[3, 1, [2, 2, 1], ['QS', '3C', '2H', 'QC', '2C', 'AH', 'AD', '6C', '7H', '6H', 'KS', '9H', 'TD', '4H', 'AS', '8H']], [[['2H', 'QC', '7H', '6H', '4H'], ['2C', 'AH', 'KS', '9H', 'AS'], ['QS', '3C', 'AD', '6C', 'TD']], ['8H']]], [[5, 2, [1, 1, 1], ['8C', '5C', '3C', '6C', 'KH', '2S', '2D', 'KS', '3H', '9D', 'AD', 'JC', 'AC', 'QC', '8S', 'TS']], [[['3C', 'KS', 'AC'], ['6C', '3H', 'QC'], ['KH', '9D', '8S'], ['8C', '2S', 'AD'], ['5C', '2D', 'JC']], ['TS']]], [[2, 0, [5], ['2D', '7H', '4C', '7D', '5C', 'TC', '3D', 'QD', '4S', 'KS', 'JD']], [[['TC', '3D', 'QD', '4S', 'KS'], ['2D', '7H', '4C', '7D', '5C']], ['JD']]], [[3, 2, [3, 2], ['2D', '8C', 'JS', '6H', '8H', '4S', '9C', '5H', 'QH', '7C', '4H', 'QC', '3H', '6S', 'AD', '4C']], [[['2D', '8C', 'JS', '7C', '4H'], ['6H', '8H', '4S', 'QC', '3H'], ['9C', '5H', 'QH', '6S', 'AD']], ['4C']]], [[4, 2, [2, 3], ['8S', 'QS', 'JS', '2C', '5S', '3S', '6S', 'KS', '9D', 'TD', 'TH', '6D', '9H', '8D', 'JH', 'JC', '8C', '9S', '4C', '9C', 'TS', '7C', 'TC', 'KH']], [[['JS', '2C', '6D', '9H', '8D'], ['5S', '3S', 'JH', 'JC', '8C'], ['6S', 'KS', '9S', '4C', '9C'], ['8S', 'QS', '9D', 'TD', 'TH']], ['TS', '7C', 'TC', 'KH']]], [[2, 0, [3, 2], ['JC', '4C', 'KH', '7C', '6S', 'KS', 'TC', '2D', '9D', '5S', '4H', '2C', '4D', '5D']], [[['7C', '6S', 'KS', '9D', '5S'], ['JC', '4C', 'KH', 'TC', '2D']], ['4H', '2C', '4D', '5D']]], [[4, 2, [3, 2], ['2H', '7H', '5C', 'QD', 'JC', '9D', 'AH', 'KD', '2S', '4C', '4H', '6C', '8H', 'JH', 'QC', 'JD', '8S', '8C', '2D', '5S']], [[['QD', 'JC', '9D', 'QC', 'JD'], ['AH', 'KD', '2S', '8S', '8C'], ['4C', '4H', '6C', '2D', '5S'], ['2H', '7H', '5C', '8H', 'JH']], []]]], [[[3, 1, [5], ['KH', 'QH', '7S', '2H', '4S', '5D', 'AC', '9S', '6H', 'AS', 'TH', '8C', 'TS', '4D', 'QC']], [[['5D', 'AC', '9S', '6H', 'AS'], ['TH', '8C', 'TS', '4D', 'QC'], ['KH', 'QH', '7S', '2H', '4S']], []]], [[4, 2, [2, 3], ['8S', 'QS', 'JS', '2C', '5S', '3S', '6S', 'KS', '9D', 'TD', 'TH', '6D', '9H', '8D', 'JH', 'JC', '8C', '9S', '4C', '9C', 'TS', '7C', 'TC', 'KH']], [[['JS', '2C', '6D', '9H', '8D'], ['5S', '3S', 'JH', 'JC', '8C'], ['6S', 'KS', '9S', '4C', '9C'], ['8S', 'QS', '9D', 'TD', 'TH']], ['TS', '7C', 'TC', 'KH']]], [[5, 0, [1], ['JH', 'QC', 'TC', 'AD', '4S', '7H', '4D', '3C', '3D']], [[['4S'], ['JH'], ['QC'], ['TC'], ['AD']], ['7H', '4D', '3C', '3D']]], [[2, 1, [1], ['6S', '9H', 'AD', '3H', '3D', '4C']], [[['6S'], ['9H']], ['AD', '3H', '3D', '4C']]], [[2, 1, [5], ['7D', '8C', '5H', 'TD', '4H', 'AD', 'JS', 'QC', 'QH', '8D', '7C', '5S', '5C']], [[['7D', '8C', '5H', 'TD', '4H'], ['AD', 'JS', 'QC', 'QH', '8D']], ['7C', '5S', '5C']]], [[2, 1, [3, 2], ['TD', 'JD', '7D', '5S', '9H', 'QH', '8D', 'JH', '9D', 'QS', 'AS', '2D', 'TS', '2H']], [[['TD', 'JD', '7D', '8D', 'JH'], ['5S', '9H', 'QH', '9D', 'QS']], ['AS', '2D', 'TS', '2H']]], [[4, 0, [1, 1, 1], ['8H', '4C', 'TS', 'JD', '2H', '2S', '3C', '7S', '6D', 'KD', '3S', '8D']], [[['JD', '7S', '8D'], ['8H', '2H', '6D'], ['4C', '2S', 'KD'], ['TS', '3C', '3S']], []]], [[5, 2, [1, 1, 1], ['KS', '2H', '3C', 'KD', '5C', 'AC', 'JS', '8S', 'AD', 'TC', '3S', '4S', 'QH', '9H', '7H']], [[['3C', '8S', 'QH'], ['KD', 'AD', '9H'], ['5C', 'TC', '7H'], ['KS', 'AC', '3S'], ['2H', 'JS', '4S']], []]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("deal case %d" % i, solve(args), 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 |
|---|---|---|---|
| deal case 0 | [[['5S'], ['5C'], ['7H']], ['9C', 'QS', 'AS']] | [[['5S'], ['7H'], ['5C']], ['9C', 'QS', 'AS']] | Failed |
| deal case 1 | [[['AH', 'TD', '5H'], ['AS', '4H', '4D'], ['7D', 'TH', '3S'], ['3H', '4C', '6S']], []] | [[['7D', 'TH', '3S'], ['AS', '4H', '4D'], ['AH', 'TD', '5H'], ['3H', '4C', '6S']], []] | Failed |
| deal case 2 | [[['QC'], ['6S']], ['AH']] | [[['QC'], ['6S']], ['AH']] | Passed |
| deal case 3 | [[['9H', 'AH', '7S', '5D', '7C'], ['4D', 'KD', '3H', 'TD', 'QS']], []] | [[['9H', 'AH', '7S', '5D', '7C'], ['4D', 'KD', '3H', 'TD', 'QS']], []] | Passed |
| deal case 4 | [[['9H', '5S', '8H'], ['QH', '3H', '2S'], ['TS', 'AH', 'JS'], ['2H', '5H', '3S'], ['AS', 'QD', '7C']], ['6H']] | [[['TS', 'AH', 'JS'], ['QH', '3H', '2S'], ['9H', '5S', '8H'], ['AS', 'QD', '7C'], ['2H', '5H', '3S']], ['6H']] | Failed |
| deal case 5 | [[['KH', 'QH', '7S', '2H', '4S'], ['TH', '8C', 'TS', '4D', 'QC'], ['5D', 'AC', '9S', '6H', 'AS']], []] | [[['5D', 'AC', '9S', '6H', 'AS'], ['TH', '8C', 'TS', '4D', 'QC'], ['KH', 'QH', '7S', '2H', '4S']], []] | Failed |
| deal case 6 | [[['JC', '2C', '7D'], ['5C', '9D', 'JD'], ['6H', 'TH', 'TS']], ['KC', 'AD', '9H', '6D']] | [[['5C', '9D', 'JD'], ['JC', '2C', '7D'], ['6H', 'TH', 'TS']], ['KC', 'AD', '9H', '6D']] | Failed |
| deal case 7 | [[['TH', 'JS', '8D', '3S', 'QH'], ['QD', 'QS', '5C', 'AD', '9H'], ['2S', '5S', '4D', '6C', 'KS'], ['5H', '2H', 'TC', '4C', 'TD']], ['3H', '7C', '7D', 'JC']] | [[['2S', '5S', '4D', '6C', 'KS'], ['QD', 'QS', '5C', 'AD', '9H'], ['TH', 'JS', '8D', '3S', 'QH'], ['5H', '2H', 'TC', '4C', 'TD']], ['3H', '7C', '7D', 'JC']] | Failed |
SHA-256 / 786b4e8081353bb1edaf6aaecbdf5600e58a5f5f08b496e4a395f7523b0f2620
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
n, dealer, pattern, deck = x
hands = [[] for _ in range(n)]
pos = 0
for batch in pattern:
for k in range(1, n + 1):
seat = (dealer + k) % n
hands[seat].extend(deck[pos:pos + batch])
pos += batch
return [hands, deck[pos:]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[3, 0, [1], ['7H', '5C', '5S', '9C', 'QS', 'AS']], [[['5S'], ['7H'], ['5C']], ['9C', 'QS', 'AS']]], [[4, 1, [1, 1, 1], ['AH', '3H', '7D', 'AS', 'TD', '4C', 'TH', '4H', '5H', '6S', '3S', '4D']], [[['7D', 'TH', '3S'], ['AS', '4H', '4D'], ['AH', 'TD', '5H'], ['3H', '4C', '6S']], []]], [[2, 1, [1], ['QC', '6S', 'AH']], [[['QC'], ['6S']], ['AH']]], [[2, 1, [3, 2], ['9H', 'AH', '7S', '4D', 'KD', '3H', '5D', '7C', 'TD', 'QS']], [[['9H', 'AH', '7S', '5D', '7C'], ['4D', 'KD', '3H', 'TD', 'QS']], []]], [[5, 1, [1, 1, 1], ['9H', 'AS', '2H', 'TS', 'QH', '5S', 'QD', '5H', 'AH', '3H', '8H', '7C', '3S', 'JS', '2S', '6H']], [[['TS', 'AH', 'JS'], ['QH', '3H', '2S'], ['9H', '5S', '8H'], ['AS', 'QD', '7C'], ['2H', '5H', '3S']], ['6H']]], [[3, 1, [5], ['KH', 'QH', '7S', '2H', '4S', '5D', 'AC', '9S', '6H', 'AS', 'TH', '8C', 'TS', '4D', 'QC']], [[['5D', 'AC', '9S', '6H', 'AS'], ['TH', '8C', 'TS', '4D', 'QC'], ['KH', 'QH', '7S', '2H', '4S']], []]], [[3, 2, [1, 1, 1], ['5C', 'JC', '6H', '9D', '2C', 'TH', 'JD', '7D', 'TS', 'KC', 'AD', '9H', '6D']], [[['5C', '9D', 'JD'], ['JC', '2C', '7D'], ['6H', 'TH', 'TS']], ['KC', 'AD', '9H', '6D']]], [[4, 3, [2, 2, 1], ['2S', '5S', 'QD', 'QS', 'TH', 'JS', '5H', '2H', '4D', '6C', '5C', 'AD', '8D', '3S', 'TC', '4C', 'KS', '9H', 'QH', 'TD', '3H', '7C', '7D', 'JC']], [[['2S', '5S', '4D', '6C', 'KS'], ['QD', 'QS', '5C', 'AD', '9H'], ['TH', 'JS', '8D', '3S', 'QH'], ['5H', '2H', 'TC', '4C', 'TD']], ['3H', '7C', '7D', 'JC']]]], [[[4, 0, [5], ['AD', 'QD', 'TD', '9D', '3H', '9C', '4H', 'AS', 'KH', 'KD', 'KC', '5C', 'QH', 'AH', '7D', '5H', '8H', 'JD', 'TH', '2S', '4S']], [[['5H', '8H', 'JD', 'TH', '2S'], ['AD', 'QD', 'TD', '9D', '3H'], ['9C', '4H', 'AS', 'KH', 'KD'], ['KC', '5C', 'QH', 'AH', '7D']], ['4S']]], [[4, 3, [2, 2, 1], ['2S', '5S', 'QD', 'QS', 'TH', 'JS', '5H', '2H', '4D', '6C', '5C', 'AD', '8D', '3S', 'TC', '4C', 'KS', '9H', 'QH', 'TD', '3H', '7C', '7D', 'JC']], [[['2S', '5S', '4D', '6C', 'KS'], ['QD', 'QS', '5C', 'AD', '9H'], ['TH', 'JS', '8D', '3S', 'QH'], ['5H', '2H', 'TC', '4C', 'TD']], ['3H', '7C', '7D', 'JC']]], [[3, 0, [1, 1, 1], ['3S', '7C', '4H', '7H', 'AS', '2S', '8C', '7D', '5S']], [[['4H', '2S', '5S'], ['3S', '7H', '8C'], ['7C', 'AS', '7D']], []]], [[4, 2, [3, 2], ['4C', 'JC', '4H', '7D', 'QS', '5S', '2H', 'JH', '2D', '4S', 'TC', '7S', 'AH', '2C', '5C', '4D', '7H', '6C', 'KC', 'TH']], [[['7D', 'QS', '5S', '5C', '4D'], ['2H', 'JH', '2D', '7H', '6C'], ['4S', 'TC', '7S', 'KC', 'TH'], ['4C', 'JC', '4H', 'AH', '2C']], []]], [[4, 2, [2, 3], ['5D', '9D', '7C', '8D', 'AS', 'AH', 'TD', '3C', '6H', '9H', '4H', '5H', '9C', 'KD', 'AC', 'QD', '6D', '5S', 'AD', 'QH', '6S']], [[['7C', '8D', '5H', '9C', 'KD'], ['AS', 'AH', 'AC', 'QD', '6D'], ['TD', '3C', '5S', 'AD', 'QH'], ['5D', '9D', '6H', '9H', '4H']], ['6S']]], [[5, 3, [2, 2, 1], ['AS', '6S', '9C', '6C', '5S', '6D', 'JS', '2H', '8S', '5D', '8H', '2D', 'TH', 'JD', '3D', '7D', '2C', 'QH', '8C', '3S', '8D', '9S', 'AC', 'KH', '7H', '4C']], [[['9C', '6C', 'TH', 'JD', '9S'], ['5S', '6D', '3D', '7D', 'AC'], ['JS', '2H', '2C', 'QH', 'KH'], ['8S', '5D', '8C', '3S', '7H'], ['AS', '6S', '8H', '2D', '8D']], ['4C']]], [[4, 2, [5], ['QC', '8C', '6C', 'TD', '8H', 'JS', '5C', 'TH', '3H', '5D', '3S', 'JH', 'TS', 'AD', '7H', '6S', 'JD', '7D', '7S', '7C']], [[['JS', '5C', 'TH', '3H', '5D'], ['3S', 'JH', 'TS', 'AD', '7H'], ['6S', 'JD', '7D', '7S', '7C'], ['QC', '8C', '6C', 'TD', '8H']], []]], [[3, 2, [2, 3], ['2D', '7S', '2H', 'KH', '5S', '8S', '5C', 'AD', 'TC', '9C', '3D', '9D', '6C', 'KS', '4H']], [[['2D', '7S', '5C', 'AD', 'TC'], ['2H', 'KH', '9C', '3D', '9D'], ['5S', '8S', '6C', 'KS', '4H']], []]]], [[[4, 1, [1, 1, 1], ['AH', '3H', '7D', 'AS', 'TD', '4C', 'TH', '4H', '5H', '6S', '3S', '4D']], [[['7D', 'TH', '3S'], ['AS', '4H', '4D'], ['AH', 'TD', '5H'], ['3H', '4C', '6S']], []]], [[5, 3, [2, 2, 1], ['AS', '6S', '9C', '6C', '5S', '6D', 'JS', '2H', '8S', '5D', '8H', '2D', 'TH', 'JD', '3D', '7D', '2C', 'QH', '8C', '3S', '8D', '9S', 'AC', 'KH', '7H', '4C']], [[['9C', '6C', 'TH', 'JD', '9S'], ['5S', '6D', '3D', '7D', 'AC'], ['JS', '2H', '2C', 'QH', 'KH'], ['8S', '5D', '8C', '3S', '7H'], ['AS', '6S', '8H', '2D', '8D']], ['4C']]], [[4, 3, [5], ['KD', '2H', '3H', 'JC', 'QC', 'TC', 'AS', 'JS', '4D', 'KC', '2S', 'QH', 'AC', '4S', '8S', 'TH', '3C', 'JD', 'TS', '5H']], [[['KD', '2H', '3H', 'JC', 'QC'], ['TC', 'AS', 'JS', '4D', 'KC'], ['2S', 'QH', 'AC', '4S', '8S'], ['TH', '3C', 'JD', 'TS', '5H']], []]], [[5, 4, [3, 2], ['4S', 'QD', 'JH', '8S', '8C', '2C', 'TD', 'AS', '5H', '9C', '7S', '9H', 'JC', 'QS', 'KD', '8D', '3H', '2D', 'TH', '6S', '4D', '2H', '7H', '7C', '9S', 'AC']], [[['4S', 'QD', 'JH', '8D', '3H'], ['8S', '8C', '2C', '2D', 'TH'], ['TD', 'AS', '5H', '6S', '4D'], ['9C', '7S', '9H', '2H', '7H'], ['JC', 'QS', 'KD', '7C', '9S']], ['AC']]], [[3, 1, [2, 2, 1], ['QS', '3C', '2H', 'QC', '2C', 'AH', 'AD', '6C', '7H', '6H', 'KS', '9H', 'TD', '4H', 'AS', '8H']], [[['2H', 'QC', '7H', '6H', '4H'], ['2C', 'AH', 'KS', '9H', 'AS'], ['QS', '3C', 'AD', '6C', 'TD']], ['8H']]], [[2, 1, [1], ['TH', 'JC']], [[['TH'], ['JC']], []]], [[2, 0, [3, 2], ['QD', 'TH', '7S', '5C', 'TC', '2D', '2H', 'TS', 'JD', '9S', 'QS']], [[['5C', 'TC', '2D', 'JD', '9S'], ['QD', 'TH', '7S', '2H', 'TS']], ['QS']]], [[5, 2, [2, 3], ['TS', '8C', 'QD', '3C', '6H', 'QS', '4C', 'QC', '2C', '7S', '2D', 'TD', '6C', '5H', '8D', 'KH', '5S', '4S', '9D', '9H', '5C', '7D', '2H', '3S', '6S']], [[['6H', 'QS', '5S', '4S', '9D'], ['4C', 'QC', '9H', '5C', '7D'], ['2C', '7S', '2H', '3S', '6S'], ['TS', '8C', '2D', 'TD', '6C'], ['QD', '3C', '5H', '8D', 'KH']], []]]], [[[2, 1, [1], ['QC', '6S', 'AH']], [[['QC'], ['6S']], ['AH']]], [[3, 1, [2, 2, 1], ['QS', '3C', '2H', 'QC', '2C', 'AH', 'AD', '6C', '7H', '6H', 'KS', '9H', 'TD', '4H', 'AS', '8H']], [[['2H', 'QC', '7H', '6H', '4H'], ['2C', 'AH', 'KS', '9H', 'AS'], ['QS', '3C', 'AD', '6C', 'TD']], ['8H']]], [[5, 2, [1, 1, 1], ['8C', '5C', '3C', '6C', 'KH', '2S', '2D', 'KS', '3H', '9D', 'AD', 'JC', 'AC', 'QC', '8S', 'TS']], [[['3C', 'KS', 'AC'], ['6C', '3H', 'QC'], ['KH', '9D', '8S'], ['8C', '2S', 'AD'], ['5C', '2D', 'JC']], ['TS']]], [[2, 0, [5], ['2D', '7H', '4C', '7D', '5C', 'TC', '3D', 'QD', '4S', 'KS', 'JD']], [[['TC', '3D', 'QD', '4S', 'KS'], ['2D', '7H', '4C', '7D', '5C']], ['JD']]], [[3, 2, [3, 2], ['2D', '8C', 'JS', '6H', '8H', '4S', '9C', '5H', 'QH', '7C', '4H', 'QC', '3H', '6S', 'AD', '4C']], [[['2D', '8C', 'JS', '7C', '4H'], ['6H', '8H', '4S', 'QC', '3H'], ['9C', '5H', 'QH', '6S', 'AD']], ['4C']]], [[4, 2, [2, 3], ['8S', 'QS', 'JS', '2C', '5S', '3S', '6S', 'KS', '9D', 'TD', 'TH', '6D', '9H', '8D', 'JH', 'JC', '8C', '9S', '4C', '9C', 'TS', '7C', 'TC', 'KH']], [[['JS', '2C', '6D', '9H', '8D'], ['5S', '3S', 'JH', 'JC', '8C'], ['6S', 'KS', '9S', '4C', '9C'], ['8S', 'QS', '9D', 'TD', 'TH']], ['TS', '7C', 'TC', 'KH']]], [[2, 0, [3, 2], ['JC', '4C', 'KH', '7C', '6S', 'KS', 'TC', '2D', '9D', '5S', '4H', '2C', '4D', '5D']], [[['7C', '6S', 'KS', '9D', '5S'], ['JC', '4C', 'KH', 'TC', '2D']], ['4H', '2C', '4D', '5D']]], [[4, 2, [3, 2], ['2H', '7H', '5C', 'QD', 'JC', '9D', 'AH', 'KD', '2S', '4C', '4H', '6C', '8H', 'JH', 'QC', 'JD', '8S', '8C', '2D', '5S']], [[['QD', 'JC', '9D', 'QC', 'JD'], ['AH', 'KD', '2S', '8S', '8C'], ['4C', '4H', '6C', '2D', '5S'], ['2H', '7H', '5C', '8H', 'JH']], []]]], [[[3, 1, [5], ['KH', 'QH', '7S', '2H', '4S', '5D', 'AC', '9S', '6H', 'AS', 'TH', '8C', 'TS', '4D', 'QC']], [[['5D', 'AC', '9S', '6H', 'AS'], ['TH', '8C', 'TS', '4D', 'QC'], ['KH', 'QH', '7S', '2H', '4S']], []]], [[4, 2, [2, 3], ['8S', 'QS', 'JS', '2C', '5S', '3S', '6S', 'KS', '9D', 'TD', 'TH', '6D', '9H', '8D', 'JH', 'JC', '8C', '9S', '4C', '9C', 'TS', '7C', 'TC', 'KH']], [[['JS', '2C', '6D', '9H', '8D'], ['5S', '3S', 'JH', 'JC', '8C'], ['6S', 'KS', '9S', '4C', '9C'], ['8S', 'QS', '9D', 'TD', 'TH']], ['TS', '7C', 'TC', 'KH']]], [[5, 0, [1], ['JH', 'QC', 'TC', 'AD', '4S', '7H', '4D', '3C', '3D']], [[['4S'], ['JH'], ['QC'], ['TC'], ['AD']], ['7H', '4D', '3C', '3D']]], [[2, 1, [1], ['6S', '9H', 'AD', '3H', '3D', '4C']], [[['6S'], ['9H']], ['AD', '3H', '3D', '4C']]], [[2, 1, [5], ['7D', '8C', '5H', 'TD', '4H', 'AD', 'JS', 'QC', 'QH', '8D', '7C', '5S', '5C']], [[['7D', '8C', '5H', 'TD', '4H'], ['AD', 'JS', 'QC', 'QH', '8D']], ['7C', '5S', '5C']]], [[2, 1, [3, 2], ['TD', 'JD', '7D', '5S', '9H', 'QH', '8D', 'JH', '9D', 'QS', 'AS', '2D', 'TS', '2H']], [[['TD', 'JD', '7D', '8D', 'JH'], ['5S', '9H', 'QH', '9D', 'QS']], ['AS', '2D', 'TS', '2H']]], [[4, 0, [1, 1, 1], ['8H', '4C', 'TS', 'JD', '2H', '2S', '3C', '7S', '6D', 'KD', '3S', '8D']], [[['JD', '7S', '8D'], ['8H', '2H', '6D'], ['4C', '2S', 'KD'], ['TS', '3C', '3S']], []]], [[5, 2, [1, 1, 1], ['KS', '2H', '3C', 'KD', '5C', 'AC', 'JS', '8S', 'AD', 'TC', '3S', '4S', 'QH', '9H', '7H']], [[['3C', '8S', 'QH'], ['KD', 'AD', '9H'], ['5C', 'TC', '7H'], ['KS', 'AC', '3S'], ['2H', 'JS', '4S']], []]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("deal case %d" % i, solve(args), 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 |
|---|---|---|---|
| deal case 0 | [[['5S'], ['7H'], ['5C']], ['9C', 'QS', 'AS']] | [[['5S'], ['7H'], ['5C']], ['9C', 'QS', 'AS']] | Passed |
| deal case 1 | [[['7D', 'TH', '3S'], ['AS', '4H', '4D'], ['AH', 'TD', '5H'], ['3H', '4C', '6S']], []] | [[['7D', 'TH', '3S'], ['AS', '4H', '4D'], ['AH', 'TD', '5H'], ['3H', '4C', '6S']], []] | Passed |
| deal case 2 | [[['QC'], ['6S']], ['AH']] | [[['QC'], ['6S']], ['AH']] | Passed |
| deal case 3 | [[['9H', 'AH', '7S', '5D', '7C'], ['4D', 'KD', '3H', 'TD', 'QS']], []] | [[['9H', 'AH', '7S', '5D', '7C'], ['4D', 'KD', '3H', 'TD', 'QS']], []] | Passed |
| deal case 4 | [[['TS', 'AH', 'JS'], ['QH', '3H', '2S'], ['9H', '5S', '8H'], ['AS', 'QD', '7C'], ['2H', '5H', '3S']], ['6H']] | [[['TS', 'AH', 'JS'], ['QH', '3H', '2S'], ['9H', '5S', '8H'], ['AS', 'QD', '7C'], ['2H', '5H', '3S']], ['6H']] | Passed |
| deal case 5 | [[['5D', 'AC', '9S', '6H', 'AS'], ['TH', '8C', 'TS', '4D', 'QC'], ['KH', 'QH', '7S', '2H', '4S']], []] | [[['5D', 'AC', '9S', '6H', 'AS'], ['TH', '8C', 'TS', '4D', 'QC'], ['KH', 'QH', '7S', '2H', '4S']], []] | Passed |
| deal case 6 | [[['5C', '9D', 'JD'], ['JC', '2C', '7D'], ['6H', 'TH', 'TS']], ['KC', 'AD', '9H', '6D']] | [[['5C', '9D', 'JD'], ['JC', '2C', '7D'], ['6H', 'TH', 'TS']], ['KC', 'AD', '9H', '6D']] | Passed |
| deal case 7 | [[['2S', '5S', '4D', '6C', 'KS'], ['QD', 'QS', '5C', 'AD', '9H'], ['TH', 'JS', '8D', '3S', 'QH'], ['5H', '2H', 'TC', '4C', 'TD']], ['3H', '7C', '7D', 'JC']] | [[['2S', '5S', '4D', '6C', 'KS'], ['QD', 'QS', '5C', 'AD', '9H'], ['TH', 'JS', '8D', '3S', 'QH'], ['5H', '2H', 'TC', '4C', 'TD']], ['3H', '7C', '7D', 'JC']] | Passed |
SHA-256 / 65ade439c52121329666e424b44fb616bc9f2465a7cddcbf264192fe678173ae
Verification & scope
A bounded toy rule contract stated explicitly in the contract field; cards are two-character codes (rank, suit). Not a complete implementation of any published rulebook or casino table rules. 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:23.973530+00:00.
Case digest / 27417f98c032cf9318a6fdf40d8ea09684c5616e78069c6e10f64c3fb998047e