{"abstract":"Two copies of the nine of clubs plus another nine form a \"set\".","category":"Card game rule engines","checks":8,"contract":"Input a list of cards. A set is 3-4 cards of one rank in distinct suits. A run is 3+ consecutive cards of one suit; ace is low (A-2-3) or high (Q-K-A) but runs do not wrap (K-A-2). Return \"set\", \"run\" or \"invalid\".","contract_signature":"x","evaluation_group":"w2-card-game-rule-engines-rummy-meld","failed_approach":"Tolerating one repeated suit still accepts duplicated cards.","family":"w2-card-game-rule-engines-rummy-meld-set-suit-distinctness","id":"FA-83461","implementations":{"attempt":{"sha256":"d84fc7e0913a2e21447c2348c1b4b6341bbaa3cfae975dc94e770f50f6727d56","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    cards = x\n    order = 'A23456789TJQK'\n    if len(cards) < 3:\n        return 'invalid'\n    ranks = [c[0] for c in cards]\n    suits = [c[1] for c in cards]\n    if len(set(ranks)) == 1:\n        if len(cards) <= 4 and len(set(suits)) >= len(cards) - 1:\n            return 'set'\n        return 'invalid'\n    if len(set(suits)) != 1:\n        return 'invalid'\n    idx = sorted(order.index(r) for r in ranks)\n    if all(idx[i + 1] == idx[i] + 1 for i in range(len(idx) - 1)):\n        return 'run'\n    if idx[0] == 0:\n        high = sorted(idx[1:] + [13])\n        if all(high[i + 1] == high[i] + 1 for i in range(len(high) - 1)):\n            return 'run'\n    return 'invalid'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[['9H', '9C', '9D', '9D'], 'invalid'], [['4D', '5D', '3D', '6D'], 'run'], [['KD', '6S', 'QS', '6H'], 'invalid'], [['8H', '8S'], 'invalid'], [['JD', 'QD', '2D', 'KD', 'AD'], 'invalid'], [['8H', '6D', 'AH'], 'invalid'], [['4S', '4H', '4D'], 'set'], [['JH', 'JH', 'JC'], 'invalid']], [[['9C', 'JC', 'QC', 'TC'], 'run'], [['7S', '4D', 'JC'], 'invalid'], [['KH', 'QH', 'JH'], 'run'], [['5D', '5S'], 'invalid'], [['KD', 'TD', 'AD', 'JD', 'QD'], 'run'], [['KH', 'KD', 'KC', 'KC', 'KS'], 'invalid'], [['2H', '2H', '2S'], 'invalid'], [['JC', 'JH', 'JH'], 'invalid']], [[['JH', '9H', 'TH'], 'run'], [['TH', 'KH', 'QH', 'JH'], 'run'], [['6C', '2C', '8D', '8C'], 'invalid'], [['5H', '2H', '3H', '6H', '4H'], 'run'], [['4H', '4S', '4C', '4D'], 'set'], [['3D', '3H', '3C'], 'set'], [['JH', 'JH', 'JC'], 'invalid'], [['9C', '9H', '9D', '9C'], 'invalid']], [[['AD', 'AH', 'AD'], 'invalid'], [['QC', 'QS', 'QD', 'QD'], 'invalid'], [['9S', 'JS', 'QS', '8S', 'TS'], 'run'], [['KS', '4S', '8D', '3C'], 'invalid'], [['9C', 'JC', 'TC', '8C'], 'run'], [['AH', '2H', '3H'], 'run'], [['6H', '6S', '6H'], 'invalid'], [['4C', '4H', '4C', '4D'], 'invalid']], [[['9C', '3S', '3H'], 'invalid'], [['9H', 'JH', 'QC', '2D'], 'invalid'], [['5S', 'AH'], 'invalid'], [['TH', 'JH', 'KH', 'QH'], 'run'], [['QC', '6D'], 'invalid'], [['9D', '7D', '3S', '9S'], 'invalid'], [['4C', '4H', '4C', '4D'], 'invalid'], [['2S', '2S', '2H'], 'invalid']]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"meld case %d\" % i, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"65553c6350ac2761ec12e6e070feee26082768a2ce3acfec5e9df025ef91eeab","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    cards = x\n    order = 'A23456789TJQK'\n    if len(cards) < 3:\n        return 'invalid'\n    ranks = [c[0] for c in cards]\n    suits = [c[1] for c in cards]\n    if len(set(ranks)) == 1:\n        if len(cards) <= 4:\n            return 'set'\n        return 'invalid'\n    if len(set(suits)) != 1:\n        return 'invalid'\n    idx = sorted(order.index(r) for r in ranks)\n    if all(idx[i + 1] == idx[i] + 1 for i in range(len(idx) - 1)):\n        return 'run'\n    if idx[0] == 0:\n        high = sorted(idx[1:] + [13])\n        if all(high[i + 1] == high[i] + 1 for i in range(len(high) - 1)):\n            return 'run'\n    return 'invalid'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[['9H', '9C', '9D', '9D'], 'invalid'], [['4D', '5D', '3D', '6D'], 'run'], [['KD', '6S', 'QS', '6H'], 'invalid'], [['8H', '8S'], 'invalid'], [['JD', 'QD', '2D', 'KD', 'AD'], 'invalid'], [['8H', '6D', 'AH'], 'invalid'], [['4S', '4H', '4D'], 'set'], [['JH', 'JH', 'JC'], 'invalid']], [[['9C', 'JC', 'QC', 'TC'], 'run'], [['7S', '4D', 'JC'], 'invalid'], [['KH', 'QH', 'JH'], 'run'], [['5D', '5S'], 'invalid'], [['KD', 'TD', 'AD', 'JD', 'QD'], 'run'], [['KH', 'KD', 'KC', 'KC', 'KS'], 'invalid'], [['2H', '2H', '2S'], 'invalid'], [['JC', 'JH', 'JH'], 'invalid']], [[['JH', '9H', 'TH'], 'run'], [['TH', 'KH', 'QH', 'JH'], 'run'], [['6C', '2C', '8D', '8C'], 'invalid'], [['5H', '2H', '3H', '6H', '4H'], 'run'], [['4H', '4S', '4C', '4D'], 'set'], [['3D', '3H', '3C'], 'set'], [['JH', 'JH', 'JC'], 'invalid'], [['9C', '9H', '9D', '9C'], 'invalid']], [[['AD', 'AH', 'AD'], 'invalid'], [['QC', 'QS', 'QD', 'QD'], 'invalid'], [['9S', 'JS', 'QS', '8S', 'TS'], 'run'], [['KS', '4S', '8D', '3C'], 'invalid'], [['9C', 'JC', 'TC', '8C'], 'run'], [['AH', '2H', '3H'], 'run'], [['6H', '6S', '6H'], 'invalid'], [['4C', '4H', '4C', '4D'], 'invalid']], [[['9C', '3S', '3H'], 'invalid'], [['9H', 'JH', 'QC', '2D'], 'invalid'], [['5S', 'AH'], 'invalid'], [['TH', 'JH', 'KH', 'QH'], 'run'], [['QC', '6D'], 'invalid'], [['9D', '7D', '3S', '9S'], 'invalid'], [['4C', '4H', '4C', '4D'], 'invalid'], [['2S', '2S', '2H'], 'invalid']]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"meld case %d\" % i, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-card-game-rule-engines-rummy-meld-set-suit-distinctness","generated_at":"2026-09-29T14:50:21.912015+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Card-game engines, scoring apps and online tables apply this rule automatically on every hand.","root_cause":"The set test only checks the rank and size.","sha256":"a22981a62e80ab1de5f5fdb5c915572f2519396044683898985cd9bb5cb34f87","title":"Sets with a repeated suit are accepted · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":37.824,"exit_code":1,"observations":[{"actual":"set","check":"meld case 0","expected":"invalid","passed":false},{"actual":"run","check":"meld case 1","expected":"run","passed":true},{"actual":"invalid","check":"meld case 2","expected":"invalid","passed":true},{"actual":"invalid","check":"meld case 3","expected":"invalid","passed":true},{"actual":"invalid","check":"meld case 4","expected":"invalid","passed":true},{"actual":"invalid","check":"meld case 5","expected":"invalid","passed":true},{"actual":"set","check":"meld case 6","expected":"set","passed":true},{"actual":"set","check":"meld case 7","expected":"invalid","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"meld case 0\", \"actual\": \"set\", \"expected\": \"invalid\", \"passed\": false}, {\"check\": \"meld case 1\", \"actual\": \"run\", \"expected\": \"run\", \"passed\": true}, {\"check\": \"meld case 2\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 3\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 4\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 5\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 6\", \"actual\": \"set\", \"expected\": \"set\", \"passed\": true}, {\"check\": \"meld case 7\", \"actual\": \"set\", \"expected\": \"invalid\", \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.122,"exit_code":1,"observations":[{"actual":"set","check":"meld case 0","expected":"invalid","passed":false},{"actual":"run","check":"meld case 1","expected":"run","passed":true},{"actual":"invalid","check":"meld case 2","expected":"invalid","passed":true},{"actual":"invalid","check":"meld case 3","expected":"invalid","passed":true},{"actual":"invalid","check":"meld case 4","expected":"invalid","passed":true},{"actual":"invalid","check":"meld case 5","expected":"invalid","passed":true},{"actual":"set","check":"meld case 6","expected":"set","passed":true},{"actual":"set","check":"meld case 7","expected":"invalid","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"meld case 0\", \"actual\": \"set\", \"expected\": \"invalid\", \"passed\": false}, {\"check\": \"meld case 1\", \"actual\": \"run\", \"expected\": \"run\", \"passed\": true}, {\"check\": \"meld case 2\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 3\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 4\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 5\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 6\", \"actual\": \"set\", \"expected\": \"set\", \"passed\": true}, {\"check\": \"meld case 7\", \"actual\": \"set\", \"expected\": \"invalid\", \"passed\": false}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}