FAILURE MAP
← Case archive

FA-83706 / Card game rule engines / Open access

Each player receives the whole pattern before the next player is served · case 01

In a 3-2 deal the first player gets five consecutive cards.

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

ROOT CAUSE

The seat loop is outside the batch loop.

VERIFIED REPAIR

Deal each batch size to every player before the next batch size.

Unsuccessful approach: Reversing the batch order still deals 2-3 instead of 3-2.

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 k in range(1, n + 1):
        for batch in pattern:
            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 = [[[[5, 4, [2, 3], ['6S', '5S', 'AC', 'KS', '3C', '7S', 'TH', 'QC', '4C', '5C', '4D', 'QD', 'AD', '7C', 'JS', 'TS', 'JC', '9C', '5H', '6C', 'AH', '2S', 'QH', 'TC', 'KC', '8S', 'JD', '9S']], [[['6S', '5S', '4D', 'QD', 'AD'], ['AC', 'KS', '7C', 'JS', 'TS'], ['3C', '7S', 'JC', '9C', '5H'], ['TH', 'QC', '6C', 'AH', '2S'], ['4C', '5C', 'QH', 'TC', 'KC']], ['8S', 'JD', '9S']]], [[2, 1, [2, 3], ['AC', 'KC', '2D', 'JS', '6S', '8H', '6H', '3H', '5H', '6D', '4D', '7C', '4S']], [[['AC', 'KC', '6S', '8H', '6H'], ['2D', 'JS', '3H', '5H', '6D']], ['4D', '7C', '4S']]], [[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']]], [[5, 2, [3, 2], ['AS', '9S', '7S', 'QS', '6S', '8C', '6C', '4S', '5S', '8S', 'AC', '7H', 'TC', 'TD', 'KC', '7C', '5H', '2D', '3S', '4H', '8H', 'JD', '9D', '5C', 'KS']], [[['6C', '4S', '5S', '4H', '8H'], ['8S', 'AC', '7H', 'JD', '9D'], ['TC', 'TD', 'KC', '5C', 'KS'], ['AS', '9S', '7S', '7C', '5H'], ['QS', '6S', '8C', '2D', '3S']], []]]], [[[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, 2, [3, 2], ['AS', '9S', '7S', 'QS', '6S', '8C', '6C', '4S', '5S', '8S', 'AC', '7H', 'TC', 'TD', 'KC', '7C', '5H', '2D', '3S', '4H', '8H', 'JD', '9D', '5C', 'KS']], [[['6C', '4S', '5S', '4H', '8H'], ['8S', 'AC', '7H', 'JD', '9D'], ['TC', 'TD', 'KC', '5C', 'KS'], ['AS', '9S', '7S', '7C', '5H'], ['QS', '6S', '8C', '2D', '3S']], []]], [[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']], []]], [[2, 1, [2, 3], ['6H', '5D', 'KS', '8D', 'AS', '5H', '3S', '3C', 'KC', '7S']], [[['6H', '5D', 'AS', '5H', '3S'], ['KS', '8D', '3C', 'KC', '7S']], []]]], [[[2, 1, [3, 2], ['9H', 'AH', '7S', '4D', 'KD', '3H', '5D', '7C', 'TD', 'QS']], [[['9H', 'AH', '7S', '5D', '7C'], ['4D', 'KD', '3H', 'TD', 'QS']], []]], [[2, 1, [2, 3], ['6H', '5D', 'KS', '8D', 'AS', '5H', '3S', '3C', 'KC', '7S']], [[['6H', '5D', 'AS', '5H', '3S'], ['KS', '8D', '3C', 'KC', '7S']], []]], [[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']]], [[4, 1, [2, 3], ['4C', 'JC', '8S', '9S', 'TH', '5H', '7C', '5C', 'QH', '7H', 'JD', '9D', 'AH', '7D', '9C', 'KS', '8C', 'TD', 'AD', '4H', 'QS', '2S', 'AC', '3H']], [[['TH', '5H', '9C', 'KS', '8C'], ['7C', '5C', 'TD', 'AD', '4H'], ['4C', 'JC', 'QH', '7H', 'JD'], ['8S', '9S', '9D', 'AH', '7D']], ['QS', '2S', 'AC', '3H']]]], [[[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, 1, [2, 3], ['4C', 'JC', '8S', '9S', 'TH', '5H', '7C', '5C', 'QH', '7H', 'JD', '9D', 'AH', '7D', '9C', 'KS', '8C', 'TD', 'AD', '4H', 'QS', '2S', 'AC', '3H']], [[['TH', '5H', '9C', 'KS', '8C'], ['7C', '5C', 'TD', 'AD', '4H'], ['4C', 'JC', 'QH', '7H', 'JD'], ['8S', '9S', '9D', 'AH', '7D']], ['QS', '2S', 'AC', '3H']]], [[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']]], [[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, 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, 0, [1, 1, 1], ['5H', 'TH', '6C', '6H', '8C', '8D', 'AS', '6S', '7H', '3C', '2D', 'QD']], [[['6H', '6S', 'QD'], ['5H', '8C', '7H'], ['TH', '8D', '3C'], ['6C', 'AS', '2D']], []]], [[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']], []]], [[4, 3, [2, 3], ['3D', 'TH', '7H', '9H', '8H', '5S', 'QS', '6S', '4C', 'JC', 'TC', 'KD', 'AS', '6D', '2H', '7S', 'JD', '3H', '2D', 'TS', 'QH', '5H', '2C']], [[['3D', 'TH', '4C', 'JC', 'TC'], ['7H', '9H', 'KD', 'AS', '6D'], ['8H', '5S', '2H', '7S', 'JD'], ['QS', '6S', '3H', '2D', 'TS']], ['QH', '5H', '2C']]]]]
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 fixtureActualExpectedOutcome
deal case 0[[['6S', '5S', 'AC', 'KS', '3C'], ['7S', 'TH', 'QC', '4C', '5C'], ['4D', 'QD', 'AD', '7C', 'JS'], ['TS', 'JC', '9C', '5H', '6C'], ['AH', '2S', 'QH', 'TC', 'KC']], ['8S', 'JD', '9S']][[['6S', '5S', '4D', 'QD', 'AD'], ['AC', 'KS', '7C', 'JS', 'TS'], ['3C', '7S', 'JC', '9C', '5H'], ['TH', 'QC', '6C', 'AH', '2S'], ['4C', '5C', 'QH', 'TC', 'KC']], ['8S', 'JD', '9S']]Failed
deal case 1[[['AC', 'KC', '2D', 'JS', '6S'], ['8H', '6H', '3H', '5H', '6D']], ['4D', '7C', '4S']][[['AC', 'KC', '6S', '8H', '6H'], ['2D', 'JS', '3H', '5H', '6D']], ['4D', '7C', '4S']]Failed
deal case 2[[['QC'], ['6S']], ['AH']][[['QC'], ['6S']], ['AH']]Passed
deal case 3[[['9H', 'AH', '7S', '4D', 'KD'], ['3H', '5D', '7C', 'TD', 'QS']], []][[['9H', 'AH', '7S', '5D', '7C'], ['4D', 'KD', '3H', 'TD', 'QS']], []]Failed
deal case 4[[['3H', '8H', '7C'], ['3S', 'JS', '2S'], ['9H', 'AS', '2H'], ['TS', 'QH', '5S'], ['QD', '5H', 'AH']], ['6H']][[['TS', 'AH', 'JS'], ['QH', '3H', '2S'], ['9H', '5S', '8H'], ['AS', 'QD', '7C'], ['2H', '5H', '3S']], ['6H']]Failed
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', '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']]Failed
deal case 7[[['AC', '7H', 'TC', 'TD', 'KC'], ['7C', '5H', '2D', '3S', '4H'], ['8H', 'JD', '9D', '5C', 'KS'], ['AS', '9S', '7S', 'QS', '6S'], ['8C', '6C', '4S', '5S', '8S']], []][[['6C', '4S', '5S', '4H', '8H'], ['8S', 'AC', '7H', 'JD', '9D'], ['TC', 'TD', 'KC', '5C', 'KS'], ['AS', '9S', '7S', '7C', '5H'], ['QS', '6S', '8C', '2D', '3S']], []]Failed

SHA-256 / ebda2551bc8438678a7c9310bc516a63e70810c0467dec3b327a1d81e9005f3b

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 reversed(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 = [[[[5, 4, [2, 3], ['6S', '5S', 'AC', 'KS', '3C', '7S', 'TH', 'QC', '4C', '5C', '4D', 'QD', 'AD', '7C', 'JS', 'TS', 'JC', '9C', '5H', '6C', 'AH', '2S', 'QH', 'TC', 'KC', '8S', 'JD', '9S']], [[['6S', '5S', '4D', 'QD', 'AD'], ['AC', 'KS', '7C', 'JS', 'TS'], ['3C', '7S', 'JC', '9C', '5H'], ['TH', 'QC', '6C', 'AH', '2S'], ['4C', '5C', 'QH', 'TC', 'KC']], ['8S', 'JD', '9S']]], [[2, 1, [2, 3], ['AC', 'KC', '2D', 'JS', '6S', '8H', '6H', '3H', '5H', '6D', '4D', '7C', '4S']], [[['AC', 'KC', '6S', '8H', '6H'], ['2D', 'JS', '3H', '5H', '6D']], ['4D', '7C', '4S']]], [[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']]], [[5, 2, [3, 2], ['AS', '9S', '7S', 'QS', '6S', '8C', '6C', '4S', '5S', '8S', 'AC', '7H', 'TC', 'TD', 'KC', '7C', '5H', '2D', '3S', '4H', '8H', 'JD', '9D', '5C', 'KS']], [[['6C', '4S', '5S', '4H', '8H'], ['8S', 'AC', '7H', 'JD', '9D'], ['TC', 'TD', 'KC', '5C', 'KS'], ['AS', '9S', '7S', '7C', '5H'], ['QS', '6S', '8C', '2D', '3S']], []]]], [[[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, 2, [3, 2], ['AS', '9S', '7S', 'QS', '6S', '8C', '6C', '4S', '5S', '8S', 'AC', '7H', 'TC', 'TD', 'KC', '7C', '5H', '2D', '3S', '4H', '8H', 'JD', '9D', '5C', 'KS']], [[['6C', '4S', '5S', '4H', '8H'], ['8S', 'AC', '7H', 'JD', '9D'], ['TC', 'TD', 'KC', '5C', 'KS'], ['AS', '9S', '7S', '7C', '5H'], ['QS', '6S', '8C', '2D', '3S']], []]], [[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']], []]], [[2, 1, [2, 3], ['6H', '5D', 'KS', '8D', 'AS', '5H', '3S', '3C', 'KC', '7S']], [[['6H', '5D', 'AS', '5H', '3S'], ['KS', '8D', '3C', 'KC', '7S']], []]]], [[[2, 1, [3, 2], ['9H', 'AH', '7S', '4D', 'KD', '3H', '5D', '7C', 'TD', 'QS']], [[['9H', 'AH', '7S', '5D', '7C'], ['4D', 'KD', '3H', 'TD', 'QS']], []]], [[2, 1, [2, 3], ['6H', '5D', 'KS', '8D', 'AS', '5H', '3S', '3C', 'KC', '7S']], [[['6H', '5D', 'AS', '5H', '3S'], ['KS', '8D', '3C', 'KC', '7S']], []]], [[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']]], [[4, 1, [2, 3], ['4C', 'JC', '8S', '9S', 'TH', '5H', '7C', '5C', 'QH', '7H', 'JD', '9D', 'AH', '7D', '9C', 'KS', '8C', 'TD', 'AD', '4H', 'QS', '2S', 'AC', '3H']], [[['TH', '5H', '9C', 'KS', '8C'], ['7C', '5C', 'TD', 'AD', '4H'], ['4C', 'JC', 'QH', '7H', 'JD'], ['8S', '9S', '9D', 'AH', '7D']], ['QS', '2S', 'AC', '3H']]]], [[[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, 1, [2, 3], ['4C', 'JC', '8S', '9S', 'TH', '5H', '7C', '5C', 'QH', '7H', 'JD', '9D', 'AH', '7D', '9C', 'KS', '8C', 'TD', 'AD', '4H', 'QS', '2S', 'AC', '3H']], [[['TH', '5H', '9C', 'KS', '8C'], ['7C', '5C', 'TD', 'AD', '4H'], ['4C', 'JC', 'QH', '7H', 'JD'], ['8S', '9S', '9D', 'AH', '7D']], ['QS', '2S', 'AC', '3H']]], [[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']]], [[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, 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, 0, [1, 1, 1], ['5H', 'TH', '6C', '6H', '8C', '8D', 'AS', '6S', '7H', '3C', '2D', 'QD']], [[['6H', '6S', 'QD'], ['5H', '8C', '7H'], ['TH', '8D', '3C'], ['6C', 'AS', '2D']], []]], [[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']], []]], [[4, 3, [2, 3], ['3D', 'TH', '7H', '9H', '8H', '5S', 'QS', '6S', '4C', 'JC', 'TC', 'KD', 'AS', '6D', '2H', '7S', 'JD', '3H', '2D', 'TS', 'QH', '5H', '2C']], [[['3D', 'TH', '4C', 'JC', 'TC'], ['7H', '9H', 'KD', 'AS', '6D'], ['8H', '5S', '2H', '7S', 'JD'], ['QS', '6S', '3H', '2D', 'TS']], ['QH', '5H', '2C']]]]]
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 fixtureActualExpectedOutcome
deal case 0[[['6S', '5S', 'AC', 'TS', 'JC'], ['KS', '3C', '7S', '9C', '5H'], ['TH', 'QC', '4C', '6C', 'AH'], ['5C', '4D', 'QD', '2S', 'QH'], ['AD', '7C', 'JS', 'TC', 'KC']], ['8S', 'JD', '9S']][[['6S', '5S', '4D', 'QD', 'AD'], ['AC', 'KS', '7C', 'JS', 'TS'], ['3C', '7S', 'JC', '9C', '5H'], ['TH', 'QC', '6C', 'AH', '2S'], ['4C', '5C', 'QH', 'TC', 'KC']], ['8S', 'JD', '9S']]Failed
deal case 1[[['AC', 'KC', '2D', '6H', '3H'], ['JS', '6S', '8H', '5H', '6D']], ['4D', '7C', '4S']][[['AC', 'KC', '6S', '8H', '6H'], ['2D', 'JS', '3H', '5H', '6D']], ['4D', '7C', '4S']]Failed
deal case 2[[['QC'], ['6S']], ['AH']][[['QC'], ['6S']], ['AH']]Passed
deal case 3[[['9H', 'AH', 'KD', '3H', '5D'], ['7S', '4D', '7C', 'TD', 'QS']], []][[['9H', 'AH', '7S', '5D', '7C'], ['4D', 'KD', '3H', 'TD', 'QS']], []]Failed
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[[['6S', '8C', '5H', '2D', '3S'], ['6C', '4S', '4H', '8H', 'JD'], ['5S', '8S', '9D', '5C', 'KS'], ['AS', '9S', 'AC', '7H', 'TC'], ['7S', 'QS', 'TD', 'KC', '7C']], []][[['6C', '4S', '5S', '4H', '8H'], ['8S', 'AC', '7H', 'JD', '9D'], ['TC', 'TD', 'KC', '5C', 'KS'], ['AS', '9S', '7S', '7C', '5H'], ['QS', '6S', '8C', '2D', '3S']], []]Failed

SHA-256 / 70c5829778a63be2bc4c9bcd2c7960b0fd1e554c7b3ba0f51beccf03d4ebc5ee

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 = [[[[5, 4, [2, 3], ['6S', '5S', 'AC', 'KS', '3C', '7S', 'TH', 'QC', '4C', '5C', '4D', 'QD', 'AD', '7C', 'JS', 'TS', 'JC', '9C', '5H', '6C', 'AH', '2S', 'QH', 'TC', 'KC', '8S', 'JD', '9S']], [[['6S', '5S', '4D', 'QD', 'AD'], ['AC', 'KS', '7C', 'JS', 'TS'], ['3C', '7S', 'JC', '9C', '5H'], ['TH', 'QC', '6C', 'AH', '2S'], ['4C', '5C', 'QH', 'TC', 'KC']], ['8S', 'JD', '9S']]], [[2, 1, [2, 3], ['AC', 'KC', '2D', 'JS', '6S', '8H', '6H', '3H', '5H', '6D', '4D', '7C', '4S']], [[['AC', 'KC', '6S', '8H', '6H'], ['2D', 'JS', '3H', '5H', '6D']], ['4D', '7C', '4S']]], [[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']]], [[5, 2, [3, 2], ['AS', '9S', '7S', 'QS', '6S', '8C', '6C', '4S', '5S', '8S', 'AC', '7H', 'TC', 'TD', 'KC', '7C', '5H', '2D', '3S', '4H', '8H', 'JD', '9D', '5C', 'KS']], [[['6C', '4S', '5S', '4H', '8H'], ['8S', 'AC', '7H', 'JD', '9D'], ['TC', 'TD', 'KC', '5C', 'KS'], ['AS', '9S', '7S', '7C', '5H'], ['QS', '6S', '8C', '2D', '3S']], []]]], [[[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, 2, [3, 2], ['AS', '9S', '7S', 'QS', '6S', '8C', '6C', '4S', '5S', '8S', 'AC', '7H', 'TC', 'TD', 'KC', '7C', '5H', '2D', '3S', '4H', '8H', 'JD', '9D', '5C', 'KS']], [[['6C', '4S', '5S', '4H', '8H'], ['8S', 'AC', '7H', 'JD', '9D'], ['TC', 'TD', 'KC', '5C', 'KS'], ['AS', '9S', '7S', '7C', '5H'], ['QS', '6S', '8C', '2D', '3S']], []]], [[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']], []]], [[2, 1, [2, 3], ['6H', '5D', 'KS', '8D', 'AS', '5H', '3S', '3C', 'KC', '7S']], [[['6H', '5D', 'AS', '5H', '3S'], ['KS', '8D', '3C', 'KC', '7S']], []]]], [[[2, 1, [3, 2], ['9H', 'AH', '7S', '4D', 'KD', '3H', '5D', '7C', 'TD', 'QS']], [[['9H', 'AH', '7S', '5D', '7C'], ['4D', 'KD', '3H', 'TD', 'QS']], []]], [[2, 1, [2, 3], ['6H', '5D', 'KS', '8D', 'AS', '5H', '3S', '3C', 'KC', '7S']], [[['6H', '5D', 'AS', '5H', '3S'], ['KS', '8D', '3C', 'KC', '7S']], []]], [[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']]], [[4, 1, [2, 3], ['4C', 'JC', '8S', '9S', 'TH', '5H', '7C', '5C', 'QH', '7H', 'JD', '9D', 'AH', '7D', '9C', 'KS', '8C', 'TD', 'AD', '4H', 'QS', '2S', 'AC', '3H']], [[['TH', '5H', '9C', 'KS', '8C'], ['7C', '5C', 'TD', 'AD', '4H'], ['4C', 'JC', 'QH', '7H', 'JD'], ['8S', '9S', '9D', 'AH', '7D']], ['QS', '2S', 'AC', '3H']]]], [[[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, 1, [2, 3], ['4C', 'JC', '8S', '9S', 'TH', '5H', '7C', '5C', 'QH', '7H', 'JD', '9D', 'AH', '7D', '9C', 'KS', '8C', 'TD', 'AD', '4H', 'QS', '2S', 'AC', '3H']], [[['TH', '5H', '9C', 'KS', '8C'], ['7C', '5C', 'TD', 'AD', '4H'], ['4C', 'JC', 'QH', '7H', 'JD'], ['8S', '9S', '9D', 'AH', '7D']], ['QS', '2S', 'AC', '3H']]], [[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']]], [[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, 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, 0, [1, 1, 1], ['5H', 'TH', '6C', '6H', '8C', '8D', 'AS', '6S', '7H', '3C', '2D', 'QD']], [[['6H', '6S', 'QD'], ['5H', '8C', '7H'], ['TH', '8D', '3C'], ['6C', 'AS', '2D']], []]], [[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']], []]], [[4, 3, [2, 3], ['3D', 'TH', '7H', '9H', '8H', '5S', 'QS', '6S', '4C', 'JC', 'TC', 'KD', 'AS', '6D', '2H', '7S', 'JD', '3H', '2D', 'TS', 'QH', '5H', '2C']], [[['3D', 'TH', '4C', 'JC', 'TC'], ['7H', '9H', 'KD', 'AS', '6D'], ['8H', '5S', '2H', '7S', 'JD'], ['QS', '6S', '3H', '2D', 'TS']], ['QH', '5H', '2C']]]]]
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 fixtureActualExpectedOutcome
deal case 0[[['6S', '5S', '4D', 'QD', 'AD'], ['AC', 'KS', '7C', 'JS', 'TS'], ['3C', '7S', 'JC', '9C', '5H'], ['TH', 'QC', '6C', 'AH', '2S'], ['4C', '5C', 'QH', 'TC', 'KC']], ['8S', 'JD', '9S']][[['6S', '5S', '4D', 'QD', 'AD'], ['AC', 'KS', '7C', 'JS', 'TS'], ['3C', '7S', 'JC', '9C', '5H'], ['TH', 'QC', '6C', 'AH', '2S'], ['4C', '5C', 'QH', 'TC', 'KC']], ['8S', 'JD', '9S']]Passed
deal case 1[[['AC', 'KC', '6S', '8H', '6H'], ['2D', 'JS', '3H', '5H', '6D']], ['4D', '7C', '4S']][[['AC', 'KC', '6S', '8H', '6H'], ['2D', 'JS', '3H', '5H', '6D']], ['4D', '7C', '4S']]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[[['6C', '4S', '5S', '4H', '8H'], ['8S', 'AC', '7H', 'JD', '9D'], ['TC', 'TD', 'KC', '5C', 'KS'], ['AS', '9S', '7S', '7C', '5H'], ['QS', '6S', '8C', '2D', '3S']], []][[['6C', '4S', '5S', '4H', '8H'], ['8S', 'AC', '7H', 'JD', '9D'], ['TC', 'TD', 'KC', '5C', 'KS'], ['AS', '9S', '7S', '7C', '5H'], ['QS', '6S', '8C', '2D', '3S']], []]Passed

SHA-256 / f5fcf21e320c3b57e63ff785b1678ff3771db96fede1d6f74a31d2c6718b7799

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:24.017185+00:00.

Case digest / c03f613c404dcb0dca806b360093c7662a082584baa5ef71e349d3c56ac7460e