{"abstract":"With no qualifying low, evaluation fails dividing the low half among zero winners instead of scooping.","category":"Poker hand evaluation","checks":8,"contract":"Input: {\"pot\", \"high\": [winners], \"low\": [qualifying low winners, possibly empty], \"order\": [seat order from the button's left]}. With a qualifying low the pot is halved, the odd chip going to the high half; each half is split among its winners with odd chips by seat order. Without a low, high winners scoop. A player winning both halves is paid both. Return {player: chips} sorted.","evaluation_group":"w2-poker_hand_evaluation-hi-lo-pot-split","failed_approach":"A non-negative length test is always true and behaves the same way.","family":"w2-poker_hand_evaluation-hi-lo-pot-split-no-qualifying-low","id":"FA-82066","implementations":{"attempt":{"sha256":"366ee68943a2b933df948b2157abb158752e6f556dbe9aa5351ea4d2653ba846","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    pot=x['pot']; order=x['order']\n    def split(amount, winners):\n        k=len(winners); share=amount//k; rem=amount-share*k\n        out={w:share for w in winners}\n        for w in [s for s in order if s in winners][:rem]:\n            out[w]+=1\n        return out\n    if len(x['low'])>=0:\n        low_half=pot//2; high_half=pot-low_half\n        parts=[split(high_half,x['high']), split(low_half,x['low'])]\n    else:\n        parts=[split(pot,x['high'])]\n    res={}\n    for part in parts:\n        for k,v in part.items():\n            res[k]=res.get(k,0)+v\n    return dict(sorted(res.items()))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},\n   {'a': 51, 'b': 50}),\n  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),\n  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),\n  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},\n   {'a': 50, 'b': 25, 'c': 25}),\n  ('high and shared low with scooper',\n   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),\n  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},\n   {'b': 40, 'c': 40}),\n  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},\n   {'a': 25, 'b': 26}),\n  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},\n   {'a': 3, 'c': 4})],\n [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},\n   {'a': 51, 'b': 50}),\n  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),\n  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),\n  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},\n   {'a': 50, 'b': 25, 'c': 25}),\n  ('high and shared low with scooper',\n   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),\n  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},\n   {'b': 40, 'c': 40}),\n  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},\n   {'a': 25, 'b': 26}),\n  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},\n   {'a': 3, 'c': 4})],\n [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},\n   {'a': 51, 'b': 50}),\n  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),\n  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),\n  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},\n   {'a': 50, 'b': 25, 'c': 25}),\n  ('high and shared low with scooper',\n   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),\n  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},\n   {'b': 40, 'c': 40}),\n  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},\n   {'a': 25, 'b': 26}),\n  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},\n   {'a': 3, 'c': 4})],\n [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},\n   {'a': 51, 'b': 50}),\n  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),\n  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),\n  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},\n   {'a': 50, 'b': 25, 'c': 25}),\n  ('high and shared low with scooper',\n   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),\n  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},\n   {'b': 40, 'c': 40}),\n  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},\n   {'a': 25, 'b': 26}),\n  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},\n   {'a': 3, 'c': 4})],\n [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},\n   {'a': 51, 'b': 50}),\n  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),\n  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),\n  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},\n   {'a': 50, 'b': 25, 'c': 25}),\n  ('high and shared low with scooper',\n   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),\n  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},\n   {'b': 40, 'c': 40}),\n  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},\n   {'a': 25, 'b': 26}),\n  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},\n   {'a': 3, 'c': 4})]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'error:' + type(exc).__name__\n    check(label, actual, 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":"aa43083693d183cab8a04b62274d7507d8af3bb18ffd4168d83842e5f04e3b1e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    pot=x['pot']; order=x['order']\n    def split(amount, winners):\n        k=len(winners); share=amount//k; rem=amount-share*k\n        out={w:share for w in winners}\n        for w in [s for s in order if s in winners][:rem]:\n            out[w]+=1\n        return out\n    if x['low'] is not None:\n        low_half=pot//2; high_half=pot-low_half\n        parts=[split(high_half,x['high']), split(low_half,x['low'])]\n    else:\n        parts=[split(pot,x['high'])]\n    res={}\n    for part in parts:\n        for k,v in part.items():\n            res[k]=res.get(k,0)+v\n    return dict(sorted(res.items()))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},\n   {'a': 51, 'b': 50}),\n  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),\n  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),\n  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},\n   {'a': 50, 'b': 25, 'c': 25}),\n  ('high and shared low with scooper',\n   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),\n  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},\n   {'b': 40, 'c': 40}),\n  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},\n   {'a': 25, 'b': 26}),\n  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},\n   {'a': 3, 'c': 4})],\n [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},\n   {'a': 51, 'b': 50}),\n  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),\n  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),\n  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},\n   {'a': 50, 'b': 25, 'c': 25}),\n  ('high and shared low with scooper',\n   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),\n  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},\n   {'b': 40, 'c': 40}),\n  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},\n   {'a': 25, 'b': 26}),\n  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},\n   {'a': 3, 'c': 4})],\n [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},\n   {'a': 51, 'b': 50}),\n  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),\n  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),\n  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},\n   {'a': 50, 'b': 25, 'c': 25}),\n  ('high and shared low with scooper',\n   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),\n  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},\n   {'b': 40, 'c': 40}),\n  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},\n   {'a': 25, 'b': 26}),\n  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},\n   {'a': 3, 'c': 4})],\n [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},\n   {'a': 51, 'b': 50}),\n  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),\n  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),\n  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},\n   {'a': 50, 'b': 25, 'c': 25}),\n  ('high and shared low with scooper',\n   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),\n  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},\n   {'b': 40, 'c': 40}),\n  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},\n   {'a': 25, 'b': 26}),\n  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},\n   {'a': 3, 'c': 4})],\n [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},\n   {'a': 51, 'b': 50}),\n  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),\n  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),\n  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},\n   {'a': 50, 'b': 25, 'c': 25}),\n  ('high and shared low with scooper',\n   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),\n  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},\n   {'b': 40, 'c': 40}),\n  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},\n   {'a': 25, 'b': 26}),\n  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},\n   {'a': 3, 'c': 4})]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'error:' + type(exc).__name__\n    check(label, actual, 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"},"fixed":{"sha256":"97cc244f7b5decd7f2ef226153619642926b0770672ef12b9fcd9f49f39393a6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    pot=x['pot']; order=x['order']\n    def split(amount, winners):\n        k=len(winners); share=amount//k; rem=amount-share*k\n        out={w:share for w in winners}\n        for w in [s for s in order if s in winners][:rem]:\n            out[w]+=1\n        return out\n    if x['low']:\n        low_half=pot//2; high_half=pot-low_half\n        parts=[split(high_half,x['high']), split(low_half,x['low'])]\n    else:\n        parts=[split(pot,x['high'])]\n    res={}\n    for part in parts:\n        for k,v in part.items():\n            res[k]=res.get(k,0)+v\n    return dict(sorted(res.items()))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},\n   {'a': 51, 'b': 50}),\n  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),\n  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),\n  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},\n   {'a': 50, 'b': 25, 'c': 25}),\n  ('high and shared low with scooper',\n   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),\n  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},\n   {'b': 40, 'c': 40}),\n  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},\n   {'a': 25, 'b': 26}),\n  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},\n   {'a': 3, 'c': 4})],\n [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},\n   {'a': 51, 'b': 50}),\n  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),\n  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),\n  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},\n   {'a': 50, 'b': 25, 'c': 25}),\n  ('high and shared low with scooper',\n   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),\n  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},\n   {'b': 40, 'c': 40}),\n  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},\n   {'a': 25, 'b': 26}),\n  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},\n   {'a': 3, 'c': 4})],\n [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},\n   {'a': 51, 'b': 50}),\n  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),\n  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),\n  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},\n   {'a': 50, 'b': 25, 'c': 25}),\n  ('high and shared low with scooper',\n   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),\n  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},\n   {'b': 40, 'c': 40}),\n  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},\n   {'a': 25, 'b': 26}),\n  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},\n   {'a': 3, 'c': 4})],\n [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},\n   {'a': 51, 'b': 50}),\n  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),\n  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),\n  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},\n   {'a': 50, 'b': 25, 'c': 25}),\n  ('high and shared low with scooper',\n   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),\n  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},\n   {'b': 40, 'c': 40}),\n  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},\n   {'a': 25, 'b': 26}),\n  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},\n   {'a': 3, 'c': 4})],\n [('odd pot two winners', {'high': ['a'], 'low': ['b'], 'order': ['a', 'b', 'c'], 'pot': 101},\n   {'a': 51, 'b': 50}),\n  ('no low scoop', {'high': ['a'], 'low': [], 'order': ['a', 'b'], 'pot': 100}, {'a': 100}),\n  ('scoop both halves', {'high': ['a'], 'low': ['a'], 'order': ['a', 'b'], 'pot': 101}, {'a': 101}),\n  ('quartered low', {'high': ['a'], 'low': ['b', 'c'], 'order': ['a', 'b', 'c'], 'pot': 100},\n   {'a': 50, 'b': 25, 'c': 25}),\n  ('high and shared low with scooper',\n   {'high': ['c'], 'low': ['c', 'b'], 'order': ['a', 'b', 'c'], 'pot': 90}, {'b': 23, 'c': 67}),\n  ('even pot', {'high': ['b'], 'low': ['c'], 'order': ['a', 'b', 'c'], 'pot': 80},\n   {'b': 40, 'c': 40}),\n  ('odd pot no low split high', {'high': ['b', 'a'], 'low': [], 'order': ['b', 'a'], 'pot': 51},\n   {'a': 25, 'b': 26}),\n  ('small odd pot', {'high': ['c'], 'low': ['a'], 'order': ['a', 'b', 'c'], 'pot': 7},\n   {'a': 3, 'c': 4})]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'error:' + type(exc).__name__\n    check(label, actual, 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 deterministic toy model with an explicitly stated contract; no claim of conformance to any casino or tournament rulebook. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-poker_hand_evaluation-hi-lo-pot-split-no-qualifying-low","generated_at":"2026-09-29T14:50:08.831807+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Hi-lo games halve and quarter pots; the odd chip and scoop rules are frequent disputes.","repair":"Split only when at least one low winner exists; otherwise the high winners scoop.","root_cause":"The branch tests for presence of the low list rather than for any low winner, so an empty list still splits.","sha256":"3fc1911be44fe4ecab35061780426aa3d315e4731a884e53781a5e899a7af997","title":"Empty low side still takes half the pot · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.563,"exit_code":1,"observations":[{"actual":{"a":51,"b":50},"check":"odd pot two winners","expected":{"a":51,"b":50},"passed":true},{"actual":"error:ZeroDivisionError","check":"no low scoop","expected":{"a":100},"passed":false},{"actual":{"a":101},"check":"scoop both halves","expected":{"a":101},"passed":true},{"actual":{"a":50,"b":25,"c":25},"check":"quartered low","expected":{"a":50,"b":25,"c":25},"passed":true},{"actual":{"b":23,"c":67},"check":"high and shared low with scooper","expected":{"b":23,"c":67},"passed":true},{"actual":{"b":40,"c":40},"check":"even pot","expected":{"b":40,"c":40},"passed":true},{"actual":"error:ZeroDivisionError","check":"odd pot no low split high","expected":{"a":25,"b":26},"passed":false},{"actual":{"a":3,"c":4},"check":"small odd pot","expected":{"a":3,"c":4},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"odd pot two winners\", \"actual\": {\"a\": 51, \"b\": 50}, \"expected\": {\"a\": 51, \"b\": 50}, \"passed\": true}, {\"check\": \"no low scoop\", \"actual\": \"error:ZeroDivisionError\", \"expected\": {\"a\": 100}, \"passed\": false}, {\"check\": \"scoop both halves\", \"actual\": {\"a\": 101}, \"expected\": {\"a\": 101}, \"passed\": true}, {\"check\": \"quartered low\", \"actual\": {\"a\": 50, \"b\": 25, \"c\": 25}, \"expected\": {\"a\": 50, \"b\": 25, \"c\": 25}, \"passed\": true}, {\"check\": \"high and shared low with scooper\", \"actual\": {\"b\": 23, \"c\": 67}, \"expected\": {\"b\": 23, \"c\": 67}, \"passed\": true}, {\"check\": \"even pot\", \"actual\": {\"b\": 40, \"c\": 40}, \"expected\": {\"b\": 40, \"c\": 40}, \"passed\": true}, {\"check\": \"odd pot no low split high\", \"actual\": \"error:ZeroDivisionError\", \"expected\": {\"a\": 25, \"b\": 26}, \"passed\": false}, {\"check\": \"small odd pot\", \"actual\": {\"a\": 3, \"c\": 4}, \"expected\": {\"a\": 3, \"c\": 4}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.098,"exit_code":1,"observations":[{"actual":{"a":51,"b":50},"check":"odd pot two winners","expected":{"a":51,"b":50},"passed":true},{"actual":"error:ZeroDivisionError","check":"no low scoop","expected":{"a":100},"passed":false},{"actual":{"a":101},"check":"scoop both halves","expected":{"a":101},"passed":true},{"actual":{"a":50,"b":25,"c":25},"check":"quartered low","expected":{"a":50,"b":25,"c":25},"passed":true},{"actual":{"b":23,"c":67},"check":"high and shared low with scooper","expected":{"b":23,"c":67},"passed":true},{"actual":{"b":40,"c":40},"check":"even pot","expected":{"b":40,"c":40},"passed":true},{"actual":"error:ZeroDivisionError","check":"odd pot no low split high","expected":{"a":25,"b":26},"passed":false},{"actual":{"a":3,"c":4},"check":"small odd pot","expected":{"a":3,"c":4},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"odd pot two winners\", \"actual\": {\"a\": 51, \"b\": 50}, \"expected\": {\"a\": 51, \"b\": 50}, \"passed\": true}, {\"check\": \"no low scoop\", \"actual\": \"error:ZeroDivisionError\", \"expected\": {\"a\": 100}, \"passed\": false}, {\"check\": \"scoop both halves\", \"actual\": {\"a\": 101}, \"expected\": {\"a\": 101}, \"passed\": true}, {\"check\": \"quartered low\", \"actual\": {\"a\": 50, \"b\": 25, \"c\": 25}, \"expected\": {\"a\": 50, \"b\": 25, \"c\": 25}, \"passed\": true}, {\"check\": \"high and shared low with scooper\", \"actual\": {\"b\": 23, \"c\": 67}, \"expected\": {\"b\": 23, \"c\": 67}, \"passed\": true}, {\"check\": \"even pot\", \"actual\": {\"b\": 40, \"c\": 40}, \"expected\": {\"b\": 40, \"c\": 40}, \"passed\": true}, {\"check\": \"odd pot no low split high\", \"actual\": \"error:ZeroDivisionError\", \"expected\": {\"a\": 25, \"b\": 26}, \"passed\": false}, {\"check\": \"small odd pot\", \"actual\": {\"a\": 3, \"c\": 4}, \"expected\": {\"a\": 3, \"c\": 4}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.826,"exit_code":0,"observations":[{"actual":{"a":51,"b":50},"check":"odd pot two winners","expected":{"a":51,"b":50},"passed":true},{"actual":{"a":100},"check":"no low scoop","expected":{"a":100},"passed":true},{"actual":{"a":101},"check":"scoop both halves","expected":{"a":101},"passed":true},{"actual":{"a":50,"b":25,"c":25},"check":"quartered low","expected":{"a":50,"b":25,"c":25},"passed":true},{"actual":{"b":23,"c":67},"check":"high and shared low with scooper","expected":{"b":23,"c":67},"passed":true},{"actual":{"b":40,"c":40},"check":"even pot","expected":{"b":40,"c":40},"passed":true},{"actual":{"a":25,"b":26},"check":"odd pot no low split high","expected":{"a":25,"b":26},"passed":true},{"actual":{"a":3,"c":4},"check":"small odd pot","expected":{"a":3,"c":4},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"odd pot two winners\", \"actual\": {\"a\": 51, \"b\": 50}, \"expected\": {\"a\": 51, \"b\": 50}, \"passed\": true}, {\"check\": \"no low scoop\", \"actual\": {\"a\": 100}, \"expected\": {\"a\": 100}, \"passed\": true}, {\"check\": \"scoop both halves\", \"actual\": {\"a\": 101}, \"expected\": {\"a\": 101}, \"passed\": true}, {\"check\": \"quartered low\", \"actual\": {\"a\": 50, \"b\": 25, \"c\": 25}, \"expected\": {\"a\": 50, \"b\": 25, \"c\": 25}, \"passed\": true}, {\"check\": \"high and shared low with scooper\", \"actual\": {\"b\": 23, \"c\": 67}, \"expected\": {\"b\": 23, \"c\": 67}, \"passed\": true}, {\"check\": \"even pot\", \"actual\": {\"b\": 40, \"c\": 40}, \"expected\": {\"b\": 40, \"c\": 40}, \"passed\": true}, {\"check\": \"odd pot no low split high\", \"actual\": {\"a\": 25, \"b\": 26}, \"expected\": {\"a\": 25, \"b\": 26}, \"passed\": true}, {\"check\": \"small odd pot\", \"actual\": {\"a\": 3, \"c\": 4}, \"expected\": {\"a\": 3, \"c\": 4}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}