FA-83436 / Card game rule engines / Open access
The jack of diamonds adds ten points · case 01
Winning JD is punished.
ROOT CAUSE
The bonus sign is inverted.
VERIFIED REPAIR
Subtract 10 from the JD taker.
Unsuccessful approach: Flooring the bonus at zero loses the negative score the rule allows.
Case contract
Input [cards_taken_by_each_player, jack_rule]. Each heart is 1, QS 13. A player taking all 26 penalty points shoots the moon: they score 0 and every other player 26. With jack_rule the taker of JD then scores -10. Return the list of round scores.
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):
taken, jd = x
pts = []
for cards in taken:
s = sum(1 for c in cards if c[1] == 'H')
if 'QS' in cards:
s += 13
pts.append(s)
moon = [i for i, cards in enumerate(taken) if pts[i] == 26]
if moon:
shooter = moon[0]
pts = [0 if i == shooter else 26 for i in range(len(taken))]
if jd:
for i, cards in enumerate(taken):
if 'JD' in cards:
pts[i] += 10
return pts
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[[['8C', '5H', 'AD', '8H', '3C', 'JS', '4D', '9D'], ['KC', '3D', 'AC', '2C', '3S', '7S', '4C', 'TC', 'KS'], ['4H', '2D', '9C', 'QC', '9H', 'JD', '2S', 'QH', '7D', 'AS', 'AH', '6C', 'KH', 'JH', '8D', 'QD', '3H'], ['TS', '7C', '6S', '4S', 'QS', 'TD', '5C', '7H', '8S', '5D', '9S', '5S', '2H', '6H', 'TH', 'JC', 'KD', '6D']], True], [2, 0, -3, 17]], [[[['9H', 'JD', '4D', '8C', '9C', '7C', '9S', '7H', '2S', '8D', 'AC', '3H', 'QC', '2H'], ['9D', 'AS', 'JS', '4S', '5S', 'TS', '3D', 'QH', '4H', '2D', '5C', '7D', '3S', '5H', 'JH'], ['KH', '5D', 'AH', 'KC', 'TC', 'QS', '8H', 'QD', '6H', '6C', 'AD'], ['7S', '3C', '2C', '6S', 'TD', '8S', '4C', 'KS', 'JC', 'KD', '6D', 'TH']], False], [4, 4, 17, 1]], [[[['8C', '6S', '2H', 'KS', 'QH', '7D', '8S', '5D', 'AD', '5H', '5S', 'KH', 'JH', '9S', '3D', '4H', '7H'], ['TS', '8D', '4D', '2C', 'TD', '2D', 'QC', 'KD', 'TC', '4C', '3H'], ['4S', 'TH', '6C', 'QS', '2S', 'AH', 'QD', '3S', 'JC'], ['AS', '8H', '5C', '9D', '6D', '9H', '6H', 'AC', '9C', 'JD', 'KC', '7S', 'JS', '7C', '3C']], False], [7, 1, 15, 3]], [[[['TD', '7S', '6S', 'AC', 'JS', '5C', '3S', '6C', '4D', '2D', 'JC', 'QD'], ['7D', '6H', '7C', 'KC', '3C', '8H', '3H', 'TH', '9H', 'KD', 'AS', '4H', '7H', '8S', 'AD', 'KH', '2H', '5H', 'AH', 'QS', 'QH', 'JH', '8C'], ['9S', '6D', 'TC', '5D', '2C', 'JD', '9D', '9C', '3D', '5S'], ['KS', '4S', '4C', 'QC', '2S', '8D', 'TS']], True], [26, 0, 16, 26]], [[[['QD', '8H', 'QS', 'TD', 'JH', '5H', '9H', 'KC', 'QH', '7H', '3H', '4H', '5S', '6H', 'TH', '7C', '3C', 'JD', 'AS', 'TC', '2H', '8S', 'AH', '6C', '5C', 'JC', 'KH'], ['4D', '9C', 'JS', '5D', '6D', '8C', '2C'], ['4C', 'AC', '3S', '2S', 'KD', '4S', 'AD', '9D', '7S', 'QC'], ['8D', '6S', 'KS', '3D', '9S', '7D', '2D', 'TS']], True], [-10, 26, 26, 26]], [[[['3H', '6D', '9D', '7D', '7H', '4C', '5D', '3D', '5S', '9C', 'AD', '6S', '8H', '6H', 'QC', '3S', 'QH', 'KH'], ['7C', '4H', '9S', '8S', '2D', 'TC', '3C', '6C'], ['QD', '2H', 'KD', '8D', 'KS', 'JD', '5H', 'TS', '4D', '4S', 'AC', 'JH', '7S', '2S', 'AH'], ['QS', '5C', '2C', '8C', 'KC', 'JS', 'JC', 'AS', 'TD', 'TH', '9H']], False], [6, 1, 4, 15]], [[[['KH', 'AD', '9C', '7D', '5S', 'KC', 'TC', '4H', '4D', 'AS', '6D'], ['9D', '6C', 'KD', 'QD', '4C', '8H', 'JD', '6S', 'JH', 'AC', '5C', '9H', 'TD'], ['2S', 'JC', 'KS', 'JS', '2H', '5D', '6H', '4S', 'AH', 'QS', '3C', '3S', '7S', '3D', 'QH'], ['2C', 'TH', '9S', '7H', '2D', '5H', '8D', '8C', '3H', '8S', '7C', 'TS', 'QC']], False], [2, 3, 17, 4]], [[[['JS', '8H', 'TH', '4C', '6S', '7S', 'AD', 'KC', 'JD', '4D', '7C', '7D', 'AC', 'TS', '7H'], ['TD', 'QS', '6C', 'KS', '2H', 'TC', 'AS', '2D', '9D', '3D', '5S', '4H', 'QC', 'KH', '8S', 'QH'], ['9S', '9H', '2S', '6D', '5H', '4S', '8C', '3S', '6H', '3H', '8D'], ['AH', '5D', '2C', 'JH', 'JC', '5C', 'KD', '9C', 'QD', '3C']], True], [-7, 17, 4, 2]]], [[[[['TD', '7S', '6S', 'AC', 'JS', '5C', '3S', '6C', '4D', '2D', 'JC', 'QD'], ['7D', '6H', '7C', 'KC', '3C', '8H', '3H', 'TH', '9H', 'KD', 'AS', '4H', '7H', '8S', 'AD', 'KH', '2H', '5H', 'AH', 'QS', 'QH', 'JH', '8C'], ['9S', '6D', 'TC', '5D', '2C', 'JD', '9D', '9C', '3D', '5S'], ['KS', '4S', '4C', 'QC', '2S', '8D', 'TS']], True], [26, 0, 16, 26]], [[[['2H', '4S', '9C', '3C', 'TS', '7H', 'QS', '5D', 'AS', '9H', 'TH', 'JS', '7C', 'TD', 'JH', 'KD', 'TC'], ['8H', 'QH', '4C', '7D', '2S', '8C', '7S', 'KC'], ['6C', '9D', 'QC', 'JD', '5C', 'AC', '6H', '6D', '3D', '4D', '2D', 'AH', '9S', 'KH'], ['AD', '8S', 'JC', '8D', '2C', '5H', '3S', '3H', '4H', 'KS', '6S', '5S', 'QD']], True], [18, 2, -7, 3]], [[[['5C', '4C', '5S', '7C', 'KD', '7S'], ['AC', '2S', '4D', '6D', '5D', '9S', 'QC'], ['8H', '4S', 'JH', 'QS', '3C', 'JC', '6H', '4H', '2H', 'AS', 'AH', 'KH', '9D', 'QH', '7H', '5H', 'KC', 'TD', '3H', 'TC', 'TH', '9H', '6C', '2C', 'KS'], ['8D', '8C', 'JS', 'QD', 'AD', '8S', '3S', '3D', '7D', 'TS', '6S', 'JD', '2D', '9C']], True], [26, 26, 0, 16]], [[[['AS', 'QH', '6H', 'AH', 'KH', '5H', 'KC', '7H', '7D', 'JH', 'TD', '3H', 'TC', '3D', 'KS', '2H', '5C', '8H', 'QS', 'AC', '9H', 'TH', '8C', '4H', 'JC'], ['9S', 'KD', '7C', 'JS', '2S', '9C', '2D', '3C'], ['3S', 'QC', '7S', '2C', '5D', '4S', '9D', '6C', '8S', '6D', '5S'], ['JD', '8D', '6S', 'QD', '4C', '4D', 'TS', 'AD']], False], [0, 26, 26, 26]], [[[['9H', 'KS', '4D', 'TH', 'TC', '3D', '7H', 'KC', 'QD', '9S', 'JH'], ['4S', 'AS', '2H', '9C', '8S', 'TS', '2C', '8D', 'JC', '5C', 'KD', '5H', '7S'], ['AH', '9D', '6S', '8H', '8C', 'TD', '3S', 'QC', 'KH', 'AD', 'JD', 'JS', 'QS', '6H', '7D'], ['AC', '2D', '4C', '3C', '7C', '3H', '6C', '5D', '5S', 'QH', '2S', '4H', '6D']], True], [4, 2, 7, 3]], [[[['4S', '4H', 'TS', '7C', '7D', '9H', 'TH', 'JS', '8S', 'QD', 'JC', 'AC'], ['3H', 'TD', '5H', '2S', '2D', '3S', '3C', '5C', '9D', '9C', '6D', 'AS', 'QC'], ['8C', 'JH', '5S', '7H', '6H', '9S', 'QS', 'QH', 'JD', 'AH', '4C', '8D', 'KS', '2C', 'AD', 'KH', '4D'], ['6S', '3D', '2H', '6C', 'KD', 'KC', '8H', '7S', 'TC', '5D']], True], [3, 2, 9, 2]], [[[['4D', '7H', '5S', '8D', 'KH', '9C', 'AS', 'AD', 'JC', '2S', '4H'], ['AC', '5C', '2C', 'JD', '5H', 'KS', 'KD', '3D', '8H', 'TH', '3C', 'QC', 'QH', '4C', '7S'], ['TC', '9S', 'TS', '6D', '9H', 'QD', '7C', '6S', '5D'], ['JS', '6C', '2H', '7D', 'QS', 'JH', '4S', '9D', '3S', '6H', '3H', '8S', '8C', '2D', 'KC', 'TD', 'AH']], True], [3, -6, 1, 18]], [[[['8C', 'AH', 'QC', '7D', '3C', '4H', '7H', 'AS', 'KC', '5D', 'TS', '8H', 'AD'], ['2S', '3H', '3D', '7C', 'QS', 'QH', '8S', '3S', '5S', 'QD', 'TC', 'KS', 'TH'], ['5H', 'JS', '2H', 'JC', 'JD', 'KD', '2C', '8D', '6H', 'JH', '9C', '4S', '4D'], ['5C', 'TD', '6S', '4C', '6D', '2D', '9D', 'KH', '9S', '9H', '6C', 'AC', '7S']], True], [4, 16, -6, 2]]], [[[[['5C', '4C', '5S', '7C', 'KD', '7S'], ['AC', '2S', '4D', '6D', '5D', '9S', 'QC'], ['8H', '4S', 'JH', 'QS', '3C', 'JC', '6H', '4H', '2H', 'AS', 'AH', 'KH', '9D', 'QH', '7H', '5H', 'KC', 'TD', '3H', 'TC', 'TH', '9H', '6C', '2C', 'KS'], ['8D', '8C', 'JS', 'QD', 'AD', '8S', '3S', '3D', '7D', 'TS', '6S', 'JD', '2D', '9C']], True], [26, 26, 0, 16]], [[[['8S', 'QH', '4H', '5D', 'QS', '5S', 'AH', 'TD', '5H', 'TH', '6S', '7S', '9H'], ['9C', '2S', 'QD', 'JH', '7D', '8C', '7C', '4C', 'QC', '3D', 'AS', 'KC', 'JC'], ['6H', '4D', 'KD', 'JD', '3S', 'AD', '2D', '6D', '9D'], ['TS', '3C', '9S', '8D', '4S', '2H', 'JS', '2C', '6C', '3H', 'KS', '5C', 'TC', 'AC', '7H', 'KH', '8H']], False], [19, 1, 1, 5]], [[[['JS', '8H', 'TH', '4C', '6S', '7S', 'AD', 'KC', 'JD', '4D', '7C', '7D', 'AC', 'TS', '7H'], ['TD', 'QS', '6C', 'KS', '2H', 'TC', 'AS', '2D', '9D', '3D', '5S', '4H', 'QC', 'KH', '8S', 'QH'], ['9S', '9H', '2S', '6D', '5H', '4S', '8C', '3S', '6H', '3H', '8D'], ['AH', '5D', '2C', 'JH', 'JC', '5C', 'KD', '9C', 'QD', '3C']], True], [-7, 17, 4, 2]], [[[['9H', 'JD', '8H', 'QH', 'JH', '9D', 'QS', '5H', '6H', '3H', 'AH', '5D', '2H', 'JC', 'AC', '4H', '6D', 'TH', 'KH', '2C', '7H', '4D', 'QD'], ['7D', 'JS', '9S', '6S', 'TC', '5C', '8C'], ['7S', '2D', '5S', 'QC', 'KC', '8S', '4S', 'TS', '3S', '3C', '9C', '4C', '7C'], ['KD', '6C', '2S', '3D', '8D', 'AD', 'AS', 'KS', 'TD']], True], [-10, 26, 26, 26]], [[[['3D', '6D', '5S', '2D', 'KD', '4D', 'TS', 'QS', '9S'], ['3S', '9C', '3C', 'TD', 'QH', '2S', '8H', '7S', 'TH', '7H', 'KC', '6S', 'TC', 'JD', '9H', 'AH', '5D', 'JS', '5C'], ['AS', 'KS', 'QD', 'KH', '4H', 'JH', '4C', '7D', '6H', '5H', '8C'], ['2H', '9D', 'AD', '2C', 'QC', '6C', 'AC', 'JC', '8D', '8S', '7C', '4S', '3H']], False], [13, 6, 5, 2]], [[[['TH', '2H', '2D', '8H', '9D', 'KC', 'AD'], ['TD', 'QS', 'AS', '8S', '3C', 'QD', '4C', '4S', 'JD', 'TS', '2S', '7S', '6C', '3S', '8C', 'QC', '4H'], ['7C', 'AH', '2C', 'KD', '4D', 'AC', '5H', '6H', '6D', 'TC', '7H', 'JS', 'QH', '9C', '5D', '9H', '3H'], ['8D', '9S', '7D', '5S', 'JC', 'JH', '5C', 'KS', 'KH', '6S', '3D']], False], [3, 14, 7, 2]], [[[['7D', 'QH', 'AC', 'JC', '5H', '4C', '9S'], ['AH', 'JS', 'TC', '5D', 'TH', '9H', '8D', 'KC', '7S', '3S', '2S', '5S', '7C', 'TS', 'KD', '8C', '7H', 'AD', 'KH', '3H', '6C', '2D'], ['QD', '5C', '8S', 'QC', 'QS', '2C', '4S', 'TD', 'KS', '2H', '6D'], ['3C', 'AS', '4H', 'JD', '6S', '9D', '9C', '6H', '3D', 'JH', '4D', '8H']], False], [2, 6, 14, 4]], [[[['AH', '4H', 'QH', '2C', 'TS', 'QC', '9S', 'QS', '3D', '9H', 'KC', '5D', '3C', '6H', 'JH', '2H', '9C', '5S', 'JS'], ['TH', '7D', '6D', '3H', '6S', '7C', 'KS', '8C', '4C', '8S', '8H', 'AC', 'TD', '5H', 'KD', '9D', '2S', 'AS'], ['QD', '3S', '7S', 'JC', '8D', 'AD', 'JD'], ['TC', '7H', 'KH', '4D', '4S', '6C', '2D', '5C']], True], [20, 4, -10, 2]]], [[[[['4D', '7H', '5S', '8D', 'KH', '9C', 'AS', 'AD', 'JC', '2S', '4H'], ['AC', '5C', '2C', 'JD', '5H', 'KS', 'KD', '3D', '8H', 'TH', '3C', 'QC', 'QH', '4C', '7S'], ['TC', '9S', 'TS', '6D', '9H', 'QD', '7C', '6S', '5D'], ['JS', '6C', '2H', '7D', 'QS', 'JH', '4S', '9D', '3S', '6H', '3H', '8S', '8C', '2D', 'KC', 'TD', 'AH']], True], [3, -6, 1, 18]], [[[['3S', 'TC', '4H', 'AD', 'AH', 'KD', '7S', '2D', '5H', '6H', 'JD', '6D', 'KS'], ['7H', 'JH', 'TD', '8C', 'QD', '2C', '4D', 'KC', '5D', '9D', '7C', 'QS', '5S', 'KH', '8D', 'AC'], ['3D', '2S', '3H', '9S', '8H', '7D', 'TH', '8S', '6S', 'JC'], ['2H', '3C', '5C', '9H', 'QH', '4S', 'JS', '4C', 'QC', '9C', '6C', 'TS', 'AS']], False], [4, 16, 3, 3]], [[[['6C', '5D', '2H', 'JD', '7H', '6S', '6D', '3H', '8H', 'QC', '5H', 'TD', '5C'], ['3C', '4H', 'JH', '7S', 'KS', 'JS', 'AH', '8C', '8S'], ['9S', '6H', 'KC', '3D', 'KH', 'TH', '8D', 'QS', '2D', 'AD', '9C', 'AC', '2C', 'TS', 'KD', '9H', '4C', '5S'], ['AS', '9D', '2S', 'QD', '7D', 'TC', '7C', '4D', '4S', 'QH', '3S', 'JC']], False], [5, 3, 17, 1]], [[[['QD', 'JD', 'JH', 'QH', 'TH', 'KC', '7H', '4C', '3D', '4H', 'KH', '7S', 'TD', 'TC', 'QS', '8H', '6D', '6H', '9C', '9H', '5H', 'AH', '2H', '3H'], ['8C', '2S', '5S', '7D', 'JC', '6S', 'KD', 'AD', '9S', '3C', '2C'], ['8D', '8S', '5C', '9D', '3S', '5D', '4D', 'AS', '4S'], ['JS', 'AC', 'QC', 'TS', '6C', 'KS', '7C', '2D']], True], [-10, 26, 26, 26]], [[[['8C', '2D', '4S', '6C', '9C', '3S', 'JD', '5D', 'JC', 'AC', '2C'], ['8D', 'JH', 'KH', '3D', '6H', 'AH', '8S', 'TH', '9H', '5C', '8H', 'QS', 'QH', 'TD', '2H', '3H', '5H', '6D', '4C', '4H', '7H', 'KS', '2S', '6S'], ['TC', 'QC', '7D', '5S', 'TS', 'AD', 'KD', '7S', 'KC', '9D', '4D'], ['9S', 'QD', 'AS', 'JS', '3C', '7C']], True], [16, 0, 26, 26]], [[[['QH', 'TD', 'JD', '7C', 'QS', '4H', '8C', 'JS', '5S', 'AS', '3H', '3D', '2C', '2S', '6C', '5H', '5D', '7H'], ['TH', 'TS', 'AH', '8H', '8S', '5C', 'TC'], ['4S', '3C', '3S', '2H', 'KH', '7D', '6S', '9C', '6H', '9S', '6D', 'KS', 'JC', '4C'], ['QD', 'QC', 'AD', 'KC', '4D', '8D', '7S', '2D', 'JH', '9D', '9H', 'AC', 'KD']], False], [18, 3, 3, 2]], [[[['4C', 'JS', '8H', '9S', '6D', 'QC', '5D', 'KD', '3H', '2D', '3D', 'QD', '4H', '6S'], ['4D', '9H', 'TS', '7D', '3S', 'AC', '2S'], ['AH', '8S', 'KH', 'TC', '2H', '5C', 'JD', '7H', 'JH', 'TH', '8C', 'QS', '3C', '6C', '9D', '5H', 'JC', 'KS', '5S'], ['8D', '4S', '6H', '2C', '9C', '7C', 'KC', '7S', 'QH', 'AS', 'AD', 'TD']], False], [3, 1, 20, 2]], [[[['AH', '5S', 'QD', 'AD', 'JC', 'JD', 'AC', 'TD', '4H', 'TS', 'JS', '7S', 'TH', '4D', '2S', '6C'], ['AS', '7H', '9S', '7C', '9C', 'JH', 'KS', '6H', '5H', '8S', '6D'], ['TC', 'QS', '9H', '8C', '2H', 'KC', '3D', 'QC', '3S', 'KH', '7D', '5C', '8H'], ['KD', '4S', '5D', 'QH', '9D', '6S', '8D', '2D', '4C', '3H', '2C', '3C']], True], [-7, 4, 17, 2]]], [[[[['3C', 'TS', '2H', '7D', '9S', '9C', '7H', 'AS', 'KS', 'JH', 'KD', '4D', '6C', 'KH', '3H', '8H', '8C', '5H', '4H', 'QH', '6H', '9H', 'AH', 'TH', 'QS'], ['QC', '4C', '2D', 'AC', '4S', 'JD', '8D', '5C'], ['6D', '6S', '5S', '2C', '9D', '7S', 'QD', '8S', 'TD', 'KC', 'TC', 'JS', 'AD'], ['3D', '7C', 'JC', '5D', '3S', '2S']], True], [0, 16, 26, 26]], [[[['AD', 'KD', 'KH', 'TD', '7H', '8S', '6S', 'TS', 'AS', '7C'], ['2D', '6D', 'JC', 'JS', 'JH', '3C', '9C', '5D', '2S', 'AC', '8D', '9S', '3D', 'QC', '5H', 'QD'], ['4C', 'QS', 'TH', '9H', 'TC', '4D', '5S', '2H', '9D', '6H', '3S', 'KC'], ['AH', '5C', '6C', '7S', '2C', 'QH', '3H', '7D', 'KS', '4S', '4H', '8H', '8C', 'JD']], False], [2, 2, 17, 5]], [[[['7H', 'KH', '3D', 'TC', '6D', '6C', '2C', 'TS', '8S', '8D', 'JD', 'AH', '4H', 'TD', 'AC'], ['5D', '9S', '3S', 'QS', 'KS', '9C', '6H', '9D', 'QC', 'QH', '7D', 'AD', '3H', 'JC', 'TH', '5H', '3C', '4S', '7C'], ['JS', '2D', '4C', 'JH', 'QD', 'KC', 'KD', '2H', '6S'], ['8C', 'AS', '5C', '9H', '7S', '2S', '5S', '8H', '4D']], False], [4, 18, 2, 2]], [[[['TS', 'AS', 'KC', 'JS', 'QD', '8S', '4H', 'JC', '2H', '4S', '7S', '6D', 'JD', 'KD', '5D', 'TD', 'JH'], ['KS', '3D', '8C', '2D', '7D', '3C', '7C', '8H', 'AH', '4D', '9C', '5C', 'AC', '6C'], ['5H', '3H', '9H', '9S', '2S', 'KH', '2C'], ['TH', '8D', '4C', 'QC', 'QH', 'AD', 'TC', '5S', '7H', 'QS', '3S', '9D', '6H', '6S']], False], [3, 2, 4, 17]], [[[['9D', '9C', '7S', '5S', '8S', '2S', '4S', '2C', 'AS', '6C', '7C', 'JC', 'QC', '8C', 'KS'], ['JS', '2D', 'KD', 'QD', 'TD', 'KC', '4C'], ['JD', 'TS', '3S', '5C', '6D', 'AC', '4D'], ['5H', '9H', 'TH', 'KH', 'TC', '8D', '9S', '4H', '7H', '8H', '6S', 'JH', '6H', '5D', 'AD', '3D', 'QS', '3C', '7D', '2H', 'AH', '3H', 'QH']], True], [26, 26, 16, 0]], [[[['TH', '7C', '8S', '2S', '6C', '5C', '4H', '6S', '5H', '9D', '7S', '5S', '2H', 'TS', 'KS'], ['4C', 'QD', '3C', 'JD', '7H', '3S', 'TD', 'AH', '4D', '9H', 'JC', '6H', '4S'], ['JS', 'JH', 'QH', '9S', 'KD', 'QC', '6D'], ['AS', '3H', 'KH', '2C', 'AD', 'TC', '2D', 'AC', 'KC', 'QS', '9C', '7D', '8H', '3D', '8C', '5D', '8D']], False], [4, 4, 2, 16]], [[[['QS', 'TD', '7C', 'TH', '8C', 'AS', '2S', 'TC', '5C', '5D', 'KC'], ['6S', '4H', '5H', '2H', '9H', 'KD', '3S', 'QD', '8D', '3C', 'KS', 'KH'], ['JD', '7D', '4D', '5S', '8S', '9C', '6D', '3D', '4S', 'QC', '2C', '6C', '9D', 'JC', '4C', '7S'], ['JH', '9S', '7H', 'AC', 'QH', '8H', 'AD', '2D', 'TS', 'JS', '3H', '6H', 'AH']], True], [14, 5, -10, 7]], [[[['3H', '9H', 'TD', 'AC', '5C', '6D', '3C', '2H', 'JC'], ['KD', '9S', 'TC', '6C', 'AH', 'QH', '8C', '6S', 'JS', '3D', '4H', 'QS', 'QD'], ['2D', '4D', '4C', 'KC', '7S', '5S', '8S', 'KS', '7C', '5D', '6H', 'AD', '9D', '2S', '8H', '8D', '2C'], ['KH', 'AS', 'JD', 'QC', 'TH', '7H', 'TS', 'JH', '4S', '5H', '9C', '3S', '7D']], True], [3, 16, 2, -5]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("round score 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 |
|---|---|---|---|
| round score case 0 | [2, 0, 17, 17] | [2, 0, -3, 17] | Failed |
| round score case 1 | [4, 4, 17, 1] | [4, 4, 17, 1] | Passed |
| round score case 2 | [7, 1, 15, 3] | [7, 1, 15, 3] | Passed |
| round score case 3 | [26, 0, 36, 26] | [26, 0, 16, 26] | Failed |
| round score case 4 | [10, 26, 26, 26] | [-10, 26, 26, 26] | Failed |
| round score case 5 | [6, 1, 4, 15] | [6, 1, 4, 15] | Passed |
| round score case 6 | [2, 3, 17, 4] | [2, 3, 17, 4] | Passed |
| round score case 7 | [13, 17, 4, 2] | [-7, 17, 4, 2] | Failed |
SHA-256 / bb64e31090ffb58f29b52cd4f7dab78332549b497a9945a0a9d718f3f4322d4d
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
taken, jd = x
pts = []
for cards in taken:
s = sum(1 for c in cards if c[1] == 'H')
if 'QS' in cards:
s += 13
pts.append(s)
moon = [i for i, cards in enumerate(taken) if pts[i] == 26]
if moon:
shooter = moon[0]
pts = [0 if i == shooter else 26 for i in range(len(taken))]
if jd:
for i, cards in enumerate(taken):
if 'JD' in cards:
pts[i] -= 10 if pts[i] >= 10 else pts[i]
return pts
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[[['8C', '5H', 'AD', '8H', '3C', 'JS', '4D', '9D'], ['KC', '3D', 'AC', '2C', '3S', '7S', '4C', 'TC', 'KS'], ['4H', '2D', '9C', 'QC', '9H', 'JD', '2S', 'QH', '7D', 'AS', 'AH', '6C', 'KH', 'JH', '8D', 'QD', '3H'], ['TS', '7C', '6S', '4S', 'QS', 'TD', '5C', '7H', '8S', '5D', '9S', '5S', '2H', '6H', 'TH', 'JC', 'KD', '6D']], True], [2, 0, -3, 17]], [[[['9H', 'JD', '4D', '8C', '9C', '7C', '9S', '7H', '2S', '8D', 'AC', '3H', 'QC', '2H'], ['9D', 'AS', 'JS', '4S', '5S', 'TS', '3D', 'QH', '4H', '2D', '5C', '7D', '3S', '5H', 'JH'], ['KH', '5D', 'AH', 'KC', 'TC', 'QS', '8H', 'QD', '6H', '6C', 'AD'], ['7S', '3C', '2C', '6S', 'TD', '8S', '4C', 'KS', 'JC', 'KD', '6D', 'TH']], False], [4, 4, 17, 1]], [[[['8C', '6S', '2H', 'KS', 'QH', '7D', '8S', '5D', 'AD', '5H', '5S', 'KH', 'JH', '9S', '3D', '4H', '7H'], ['TS', '8D', '4D', '2C', 'TD', '2D', 'QC', 'KD', 'TC', '4C', '3H'], ['4S', 'TH', '6C', 'QS', '2S', 'AH', 'QD', '3S', 'JC'], ['AS', '8H', '5C', '9D', '6D', '9H', '6H', 'AC', '9C', 'JD', 'KC', '7S', 'JS', '7C', '3C']], False], [7, 1, 15, 3]], [[[['TD', '7S', '6S', 'AC', 'JS', '5C', '3S', '6C', '4D', '2D', 'JC', 'QD'], ['7D', '6H', '7C', 'KC', '3C', '8H', '3H', 'TH', '9H', 'KD', 'AS', '4H', '7H', '8S', 'AD', 'KH', '2H', '5H', 'AH', 'QS', 'QH', 'JH', '8C'], ['9S', '6D', 'TC', '5D', '2C', 'JD', '9D', '9C', '3D', '5S'], ['KS', '4S', '4C', 'QC', '2S', '8D', 'TS']], True], [26, 0, 16, 26]], [[[['QD', '8H', 'QS', 'TD', 'JH', '5H', '9H', 'KC', 'QH', '7H', '3H', '4H', '5S', '6H', 'TH', '7C', '3C', 'JD', 'AS', 'TC', '2H', '8S', 'AH', '6C', '5C', 'JC', 'KH'], ['4D', '9C', 'JS', '5D', '6D', '8C', '2C'], ['4C', 'AC', '3S', '2S', 'KD', '4S', 'AD', '9D', '7S', 'QC'], ['8D', '6S', 'KS', '3D', '9S', '7D', '2D', 'TS']], True], [-10, 26, 26, 26]], [[[['3H', '6D', '9D', '7D', '7H', '4C', '5D', '3D', '5S', '9C', 'AD', '6S', '8H', '6H', 'QC', '3S', 'QH', 'KH'], ['7C', '4H', '9S', '8S', '2D', 'TC', '3C', '6C'], ['QD', '2H', 'KD', '8D', 'KS', 'JD', '5H', 'TS', '4D', '4S', 'AC', 'JH', '7S', '2S', 'AH'], ['QS', '5C', '2C', '8C', 'KC', 'JS', 'JC', 'AS', 'TD', 'TH', '9H']], False], [6, 1, 4, 15]], [[[['KH', 'AD', '9C', '7D', '5S', 'KC', 'TC', '4H', '4D', 'AS', '6D'], ['9D', '6C', 'KD', 'QD', '4C', '8H', 'JD', '6S', 'JH', 'AC', '5C', '9H', 'TD'], ['2S', 'JC', 'KS', 'JS', '2H', '5D', '6H', '4S', 'AH', 'QS', '3C', '3S', '7S', '3D', 'QH'], ['2C', 'TH', '9S', '7H', '2D', '5H', '8D', '8C', '3H', '8S', '7C', 'TS', 'QC']], False], [2, 3, 17, 4]], [[[['JS', '8H', 'TH', '4C', '6S', '7S', 'AD', 'KC', 'JD', '4D', '7C', '7D', 'AC', 'TS', '7H'], ['TD', 'QS', '6C', 'KS', '2H', 'TC', 'AS', '2D', '9D', '3D', '5S', '4H', 'QC', 'KH', '8S', 'QH'], ['9S', '9H', '2S', '6D', '5H', '4S', '8C', '3S', '6H', '3H', '8D'], ['AH', '5D', '2C', 'JH', 'JC', '5C', 'KD', '9C', 'QD', '3C']], True], [-7, 17, 4, 2]]], [[[[['TD', '7S', '6S', 'AC', 'JS', '5C', '3S', '6C', '4D', '2D', 'JC', 'QD'], ['7D', '6H', '7C', 'KC', '3C', '8H', '3H', 'TH', '9H', 'KD', 'AS', '4H', '7H', '8S', 'AD', 'KH', '2H', '5H', 'AH', 'QS', 'QH', 'JH', '8C'], ['9S', '6D', 'TC', '5D', '2C', 'JD', '9D', '9C', '3D', '5S'], ['KS', '4S', '4C', 'QC', '2S', '8D', 'TS']], True], [26, 0, 16, 26]], [[[['2H', '4S', '9C', '3C', 'TS', '7H', 'QS', '5D', 'AS', '9H', 'TH', 'JS', '7C', 'TD', 'JH', 'KD', 'TC'], ['8H', 'QH', '4C', '7D', '2S', '8C', '7S', 'KC'], ['6C', '9D', 'QC', 'JD', '5C', 'AC', '6H', '6D', '3D', '4D', '2D', 'AH', '9S', 'KH'], ['AD', '8S', 'JC', '8D', '2C', '5H', '3S', '3H', '4H', 'KS', '6S', '5S', 'QD']], True], [18, 2, -7, 3]], [[[['5C', '4C', '5S', '7C', 'KD', '7S'], ['AC', '2S', '4D', '6D', '5D', '9S', 'QC'], ['8H', '4S', 'JH', 'QS', '3C', 'JC', '6H', '4H', '2H', 'AS', 'AH', 'KH', '9D', 'QH', '7H', '5H', 'KC', 'TD', '3H', 'TC', 'TH', '9H', '6C', '2C', 'KS'], ['8D', '8C', 'JS', 'QD', 'AD', '8S', '3S', '3D', '7D', 'TS', '6S', 'JD', '2D', '9C']], True], [26, 26, 0, 16]], [[[['AS', 'QH', '6H', 'AH', 'KH', '5H', 'KC', '7H', '7D', 'JH', 'TD', '3H', 'TC', '3D', 'KS', '2H', '5C', '8H', 'QS', 'AC', '9H', 'TH', '8C', '4H', 'JC'], ['9S', 'KD', '7C', 'JS', '2S', '9C', '2D', '3C'], ['3S', 'QC', '7S', '2C', '5D', '4S', '9D', '6C', '8S', '6D', '5S'], ['JD', '8D', '6S', 'QD', '4C', '4D', 'TS', 'AD']], False], [0, 26, 26, 26]], [[[['9H', 'KS', '4D', 'TH', 'TC', '3D', '7H', 'KC', 'QD', '9S', 'JH'], ['4S', 'AS', '2H', '9C', '8S', 'TS', '2C', '8D', 'JC', '5C', 'KD', '5H', '7S'], ['AH', '9D', '6S', '8H', '8C', 'TD', '3S', 'QC', 'KH', 'AD', 'JD', 'JS', 'QS', '6H', '7D'], ['AC', '2D', '4C', '3C', '7C', '3H', '6C', '5D', '5S', 'QH', '2S', '4H', '6D']], True], [4, 2, 7, 3]], [[[['4S', '4H', 'TS', '7C', '7D', '9H', 'TH', 'JS', '8S', 'QD', 'JC', 'AC'], ['3H', 'TD', '5H', '2S', '2D', '3S', '3C', '5C', '9D', '9C', '6D', 'AS', 'QC'], ['8C', 'JH', '5S', '7H', '6H', '9S', 'QS', 'QH', 'JD', 'AH', '4C', '8D', 'KS', '2C', 'AD', 'KH', '4D'], ['6S', '3D', '2H', '6C', 'KD', 'KC', '8H', '7S', 'TC', '5D']], True], [3, 2, 9, 2]], [[[['4D', '7H', '5S', '8D', 'KH', '9C', 'AS', 'AD', 'JC', '2S', '4H'], ['AC', '5C', '2C', 'JD', '5H', 'KS', 'KD', '3D', '8H', 'TH', '3C', 'QC', 'QH', '4C', '7S'], ['TC', '9S', 'TS', '6D', '9H', 'QD', '7C', '6S', '5D'], ['JS', '6C', '2H', '7D', 'QS', 'JH', '4S', '9D', '3S', '6H', '3H', '8S', '8C', '2D', 'KC', 'TD', 'AH']], True], [3, -6, 1, 18]], [[[['8C', 'AH', 'QC', '7D', '3C', '4H', '7H', 'AS', 'KC', '5D', 'TS', '8H', 'AD'], ['2S', '3H', '3D', '7C', 'QS', 'QH', '8S', '3S', '5S', 'QD', 'TC', 'KS', 'TH'], ['5H', 'JS', '2H', 'JC', 'JD', 'KD', '2C', '8D', '6H', 'JH', '9C', '4S', '4D'], ['5C', 'TD', '6S', '4C', '6D', '2D', '9D', 'KH', '9S', '9H', '6C', 'AC', '7S']], True], [4, 16, -6, 2]]], [[[[['5C', '4C', '5S', '7C', 'KD', '7S'], ['AC', '2S', '4D', '6D', '5D', '9S', 'QC'], ['8H', '4S', 'JH', 'QS', '3C', 'JC', '6H', '4H', '2H', 'AS', 'AH', 'KH', '9D', 'QH', '7H', '5H', 'KC', 'TD', '3H', 'TC', 'TH', '9H', '6C', '2C', 'KS'], ['8D', '8C', 'JS', 'QD', 'AD', '8S', '3S', '3D', '7D', 'TS', '6S', 'JD', '2D', '9C']], True], [26, 26, 0, 16]], [[[['8S', 'QH', '4H', '5D', 'QS', '5S', 'AH', 'TD', '5H', 'TH', '6S', '7S', '9H'], ['9C', '2S', 'QD', 'JH', '7D', '8C', '7C', '4C', 'QC', '3D', 'AS', 'KC', 'JC'], ['6H', '4D', 'KD', 'JD', '3S', 'AD', '2D', '6D', '9D'], ['TS', '3C', '9S', '8D', '4S', '2H', 'JS', '2C', '6C', '3H', 'KS', '5C', 'TC', 'AC', '7H', 'KH', '8H']], False], [19, 1, 1, 5]], [[[['JS', '8H', 'TH', '4C', '6S', '7S', 'AD', 'KC', 'JD', '4D', '7C', '7D', 'AC', 'TS', '7H'], ['TD', 'QS', '6C', 'KS', '2H', 'TC', 'AS', '2D', '9D', '3D', '5S', '4H', 'QC', 'KH', '8S', 'QH'], ['9S', '9H', '2S', '6D', '5H', '4S', '8C', '3S', '6H', '3H', '8D'], ['AH', '5D', '2C', 'JH', 'JC', '5C', 'KD', '9C', 'QD', '3C']], True], [-7, 17, 4, 2]], [[[['9H', 'JD', '8H', 'QH', 'JH', '9D', 'QS', '5H', '6H', '3H', 'AH', '5D', '2H', 'JC', 'AC', '4H', '6D', 'TH', 'KH', '2C', '7H', '4D', 'QD'], ['7D', 'JS', '9S', '6S', 'TC', '5C', '8C'], ['7S', '2D', '5S', 'QC', 'KC', '8S', '4S', 'TS', '3S', '3C', '9C', '4C', '7C'], ['KD', '6C', '2S', '3D', '8D', 'AD', 'AS', 'KS', 'TD']], True], [-10, 26, 26, 26]], [[[['3D', '6D', '5S', '2D', 'KD', '4D', 'TS', 'QS', '9S'], ['3S', '9C', '3C', 'TD', 'QH', '2S', '8H', '7S', 'TH', '7H', 'KC', '6S', 'TC', 'JD', '9H', 'AH', '5D', 'JS', '5C'], ['AS', 'KS', 'QD', 'KH', '4H', 'JH', '4C', '7D', '6H', '5H', '8C'], ['2H', '9D', 'AD', '2C', 'QC', '6C', 'AC', 'JC', '8D', '8S', '7C', '4S', '3H']], False], [13, 6, 5, 2]], [[[['TH', '2H', '2D', '8H', '9D', 'KC', 'AD'], ['TD', 'QS', 'AS', '8S', '3C', 'QD', '4C', '4S', 'JD', 'TS', '2S', '7S', '6C', '3S', '8C', 'QC', '4H'], ['7C', 'AH', '2C', 'KD', '4D', 'AC', '5H', '6H', '6D', 'TC', '7H', 'JS', 'QH', '9C', '5D', '9H', '3H'], ['8D', '9S', '7D', '5S', 'JC', 'JH', '5C', 'KS', 'KH', '6S', '3D']], False], [3, 14, 7, 2]], [[[['7D', 'QH', 'AC', 'JC', '5H', '4C', '9S'], ['AH', 'JS', 'TC', '5D', 'TH', '9H', '8D', 'KC', '7S', '3S', '2S', '5S', '7C', 'TS', 'KD', '8C', '7H', 'AD', 'KH', '3H', '6C', '2D'], ['QD', '5C', '8S', 'QC', 'QS', '2C', '4S', 'TD', 'KS', '2H', '6D'], ['3C', 'AS', '4H', 'JD', '6S', '9D', '9C', '6H', '3D', 'JH', '4D', '8H']], False], [2, 6, 14, 4]], [[[['AH', '4H', 'QH', '2C', 'TS', 'QC', '9S', 'QS', '3D', '9H', 'KC', '5D', '3C', '6H', 'JH', '2H', '9C', '5S', 'JS'], ['TH', '7D', '6D', '3H', '6S', '7C', 'KS', '8C', '4C', '8S', '8H', 'AC', 'TD', '5H', 'KD', '9D', '2S', 'AS'], ['QD', '3S', '7S', 'JC', '8D', 'AD', 'JD'], ['TC', '7H', 'KH', '4D', '4S', '6C', '2D', '5C']], True], [20, 4, -10, 2]]], [[[[['4D', '7H', '5S', '8D', 'KH', '9C', 'AS', 'AD', 'JC', '2S', '4H'], ['AC', '5C', '2C', 'JD', '5H', 'KS', 'KD', '3D', '8H', 'TH', '3C', 'QC', 'QH', '4C', '7S'], ['TC', '9S', 'TS', '6D', '9H', 'QD', '7C', '6S', '5D'], ['JS', '6C', '2H', '7D', 'QS', 'JH', '4S', '9D', '3S', '6H', '3H', '8S', '8C', '2D', 'KC', 'TD', 'AH']], True], [3, -6, 1, 18]], [[[['3S', 'TC', '4H', 'AD', 'AH', 'KD', '7S', '2D', '5H', '6H', 'JD', '6D', 'KS'], ['7H', 'JH', 'TD', '8C', 'QD', '2C', '4D', 'KC', '5D', '9D', '7C', 'QS', '5S', 'KH', '8D', 'AC'], ['3D', '2S', '3H', '9S', '8H', '7D', 'TH', '8S', '6S', 'JC'], ['2H', '3C', '5C', '9H', 'QH', '4S', 'JS', '4C', 'QC', '9C', '6C', 'TS', 'AS']], False], [4, 16, 3, 3]], [[[['6C', '5D', '2H', 'JD', '7H', '6S', '6D', '3H', '8H', 'QC', '5H', 'TD', '5C'], ['3C', '4H', 'JH', '7S', 'KS', 'JS', 'AH', '8C', '8S'], ['9S', '6H', 'KC', '3D', 'KH', 'TH', '8D', 'QS', '2D', 'AD', '9C', 'AC', '2C', 'TS', 'KD', '9H', '4C', '5S'], ['AS', '9D', '2S', 'QD', '7D', 'TC', '7C', '4D', '4S', 'QH', '3S', 'JC']], False], [5, 3, 17, 1]], [[[['QD', 'JD', 'JH', 'QH', 'TH', 'KC', '7H', '4C', '3D', '4H', 'KH', '7S', 'TD', 'TC', 'QS', '8H', '6D', '6H', '9C', '9H', '5H', 'AH', '2H', '3H'], ['8C', '2S', '5S', '7D', 'JC', '6S', 'KD', 'AD', '9S', '3C', '2C'], ['8D', '8S', '5C', '9D', '3S', '5D', '4D', 'AS', '4S'], ['JS', 'AC', 'QC', 'TS', '6C', 'KS', '7C', '2D']], True], [-10, 26, 26, 26]], [[[['8C', '2D', '4S', '6C', '9C', '3S', 'JD', '5D', 'JC', 'AC', '2C'], ['8D', 'JH', 'KH', '3D', '6H', 'AH', '8S', 'TH', '9H', '5C', '8H', 'QS', 'QH', 'TD', '2H', '3H', '5H', '6D', '4C', '4H', '7H', 'KS', '2S', '6S'], ['TC', 'QC', '7D', '5S', 'TS', 'AD', 'KD', '7S', 'KC', '9D', '4D'], ['9S', 'QD', 'AS', 'JS', '3C', '7C']], True], [16, 0, 26, 26]], [[[['QH', 'TD', 'JD', '7C', 'QS', '4H', '8C', 'JS', '5S', 'AS', '3H', '3D', '2C', '2S', '6C', '5H', '5D', '7H'], ['TH', 'TS', 'AH', '8H', '8S', '5C', 'TC'], ['4S', '3C', '3S', '2H', 'KH', '7D', '6S', '9C', '6H', '9S', '6D', 'KS', 'JC', '4C'], ['QD', 'QC', 'AD', 'KC', '4D', '8D', '7S', '2D', 'JH', '9D', '9H', 'AC', 'KD']], False], [18, 3, 3, 2]], [[[['4C', 'JS', '8H', '9S', '6D', 'QC', '5D', 'KD', '3H', '2D', '3D', 'QD', '4H', '6S'], ['4D', '9H', 'TS', '7D', '3S', 'AC', '2S'], ['AH', '8S', 'KH', 'TC', '2H', '5C', 'JD', '7H', 'JH', 'TH', '8C', 'QS', '3C', '6C', '9D', '5H', 'JC', 'KS', '5S'], ['8D', '4S', '6H', '2C', '9C', '7C', 'KC', '7S', 'QH', 'AS', 'AD', 'TD']], False], [3, 1, 20, 2]], [[[['AH', '5S', 'QD', 'AD', 'JC', 'JD', 'AC', 'TD', '4H', 'TS', 'JS', '7S', 'TH', '4D', '2S', '6C'], ['AS', '7H', '9S', '7C', '9C', 'JH', 'KS', '6H', '5H', '8S', '6D'], ['TC', 'QS', '9H', '8C', '2H', 'KC', '3D', 'QC', '3S', 'KH', '7D', '5C', '8H'], ['KD', '4S', '5D', 'QH', '9D', '6S', '8D', '2D', '4C', '3H', '2C', '3C']], True], [-7, 4, 17, 2]]], [[[[['3C', 'TS', '2H', '7D', '9S', '9C', '7H', 'AS', 'KS', 'JH', 'KD', '4D', '6C', 'KH', '3H', '8H', '8C', '5H', '4H', 'QH', '6H', '9H', 'AH', 'TH', 'QS'], ['QC', '4C', '2D', 'AC', '4S', 'JD', '8D', '5C'], ['6D', '6S', '5S', '2C', '9D', '7S', 'QD', '8S', 'TD', 'KC', 'TC', 'JS', 'AD'], ['3D', '7C', 'JC', '5D', '3S', '2S']], True], [0, 16, 26, 26]], [[[['AD', 'KD', 'KH', 'TD', '7H', '8S', '6S', 'TS', 'AS', '7C'], ['2D', '6D', 'JC', 'JS', 'JH', '3C', '9C', '5D', '2S', 'AC', '8D', '9S', '3D', 'QC', '5H', 'QD'], ['4C', 'QS', 'TH', '9H', 'TC', '4D', '5S', '2H', '9D', '6H', '3S', 'KC'], ['AH', '5C', '6C', '7S', '2C', 'QH', '3H', '7D', 'KS', '4S', '4H', '8H', '8C', 'JD']], False], [2, 2, 17, 5]], [[[['7H', 'KH', '3D', 'TC', '6D', '6C', '2C', 'TS', '8S', '8D', 'JD', 'AH', '4H', 'TD', 'AC'], ['5D', '9S', '3S', 'QS', 'KS', '9C', '6H', '9D', 'QC', 'QH', '7D', 'AD', '3H', 'JC', 'TH', '5H', '3C', '4S', '7C'], ['JS', '2D', '4C', 'JH', 'QD', 'KC', 'KD', '2H', '6S'], ['8C', 'AS', '5C', '9H', '7S', '2S', '5S', '8H', '4D']], False], [4, 18, 2, 2]], [[[['TS', 'AS', 'KC', 'JS', 'QD', '8S', '4H', 'JC', '2H', '4S', '7S', '6D', 'JD', 'KD', '5D', 'TD', 'JH'], ['KS', '3D', '8C', '2D', '7D', '3C', '7C', '8H', 'AH', '4D', '9C', '5C', 'AC', '6C'], ['5H', '3H', '9H', '9S', '2S', 'KH', '2C'], ['TH', '8D', '4C', 'QC', 'QH', 'AD', 'TC', '5S', '7H', 'QS', '3S', '9D', '6H', '6S']], False], [3, 2, 4, 17]], [[[['9D', '9C', '7S', '5S', '8S', '2S', '4S', '2C', 'AS', '6C', '7C', 'JC', 'QC', '8C', 'KS'], ['JS', '2D', 'KD', 'QD', 'TD', 'KC', '4C'], ['JD', 'TS', '3S', '5C', '6D', 'AC', '4D'], ['5H', '9H', 'TH', 'KH', 'TC', '8D', '9S', '4H', '7H', '8H', '6S', 'JH', '6H', '5D', 'AD', '3D', 'QS', '3C', '7D', '2H', 'AH', '3H', 'QH']], True], [26, 26, 16, 0]], [[[['TH', '7C', '8S', '2S', '6C', '5C', '4H', '6S', '5H', '9D', '7S', '5S', '2H', 'TS', 'KS'], ['4C', 'QD', '3C', 'JD', '7H', '3S', 'TD', 'AH', '4D', '9H', 'JC', '6H', '4S'], ['JS', 'JH', 'QH', '9S', 'KD', 'QC', '6D'], ['AS', '3H', 'KH', '2C', 'AD', 'TC', '2D', 'AC', 'KC', 'QS', '9C', '7D', '8H', '3D', '8C', '5D', '8D']], False], [4, 4, 2, 16]], [[[['QS', 'TD', '7C', 'TH', '8C', 'AS', '2S', 'TC', '5C', '5D', 'KC'], ['6S', '4H', '5H', '2H', '9H', 'KD', '3S', 'QD', '8D', '3C', 'KS', 'KH'], ['JD', '7D', '4D', '5S', '8S', '9C', '6D', '3D', '4S', 'QC', '2C', '6C', '9D', 'JC', '4C', '7S'], ['JH', '9S', '7H', 'AC', 'QH', '8H', 'AD', '2D', 'TS', 'JS', '3H', '6H', 'AH']], True], [14, 5, -10, 7]], [[[['3H', '9H', 'TD', 'AC', '5C', '6D', '3C', '2H', 'JC'], ['KD', '9S', 'TC', '6C', 'AH', 'QH', '8C', '6S', 'JS', '3D', '4H', 'QS', 'QD'], ['2D', '4D', '4C', 'KC', '7S', '5S', '8S', 'KS', '7C', '5D', '6H', 'AD', '9D', '2S', '8H', '8D', '2C'], ['KH', 'AS', 'JD', 'QC', 'TH', '7H', 'TS', 'JH', '4S', '5H', '9C', '3S', '7D']], True], [3, 16, 2, -5]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("round score 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 |
|---|---|---|---|
| round score case 0 | [2, 0, 0, 17] | [2, 0, -3, 17] | Failed |
| round score case 1 | [4, 4, 17, 1] | [4, 4, 17, 1] | Passed |
| round score case 2 | [7, 1, 15, 3] | [7, 1, 15, 3] | Passed |
| round score case 3 | [26, 0, 16, 26] | [26, 0, 16, 26] | Passed |
| round score case 4 | [0, 26, 26, 26] | [-10, 26, 26, 26] | Failed |
| round score case 5 | [6, 1, 4, 15] | [6, 1, 4, 15] | Passed |
| round score case 6 | [2, 3, 17, 4] | [2, 3, 17, 4] | Passed |
| round score case 7 | [0, 17, 4, 2] | [-7, 17, 4, 2] | Failed |
SHA-256 / f8d3954f2f2fdea8931cb320492ad3a7416f4ac3d40aff394bdea5f707b82707
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
taken, jd = x
pts = []
for cards in taken:
s = sum(1 for c in cards if c[1] == 'H')
if 'QS' in cards:
s += 13
pts.append(s)
moon = [i for i, cards in enumerate(taken) if pts[i] == 26]
if moon:
shooter = moon[0]
pts = [0 if i == shooter else 26 for i in range(len(taken))]
if jd:
for i, cards in enumerate(taken):
if 'JD' in cards:
pts[i] -= 10
return pts
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[[['8C', '5H', 'AD', '8H', '3C', 'JS', '4D', '9D'], ['KC', '3D', 'AC', '2C', '3S', '7S', '4C', 'TC', 'KS'], ['4H', '2D', '9C', 'QC', '9H', 'JD', '2S', 'QH', '7D', 'AS', 'AH', '6C', 'KH', 'JH', '8D', 'QD', '3H'], ['TS', '7C', '6S', '4S', 'QS', 'TD', '5C', '7H', '8S', '5D', '9S', '5S', '2H', '6H', 'TH', 'JC', 'KD', '6D']], True], [2, 0, -3, 17]], [[[['9H', 'JD', '4D', '8C', '9C', '7C', '9S', '7H', '2S', '8D', 'AC', '3H', 'QC', '2H'], ['9D', 'AS', 'JS', '4S', '5S', 'TS', '3D', 'QH', '4H', '2D', '5C', '7D', '3S', '5H', 'JH'], ['KH', '5D', 'AH', 'KC', 'TC', 'QS', '8H', 'QD', '6H', '6C', 'AD'], ['7S', '3C', '2C', '6S', 'TD', '8S', '4C', 'KS', 'JC', 'KD', '6D', 'TH']], False], [4, 4, 17, 1]], [[[['8C', '6S', '2H', 'KS', 'QH', '7D', '8S', '5D', 'AD', '5H', '5S', 'KH', 'JH', '9S', '3D', '4H', '7H'], ['TS', '8D', '4D', '2C', 'TD', '2D', 'QC', 'KD', 'TC', '4C', '3H'], ['4S', 'TH', '6C', 'QS', '2S', 'AH', 'QD', '3S', 'JC'], ['AS', '8H', '5C', '9D', '6D', '9H', '6H', 'AC', '9C', 'JD', 'KC', '7S', 'JS', '7C', '3C']], False], [7, 1, 15, 3]], [[[['TD', '7S', '6S', 'AC', 'JS', '5C', '3S', '6C', '4D', '2D', 'JC', 'QD'], ['7D', '6H', '7C', 'KC', '3C', '8H', '3H', 'TH', '9H', 'KD', 'AS', '4H', '7H', '8S', 'AD', 'KH', '2H', '5H', 'AH', 'QS', 'QH', 'JH', '8C'], ['9S', '6D', 'TC', '5D', '2C', 'JD', '9D', '9C', '3D', '5S'], ['KS', '4S', '4C', 'QC', '2S', '8D', 'TS']], True], [26, 0, 16, 26]], [[[['QD', '8H', 'QS', 'TD', 'JH', '5H', '9H', 'KC', 'QH', '7H', '3H', '4H', '5S', '6H', 'TH', '7C', '3C', 'JD', 'AS', 'TC', '2H', '8S', 'AH', '6C', '5C', 'JC', 'KH'], ['4D', '9C', 'JS', '5D', '6D', '8C', '2C'], ['4C', 'AC', '3S', '2S', 'KD', '4S', 'AD', '9D', '7S', 'QC'], ['8D', '6S', 'KS', '3D', '9S', '7D', '2D', 'TS']], True], [-10, 26, 26, 26]], [[[['3H', '6D', '9D', '7D', '7H', '4C', '5D', '3D', '5S', '9C', 'AD', '6S', '8H', '6H', 'QC', '3S', 'QH', 'KH'], ['7C', '4H', '9S', '8S', '2D', 'TC', '3C', '6C'], ['QD', '2H', 'KD', '8D', 'KS', 'JD', '5H', 'TS', '4D', '4S', 'AC', 'JH', '7S', '2S', 'AH'], ['QS', '5C', '2C', '8C', 'KC', 'JS', 'JC', 'AS', 'TD', 'TH', '9H']], False], [6, 1, 4, 15]], [[[['KH', 'AD', '9C', '7D', '5S', 'KC', 'TC', '4H', '4D', 'AS', '6D'], ['9D', '6C', 'KD', 'QD', '4C', '8H', 'JD', '6S', 'JH', 'AC', '5C', '9H', 'TD'], ['2S', 'JC', 'KS', 'JS', '2H', '5D', '6H', '4S', 'AH', 'QS', '3C', '3S', '7S', '3D', 'QH'], ['2C', 'TH', '9S', '7H', '2D', '5H', '8D', '8C', '3H', '8S', '7C', 'TS', 'QC']], False], [2, 3, 17, 4]], [[[['JS', '8H', 'TH', '4C', '6S', '7S', 'AD', 'KC', 'JD', '4D', '7C', '7D', 'AC', 'TS', '7H'], ['TD', 'QS', '6C', 'KS', '2H', 'TC', 'AS', '2D', '9D', '3D', '5S', '4H', 'QC', 'KH', '8S', 'QH'], ['9S', '9H', '2S', '6D', '5H', '4S', '8C', '3S', '6H', '3H', '8D'], ['AH', '5D', '2C', 'JH', 'JC', '5C', 'KD', '9C', 'QD', '3C']], True], [-7, 17, 4, 2]]], [[[[['TD', '7S', '6S', 'AC', 'JS', '5C', '3S', '6C', '4D', '2D', 'JC', 'QD'], ['7D', '6H', '7C', 'KC', '3C', '8H', '3H', 'TH', '9H', 'KD', 'AS', '4H', '7H', '8S', 'AD', 'KH', '2H', '5H', 'AH', 'QS', 'QH', 'JH', '8C'], ['9S', '6D', 'TC', '5D', '2C', 'JD', '9D', '9C', '3D', '5S'], ['KS', '4S', '4C', 'QC', '2S', '8D', 'TS']], True], [26, 0, 16, 26]], [[[['2H', '4S', '9C', '3C', 'TS', '7H', 'QS', '5D', 'AS', '9H', 'TH', 'JS', '7C', 'TD', 'JH', 'KD', 'TC'], ['8H', 'QH', '4C', '7D', '2S', '8C', '7S', 'KC'], ['6C', '9D', 'QC', 'JD', '5C', 'AC', '6H', '6D', '3D', '4D', '2D', 'AH', '9S', 'KH'], ['AD', '8S', 'JC', '8D', '2C', '5H', '3S', '3H', '4H', 'KS', '6S', '5S', 'QD']], True], [18, 2, -7, 3]], [[[['5C', '4C', '5S', '7C', 'KD', '7S'], ['AC', '2S', '4D', '6D', '5D', '9S', 'QC'], ['8H', '4S', 'JH', 'QS', '3C', 'JC', '6H', '4H', '2H', 'AS', 'AH', 'KH', '9D', 'QH', '7H', '5H', 'KC', 'TD', '3H', 'TC', 'TH', '9H', '6C', '2C', 'KS'], ['8D', '8C', 'JS', 'QD', 'AD', '8S', '3S', '3D', '7D', 'TS', '6S', 'JD', '2D', '9C']], True], [26, 26, 0, 16]], [[[['AS', 'QH', '6H', 'AH', 'KH', '5H', 'KC', '7H', '7D', 'JH', 'TD', '3H', 'TC', '3D', 'KS', '2H', '5C', '8H', 'QS', 'AC', '9H', 'TH', '8C', '4H', 'JC'], ['9S', 'KD', '7C', 'JS', '2S', '9C', '2D', '3C'], ['3S', 'QC', '7S', '2C', '5D', '4S', '9D', '6C', '8S', '6D', '5S'], ['JD', '8D', '6S', 'QD', '4C', '4D', 'TS', 'AD']], False], [0, 26, 26, 26]], [[[['9H', 'KS', '4D', 'TH', 'TC', '3D', '7H', 'KC', 'QD', '9S', 'JH'], ['4S', 'AS', '2H', '9C', '8S', 'TS', '2C', '8D', 'JC', '5C', 'KD', '5H', '7S'], ['AH', '9D', '6S', '8H', '8C', 'TD', '3S', 'QC', 'KH', 'AD', 'JD', 'JS', 'QS', '6H', '7D'], ['AC', '2D', '4C', '3C', '7C', '3H', '6C', '5D', '5S', 'QH', '2S', '4H', '6D']], True], [4, 2, 7, 3]], [[[['4S', '4H', 'TS', '7C', '7D', '9H', 'TH', 'JS', '8S', 'QD', 'JC', 'AC'], ['3H', 'TD', '5H', '2S', '2D', '3S', '3C', '5C', '9D', '9C', '6D', 'AS', 'QC'], ['8C', 'JH', '5S', '7H', '6H', '9S', 'QS', 'QH', 'JD', 'AH', '4C', '8D', 'KS', '2C', 'AD', 'KH', '4D'], ['6S', '3D', '2H', '6C', 'KD', 'KC', '8H', '7S', 'TC', '5D']], True], [3, 2, 9, 2]], [[[['4D', '7H', '5S', '8D', 'KH', '9C', 'AS', 'AD', 'JC', '2S', '4H'], ['AC', '5C', '2C', 'JD', '5H', 'KS', 'KD', '3D', '8H', 'TH', '3C', 'QC', 'QH', '4C', '7S'], ['TC', '9S', 'TS', '6D', '9H', 'QD', '7C', '6S', '5D'], ['JS', '6C', '2H', '7D', 'QS', 'JH', '4S', '9D', '3S', '6H', '3H', '8S', '8C', '2D', 'KC', 'TD', 'AH']], True], [3, -6, 1, 18]], [[[['8C', 'AH', 'QC', '7D', '3C', '4H', '7H', 'AS', 'KC', '5D', 'TS', '8H', 'AD'], ['2S', '3H', '3D', '7C', 'QS', 'QH', '8S', '3S', '5S', 'QD', 'TC', 'KS', 'TH'], ['5H', 'JS', '2H', 'JC', 'JD', 'KD', '2C', '8D', '6H', 'JH', '9C', '4S', '4D'], ['5C', 'TD', '6S', '4C', '6D', '2D', '9D', 'KH', '9S', '9H', '6C', 'AC', '7S']], True], [4, 16, -6, 2]]], [[[[['5C', '4C', '5S', '7C', 'KD', '7S'], ['AC', '2S', '4D', '6D', '5D', '9S', 'QC'], ['8H', '4S', 'JH', 'QS', '3C', 'JC', '6H', '4H', '2H', 'AS', 'AH', 'KH', '9D', 'QH', '7H', '5H', 'KC', 'TD', '3H', 'TC', 'TH', '9H', '6C', '2C', 'KS'], ['8D', '8C', 'JS', 'QD', 'AD', '8S', '3S', '3D', '7D', 'TS', '6S', 'JD', '2D', '9C']], True], [26, 26, 0, 16]], [[[['8S', 'QH', '4H', '5D', 'QS', '5S', 'AH', 'TD', '5H', 'TH', '6S', '7S', '9H'], ['9C', '2S', 'QD', 'JH', '7D', '8C', '7C', '4C', 'QC', '3D', 'AS', 'KC', 'JC'], ['6H', '4D', 'KD', 'JD', '3S', 'AD', '2D', '6D', '9D'], ['TS', '3C', '9S', '8D', '4S', '2H', 'JS', '2C', '6C', '3H', 'KS', '5C', 'TC', 'AC', '7H', 'KH', '8H']], False], [19, 1, 1, 5]], [[[['JS', '8H', 'TH', '4C', '6S', '7S', 'AD', 'KC', 'JD', '4D', '7C', '7D', 'AC', 'TS', '7H'], ['TD', 'QS', '6C', 'KS', '2H', 'TC', 'AS', '2D', '9D', '3D', '5S', '4H', 'QC', 'KH', '8S', 'QH'], ['9S', '9H', '2S', '6D', '5H', '4S', '8C', '3S', '6H', '3H', '8D'], ['AH', '5D', '2C', 'JH', 'JC', '5C', 'KD', '9C', 'QD', '3C']], True], [-7, 17, 4, 2]], [[[['9H', 'JD', '8H', 'QH', 'JH', '9D', 'QS', '5H', '6H', '3H', 'AH', '5D', '2H', 'JC', 'AC', '4H', '6D', 'TH', 'KH', '2C', '7H', '4D', 'QD'], ['7D', 'JS', '9S', '6S', 'TC', '5C', '8C'], ['7S', '2D', '5S', 'QC', 'KC', '8S', '4S', 'TS', '3S', '3C', '9C', '4C', '7C'], ['KD', '6C', '2S', '3D', '8D', 'AD', 'AS', 'KS', 'TD']], True], [-10, 26, 26, 26]], [[[['3D', '6D', '5S', '2D', 'KD', '4D', 'TS', 'QS', '9S'], ['3S', '9C', '3C', 'TD', 'QH', '2S', '8H', '7S', 'TH', '7H', 'KC', '6S', 'TC', 'JD', '9H', 'AH', '5D', 'JS', '5C'], ['AS', 'KS', 'QD', 'KH', '4H', 'JH', '4C', '7D', '6H', '5H', '8C'], ['2H', '9D', 'AD', '2C', 'QC', '6C', 'AC', 'JC', '8D', '8S', '7C', '4S', '3H']], False], [13, 6, 5, 2]], [[[['TH', '2H', '2D', '8H', '9D', 'KC', 'AD'], ['TD', 'QS', 'AS', '8S', '3C', 'QD', '4C', '4S', 'JD', 'TS', '2S', '7S', '6C', '3S', '8C', 'QC', '4H'], ['7C', 'AH', '2C', 'KD', '4D', 'AC', '5H', '6H', '6D', 'TC', '7H', 'JS', 'QH', '9C', '5D', '9H', '3H'], ['8D', '9S', '7D', '5S', 'JC', 'JH', '5C', 'KS', 'KH', '6S', '3D']], False], [3, 14, 7, 2]], [[[['7D', 'QH', 'AC', 'JC', '5H', '4C', '9S'], ['AH', 'JS', 'TC', '5D', 'TH', '9H', '8D', 'KC', '7S', '3S', '2S', '5S', '7C', 'TS', 'KD', '8C', '7H', 'AD', 'KH', '3H', '6C', '2D'], ['QD', '5C', '8S', 'QC', 'QS', '2C', '4S', 'TD', 'KS', '2H', '6D'], ['3C', 'AS', '4H', 'JD', '6S', '9D', '9C', '6H', '3D', 'JH', '4D', '8H']], False], [2, 6, 14, 4]], [[[['AH', '4H', 'QH', '2C', 'TS', 'QC', '9S', 'QS', '3D', '9H', 'KC', '5D', '3C', '6H', 'JH', '2H', '9C', '5S', 'JS'], ['TH', '7D', '6D', '3H', '6S', '7C', 'KS', '8C', '4C', '8S', '8H', 'AC', 'TD', '5H', 'KD', '9D', '2S', 'AS'], ['QD', '3S', '7S', 'JC', '8D', 'AD', 'JD'], ['TC', '7H', 'KH', '4D', '4S', '6C', '2D', '5C']], True], [20, 4, -10, 2]]], [[[[['4D', '7H', '5S', '8D', 'KH', '9C', 'AS', 'AD', 'JC', '2S', '4H'], ['AC', '5C', '2C', 'JD', '5H', 'KS', 'KD', '3D', '8H', 'TH', '3C', 'QC', 'QH', '4C', '7S'], ['TC', '9S', 'TS', '6D', '9H', 'QD', '7C', '6S', '5D'], ['JS', '6C', '2H', '7D', 'QS', 'JH', '4S', '9D', '3S', '6H', '3H', '8S', '8C', '2D', 'KC', 'TD', 'AH']], True], [3, -6, 1, 18]], [[[['3S', 'TC', '4H', 'AD', 'AH', 'KD', '7S', '2D', '5H', '6H', 'JD', '6D', 'KS'], ['7H', 'JH', 'TD', '8C', 'QD', '2C', '4D', 'KC', '5D', '9D', '7C', 'QS', '5S', 'KH', '8D', 'AC'], ['3D', '2S', '3H', '9S', '8H', '7D', 'TH', '8S', '6S', 'JC'], ['2H', '3C', '5C', '9H', 'QH', '4S', 'JS', '4C', 'QC', '9C', '6C', 'TS', 'AS']], False], [4, 16, 3, 3]], [[[['6C', '5D', '2H', 'JD', '7H', '6S', '6D', '3H', '8H', 'QC', '5H', 'TD', '5C'], ['3C', '4H', 'JH', '7S', 'KS', 'JS', 'AH', '8C', '8S'], ['9S', '6H', 'KC', '3D', 'KH', 'TH', '8D', 'QS', '2D', 'AD', '9C', 'AC', '2C', 'TS', 'KD', '9H', '4C', '5S'], ['AS', '9D', '2S', 'QD', '7D', 'TC', '7C', '4D', '4S', 'QH', '3S', 'JC']], False], [5, 3, 17, 1]], [[[['QD', 'JD', 'JH', 'QH', 'TH', 'KC', '7H', '4C', '3D', '4H', 'KH', '7S', 'TD', 'TC', 'QS', '8H', '6D', '6H', '9C', '9H', '5H', 'AH', '2H', '3H'], ['8C', '2S', '5S', '7D', 'JC', '6S', 'KD', 'AD', '9S', '3C', '2C'], ['8D', '8S', '5C', '9D', '3S', '5D', '4D', 'AS', '4S'], ['JS', 'AC', 'QC', 'TS', '6C', 'KS', '7C', '2D']], True], [-10, 26, 26, 26]], [[[['8C', '2D', '4S', '6C', '9C', '3S', 'JD', '5D', 'JC', 'AC', '2C'], ['8D', 'JH', 'KH', '3D', '6H', 'AH', '8S', 'TH', '9H', '5C', '8H', 'QS', 'QH', 'TD', '2H', '3H', '5H', '6D', '4C', '4H', '7H', 'KS', '2S', '6S'], ['TC', 'QC', '7D', '5S', 'TS', 'AD', 'KD', '7S', 'KC', '9D', '4D'], ['9S', 'QD', 'AS', 'JS', '3C', '7C']], True], [16, 0, 26, 26]], [[[['QH', 'TD', 'JD', '7C', 'QS', '4H', '8C', 'JS', '5S', 'AS', '3H', '3D', '2C', '2S', '6C', '5H', '5D', '7H'], ['TH', 'TS', 'AH', '8H', '8S', '5C', 'TC'], ['4S', '3C', '3S', '2H', 'KH', '7D', '6S', '9C', '6H', '9S', '6D', 'KS', 'JC', '4C'], ['QD', 'QC', 'AD', 'KC', '4D', '8D', '7S', '2D', 'JH', '9D', '9H', 'AC', 'KD']], False], [18, 3, 3, 2]], [[[['4C', 'JS', '8H', '9S', '6D', 'QC', '5D', 'KD', '3H', '2D', '3D', 'QD', '4H', '6S'], ['4D', '9H', 'TS', '7D', '3S', 'AC', '2S'], ['AH', '8S', 'KH', 'TC', '2H', '5C', 'JD', '7H', 'JH', 'TH', '8C', 'QS', '3C', '6C', '9D', '5H', 'JC', 'KS', '5S'], ['8D', '4S', '6H', '2C', '9C', '7C', 'KC', '7S', 'QH', 'AS', 'AD', 'TD']], False], [3, 1, 20, 2]], [[[['AH', '5S', 'QD', 'AD', 'JC', 'JD', 'AC', 'TD', '4H', 'TS', 'JS', '7S', 'TH', '4D', '2S', '6C'], ['AS', '7H', '9S', '7C', '9C', 'JH', 'KS', '6H', '5H', '8S', '6D'], ['TC', 'QS', '9H', '8C', '2H', 'KC', '3D', 'QC', '3S', 'KH', '7D', '5C', '8H'], ['KD', '4S', '5D', 'QH', '9D', '6S', '8D', '2D', '4C', '3H', '2C', '3C']], True], [-7, 4, 17, 2]]], [[[[['3C', 'TS', '2H', '7D', '9S', '9C', '7H', 'AS', 'KS', 'JH', 'KD', '4D', '6C', 'KH', '3H', '8H', '8C', '5H', '4H', 'QH', '6H', '9H', 'AH', 'TH', 'QS'], ['QC', '4C', '2D', 'AC', '4S', 'JD', '8D', '5C'], ['6D', '6S', '5S', '2C', '9D', '7S', 'QD', '8S', 'TD', 'KC', 'TC', 'JS', 'AD'], ['3D', '7C', 'JC', '5D', '3S', '2S']], True], [0, 16, 26, 26]], [[[['AD', 'KD', 'KH', 'TD', '7H', '8S', '6S', 'TS', 'AS', '7C'], ['2D', '6D', 'JC', 'JS', 'JH', '3C', '9C', '5D', '2S', 'AC', '8D', '9S', '3D', 'QC', '5H', 'QD'], ['4C', 'QS', 'TH', '9H', 'TC', '4D', '5S', '2H', '9D', '6H', '3S', 'KC'], ['AH', '5C', '6C', '7S', '2C', 'QH', '3H', '7D', 'KS', '4S', '4H', '8H', '8C', 'JD']], False], [2, 2, 17, 5]], [[[['7H', 'KH', '3D', 'TC', '6D', '6C', '2C', 'TS', '8S', '8D', 'JD', 'AH', '4H', 'TD', 'AC'], ['5D', '9S', '3S', 'QS', 'KS', '9C', '6H', '9D', 'QC', 'QH', '7D', 'AD', '3H', 'JC', 'TH', '5H', '3C', '4S', '7C'], ['JS', '2D', '4C', 'JH', 'QD', 'KC', 'KD', '2H', '6S'], ['8C', 'AS', '5C', '9H', '7S', '2S', '5S', '8H', '4D']], False], [4, 18, 2, 2]], [[[['TS', 'AS', 'KC', 'JS', 'QD', '8S', '4H', 'JC', '2H', '4S', '7S', '6D', 'JD', 'KD', '5D', 'TD', 'JH'], ['KS', '3D', '8C', '2D', '7D', '3C', '7C', '8H', 'AH', '4D', '9C', '5C', 'AC', '6C'], ['5H', '3H', '9H', '9S', '2S', 'KH', '2C'], ['TH', '8D', '4C', 'QC', 'QH', 'AD', 'TC', '5S', '7H', 'QS', '3S', '9D', '6H', '6S']], False], [3, 2, 4, 17]], [[[['9D', '9C', '7S', '5S', '8S', '2S', '4S', '2C', 'AS', '6C', '7C', 'JC', 'QC', '8C', 'KS'], ['JS', '2D', 'KD', 'QD', 'TD', 'KC', '4C'], ['JD', 'TS', '3S', '5C', '6D', 'AC', '4D'], ['5H', '9H', 'TH', 'KH', 'TC', '8D', '9S', '4H', '7H', '8H', '6S', 'JH', '6H', '5D', 'AD', '3D', 'QS', '3C', '7D', '2H', 'AH', '3H', 'QH']], True], [26, 26, 16, 0]], [[[['TH', '7C', '8S', '2S', '6C', '5C', '4H', '6S', '5H', '9D', '7S', '5S', '2H', 'TS', 'KS'], ['4C', 'QD', '3C', 'JD', '7H', '3S', 'TD', 'AH', '4D', '9H', 'JC', '6H', '4S'], ['JS', 'JH', 'QH', '9S', 'KD', 'QC', '6D'], ['AS', '3H', 'KH', '2C', 'AD', 'TC', '2D', 'AC', 'KC', 'QS', '9C', '7D', '8H', '3D', '8C', '5D', '8D']], False], [4, 4, 2, 16]], [[[['QS', 'TD', '7C', 'TH', '8C', 'AS', '2S', 'TC', '5C', '5D', 'KC'], ['6S', '4H', '5H', '2H', '9H', 'KD', '3S', 'QD', '8D', '3C', 'KS', 'KH'], ['JD', '7D', '4D', '5S', '8S', '9C', '6D', '3D', '4S', 'QC', '2C', '6C', '9D', 'JC', '4C', '7S'], ['JH', '9S', '7H', 'AC', 'QH', '8H', 'AD', '2D', 'TS', 'JS', '3H', '6H', 'AH']], True], [14, 5, -10, 7]], [[[['3H', '9H', 'TD', 'AC', '5C', '6D', '3C', '2H', 'JC'], ['KD', '9S', 'TC', '6C', 'AH', 'QH', '8C', '6S', 'JS', '3D', '4H', 'QS', 'QD'], ['2D', '4D', '4C', 'KC', '7S', '5S', '8S', 'KS', '7C', '5D', '6H', 'AD', '9D', '2S', '8H', '8D', '2C'], ['KH', 'AS', 'JD', 'QC', 'TH', '7H', 'TS', 'JH', '4S', '5H', '9C', '3S', '7D']], True], [3, 16, 2, -5]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("round score 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 |
|---|---|---|---|
| round score case 0 | [2, 0, -3, 17] | [2, 0, -3, 17] | Passed |
| round score case 1 | [4, 4, 17, 1] | [4, 4, 17, 1] | Passed |
| round score case 2 | [7, 1, 15, 3] | [7, 1, 15, 3] | Passed |
| round score case 3 | [26, 0, 16, 26] | [26, 0, 16, 26] | Passed |
| round score case 4 | [-10, 26, 26, 26] | [-10, 26, 26, 26] | Passed |
| round score case 5 | [6, 1, 4, 15] | [6, 1, 4, 15] | Passed |
| round score case 6 | [2, 3, 17, 4] | [2, 3, 17, 4] | Passed |
| round score case 7 | [-7, 17, 4, 2] | [-7, 17, 4, 2] | Passed |
SHA-256 / 7dd9ab317ed0089b2ac5b886a3b8947405785c9ba2d81e2dd6f895901b533740
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:21.485826+00:00.
Case digest / 52915c46bc2a991270867bebe8372d4a7856bdb10b8a6a30936e5d28018420fc