{"abstract":"Winners receive more chips than the pot holds when the pot is not evenly divisible.","category":"Poker hand evaluation","checks":8,"contract":"Input: {\"pot\", \"winners\", \"seats\" (clockwise), \"button\", \"unit\" (smallest chip in play; pot is a multiple of it)}. Split the pot equally in whole units; each leftover unit goes to one winner, starting with the first winner clockwise from the button (the button itself is last). Return {winner: amount} sorted by name.","evaluation_group":"w2-poker_hand_evaluation-odd-chip-award","failed_approach":"Leaving the share in units without multiplying pays a fraction of the pot.","family":"w2-poker_hand_evaluation-odd-chip-award-unit-scaling-of-shares","id":"FA-82036","implementations":{"attempt":{"sha256":"41fefa76ca07b567c724dc9351a61c59af67a9666f248ec4528ecff4f79ecfb1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    pot=x['pot']; unit=x['unit']; winners=x['winners']; seats=x['seats']\n    k=len(winners)\n    units=pot//unit\n    share=units//k\n    rem=units-share*k\n    out={w:share for w in winners}\n    start=(seats.index(x['button'])+1)%len(seats)\n    order=seats[start:]+seats[:start]\n    for w in [s for s in order if s in winners][:rem]:\n        out[w]+=unit\n    return dict(sorted(out.items()))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('three-way odd units',\n   {'button': 'c',\n    'pot': 110,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 5,\n    'winners': ['b', 'd', 'e']},\n   {'b': 35, 'd': 40, 'e': 35}),\n  ('two-way one unit',\n   {'button': 'b', 'pot': 25, 'seats': ['a', 'b', 'c', 'd'], 'unit': 5, 'winners': ['a', 'c']},\n   {'a': 10, 'c': 15}),\n  ('button is a winner',\n   {'button': 'd', 'pot': 7, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'd']},\n   {'a': 4, 'd': 3}),\n  ('even split',\n   {'button': 'c', 'pot': 100, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['a', 'b']},\n   {'a': 50, 'b': 50}),\n  ('wrap past last seat',\n   {'button': 'd',\n    'pot': 11,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 1,\n    'winners': ['a', 'e', 'b']},\n   {'a': 4, 'b': 3, 'e': 4}),\n  ('four-way three odd',\n   {'button': 'b',\n    'pot': 19,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 1,\n    'winners': ['a', 'b', 'c', 'd']},\n   {'a': 5, 'b': 4, 'c': 5, 'd': 5}),\n  ('button left winner',\n   {'button': 'a', 'pot': 5, 'seats': ['a', 'b', 'c'], 'unit': 1, 'winners': ['b', 'c']},\n   {'b': 3, 'c': 2}),\n  ('winner right of button',\n   {'button': 'b', 'pot': 5, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'c']},\n   {'a': 2, 'c': 3})],\n [('three-way odd units',\n   {'button': 'c',\n    'pot': 110,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 5,\n    'winners': ['b', 'd', 'e']},\n   {'b': 35, 'd': 40, 'e': 35}),\n  ('two-way one unit',\n   {'button': 'b', 'pot': 25, 'seats': ['a', 'b', 'c', 'd'], 'unit': 5, 'winners': ['a', 'c']},\n   {'a': 10, 'c': 15}),\n  ('button is a winner',\n   {'button': 'd', 'pot': 7, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'd']},\n   {'a': 4, 'd': 3}),\n  ('even split',\n   {'button': 'c', 'pot': 100, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['a', 'b']},\n   {'a': 50, 'b': 50}),\n  ('single winner',\n   {'button': 'a', 'pot': 35, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['c']}, {'c': 35}),\n  ('large unit',\n   {'button': 'a',\n    'pot': 300,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 100,\n    'winners': ['f', 'a']},\n   {'a': 100, 'f': 200}),\n  ('button left winner',\n   {'button': 'a', 'pot': 5, 'seats': ['a', 'b', 'c'], 'unit': 1, 'winners': ['b', 'c']},\n   {'b': 3, 'c': 2}),\n  ('winner right of button',\n   {'button': 'b', 'pot': 5, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'c']},\n   {'a': 2, 'c': 3})],\n [('three-way odd units',\n   {'button': 'c',\n    'pot': 110,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 5,\n    'winners': ['b', 'd', 'e']},\n   {'b': 35, 'd': 40, 'e': 35}),\n  ('two-way one unit',\n   {'button': 'b', 'pot': 25, 'seats': ['a', 'b', 'c', 'd'], 'unit': 5, 'winners': ['a', 'c']},\n   {'a': 10, 'c': 15}),\n  ('button is a winner',\n   {'button': 'd', 'pot': 7, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'd']},\n   {'a': 4, 'd': 3}),\n  ('even split',\n   {'button': 'c', 'pot': 100, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['a', 'b']},\n   {'a': 50, 'b': 50}),\n  ('single winner',\n   {'button': 'a', 'pot': 35, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['c']}, {'c': 35}),\n  ('wrap past last seat',\n   {'button': 'd',\n    'pot': 11,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 1,\n    'winners': ['a', 'e', 'b']},\n   {'a': 4, 'b': 3, 'e': 4}),\n  ('four-way three odd',\n   {'button': 'b',\n    'pot': 19,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 1,\n    'winners': ['a', 'b', 'c', 'd']},\n   {'a': 5, 'b': 4, 'c': 5, 'd': 5}),\n  ('large unit',\n   {'button': 'a',\n    'pot': 300,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 100,\n    'winners': ['f', 'a']},\n   {'a': 100, 'f': 200})],\n [('three-way odd units',\n   {'button': 'c',\n    'pot': 110,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 5,\n    'winners': ['b', 'd', 'e']},\n   {'b': 35, 'd': 40, 'e': 35}),\n  ('two-way one unit',\n   {'button': 'b', 'pot': 25, 'seats': ['a', 'b', 'c', 'd'], 'unit': 5, 'winners': ['a', 'c']},\n   {'a': 10, 'c': 15}),\n  ('button is a winner',\n   {'button': 'd', 'pot': 7, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'd']},\n   {'a': 4, 'd': 3}),\n  ('single winner',\n   {'button': 'a', 'pot': 35, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['c']}, {'c': 35}),\n  ('wrap past last seat',\n   {'button': 'd',\n    'pot': 11,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 1,\n    'winners': ['a', 'e', 'b']},\n   {'a': 4, 'b': 3, 'e': 4}),\n  ('four-way three odd',\n   {'button': 'b',\n    'pot': 19,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 1,\n    'winners': ['a', 'b', 'c', 'd']},\n   {'a': 5, 'b': 4, 'c': 5, 'd': 5}),\n  ('large unit',\n   {'button': 'a',\n    'pot': 300,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 100,\n    'winners': ['f', 'a']},\n   {'a': 100, 'f': 200}),\n  ('button left winner',\n   {'button': 'a', 'pot': 5, 'seats': ['a', 'b', 'c'], 'unit': 1, 'winners': ['b', 'c']},\n   {'b': 3, 'c': 2})],\n [('three-way odd units',\n   {'button': 'c',\n    'pot': 110,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 5,\n    'winners': ['b', 'd', 'e']},\n   {'b': 35, 'd': 40, 'e': 35}),\n  ('two-way one unit',\n   {'button': 'b', 'pot': 25, 'seats': ['a', 'b', 'c', 'd'], 'unit': 5, 'winners': ['a', 'c']},\n   {'a': 10, 'c': 15}),\n  ('even split',\n   {'button': 'c', 'pot': 100, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['a', 'b']},\n   {'a': 50, 'b': 50}),\n  ('single winner',\n   {'button': 'a', 'pot': 35, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['c']}, {'c': 35}),\n  ('four-way three odd',\n   {'button': 'b',\n    'pot': 19,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 1,\n    'winners': ['a', 'b', 'c', 'd']},\n   {'a': 5, 'b': 4, 'c': 5, 'd': 5}),\n  ('large unit',\n   {'button': 'a',\n    'pot': 300,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 100,\n    'winners': ['f', 'a']},\n   {'a': 100, 'f': 200}),\n  ('button left winner',\n   {'button': 'a', 'pot': 5, 'seats': ['a', 'b', 'c'], 'unit': 1, 'winners': ['b', 'c']},\n   {'b': 3, 'c': 2}),\n  ('winner right of button',\n   {'button': 'b', 'pot': 5, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'c']},\n   {'a': 2, 'c': 3})]]\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":"0161f6c19c9cb1afd05a208003555a71c8880cb3cb48e89e5884e3f8a17be27d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    pot=x['pot']; unit=x['unit']; winners=x['winners']; seats=x['seats']\n    k=len(winners)\n    units=pot//unit\n    share=units//k\n    rem=units-share*k\n    out={w:pot//k for w in winners}\n    start=(seats.index(x['button'])+1)%len(seats)\n    order=seats[start:]+seats[:start]\n    for w in [s for s in order if s in winners][:rem]:\n        out[w]+=unit\n    return dict(sorted(out.items()))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('three-way odd units',\n   {'button': 'c',\n    'pot': 110,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 5,\n    'winners': ['b', 'd', 'e']},\n   {'b': 35, 'd': 40, 'e': 35}),\n  ('two-way one unit',\n   {'button': 'b', 'pot': 25, 'seats': ['a', 'b', 'c', 'd'], 'unit': 5, 'winners': ['a', 'c']},\n   {'a': 10, 'c': 15}),\n  ('button is a winner',\n   {'button': 'd', 'pot': 7, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'd']},\n   {'a': 4, 'd': 3}),\n  ('even split',\n   {'button': 'c', 'pot': 100, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['a', 'b']},\n   {'a': 50, 'b': 50}),\n  ('wrap past last seat',\n   {'button': 'd',\n    'pot': 11,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 1,\n    'winners': ['a', 'e', 'b']},\n   {'a': 4, 'b': 3, 'e': 4}),\n  ('four-way three odd',\n   {'button': 'b',\n    'pot': 19,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 1,\n    'winners': ['a', 'b', 'c', 'd']},\n   {'a': 5, 'b': 4, 'c': 5, 'd': 5}),\n  ('button left winner',\n   {'button': 'a', 'pot': 5, 'seats': ['a', 'b', 'c'], 'unit': 1, 'winners': ['b', 'c']},\n   {'b': 3, 'c': 2}),\n  ('winner right of button',\n   {'button': 'b', 'pot': 5, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'c']},\n   {'a': 2, 'c': 3})],\n [('three-way odd units',\n   {'button': 'c',\n    'pot': 110,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 5,\n    'winners': ['b', 'd', 'e']},\n   {'b': 35, 'd': 40, 'e': 35}),\n  ('two-way one unit',\n   {'button': 'b', 'pot': 25, 'seats': ['a', 'b', 'c', 'd'], 'unit': 5, 'winners': ['a', 'c']},\n   {'a': 10, 'c': 15}),\n  ('button is a winner',\n   {'button': 'd', 'pot': 7, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'd']},\n   {'a': 4, 'd': 3}),\n  ('even split',\n   {'button': 'c', 'pot': 100, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['a', 'b']},\n   {'a': 50, 'b': 50}),\n  ('single winner',\n   {'button': 'a', 'pot': 35, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['c']}, {'c': 35}),\n  ('large unit',\n   {'button': 'a',\n    'pot': 300,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 100,\n    'winners': ['f', 'a']},\n   {'a': 100, 'f': 200}),\n  ('button left winner',\n   {'button': 'a', 'pot': 5, 'seats': ['a', 'b', 'c'], 'unit': 1, 'winners': ['b', 'c']},\n   {'b': 3, 'c': 2}),\n  ('winner right of button',\n   {'button': 'b', 'pot': 5, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'c']},\n   {'a': 2, 'c': 3})],\n [('three-way odd units',\n   {'button': 'c',\n    'pot': 110,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 5,\n    'winners': ['b', 'd', 'e']},\n   {'b': 35, 'd': 40, 'e': 35}),\n  ('two-way one unit',\n   {'button': 'b', 'pot': 25, 'seats': ['a', 'b', 'c', 'd'], 'unit': 5, 'winners': ['a', 'c']},\n   {'a': 10, 'c': 15}),\n  ('button is a winner',\n   {'button': 'd', 'pot': 7, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'd']},\n   {'a': 4, 'd': 3}),\n  ('even split',\n   {'button': 'c', 'pot': 100, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['a', 'b']},\n   {'a': 50, 'b': 50}),\n  ('single winner',\n   {'button': 'a', 'pot': 35, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['c']}, {'c': 35}),\n  ('wrap past last seat',\n   {'button': 'd',\n    'pot': 11,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 1,\n    'winners': ['a', 'e', 'b']},\n   {'a': 4, 'b': 3, 'e': 4}),\n  ('four-way three odd',\n   {'button': 'b',\n    'pot': 19,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 1,\n    'winners': ['a', 'b', 'c', 'd']},\n   {'a': 5, 'b': 4, 'c': 5, 'd': 5}),\n  ('large unit',\n   {'button': 'a',\n    'pot': 300,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 100,\n    'winners': ['f', 'a']},\n   {'a': 100, 'f': 200})],\n [('three-way odd units',\n   {'button': 'c',\n    'pot': 110,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 5,\n    'winners': ['b', 'd', 'e']},\n   {'b': 35, 'd': 40, 'e': 35}),\n  ('two-way one unit',\n   {'button': 'b', 'pot': 25, 'seats': ['a', 'b', 'c', 'd'], 'unit': 5, 'winners': ['a', 'c']},\n   {'a': 10, 'c': 15}),\n  ('button is a winner',\n   {'button': 'd', 'pot': 7, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'd']},\n   {'a': 4, 'd': 3}),\n  ('single winner',\n   {'button': 'a', 'pot': 35, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['c']}, {'c': 35}),\n  ('wrap past last seat',\n   {'button': 'd',\n    'pot': 11,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 1,\n    'winners': ['a', 'e', 'b']},\n   {'a': 4, 'b': 3, 'e': 4}),\n  ('four-way three odd',\n   {'button': 'b',\n    'pot': 19,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 1,\n    'winners': ['a', 'b', 'c', 'd']},\n   {'a': 5, 'b': 4, 'c': 5, 'd': 5}),\n  ('large unit',\n   {'button': 'a',\n    'pot': 300,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 100,\n    'winners': ['f', 'a']},\n   {'a': 100, 'f': 200}),\n  ('button left winner',\n   {'button': 'a', 'pot': 5, 'seats': ['a', 'b', 'c'], 'unit': 1, 'winners': ['b', 'c']},\n   {'b': 3, 'c': 2})],\n [('three-way odd units',\n   {'button': 'c',\n    'pot': 110,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 5,\n    'winners': ['b', 'd', 'e']},\n   {'b': 35, 'd': 40, 'e': 35}),\n  ('two-way one unit',\n   {'button': 'b', 'pot': 25, 'seats': ['a', 'b', 'c', 'd'], 'unit': 5, 'winners': ['a', 'c']},\n   {'a': 10, 'c': 15}),\n  ('even split',\n   {'button': 'c', 'pot': 100, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['a', 'b']},\n   {'a': 50, 'b': 50}),\n  ('single winner',\n   {'button': 'a', 'pot': 35, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['c']}, {'c': 35}),\n  ('four-way three odd',\n   {'button': 'b',\n    'pot': 19,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 1,\n    'winners': ['a', 'b', 'c', 'd']},\n   {'a': 5, 'b': 4, 'c': 5, 'd': 5}),\n  ('large unit',\n   {'button': 'a',\n    'pot': 300,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 100,\n    'winners': ['f', 'a']},\n   {'a': 100, 'f': 200}),\n  ('button left winner',\n   {'button': 'a', 'pot': 5, 'seats': ['a', 'b', 'c'], 'unit': 1, 'winners': ['b', 'c']},\n   {'b': 3, 'c': 2}),\n  ('winner right of button',\n   {'button': 'b', 'pot': 5, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'c']},\n   {'a': 2, 'c': 3})]]\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":"dff74d2fd22fab9b8ec58cf17ef129bfe2eb8ff54f065a8ca08ef45d13b95ea0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    pot=x['pot']; unit=x['unit']; winners=x['winners']; seats=x['seats']\n    k=len(winners)\n    units=pot//unit\n    share=units//k\n    rem=units-share*k\n    out={w:share*unit for w in winners}\n    start=(seats.index(x['button'])+1)%len(seats)\n    order=seats[start:]+seats[:start]\n    for w in [s for s in order if s in winners][:rem]:\n        out[w]+=unit\n    return dict(sorted(out.items()))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('three-way odd units',\n   {'button': 'c',\n    'pot': 110,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 5,\n    'winners': ['b', 'd', 'e']},\n   {'b': 35, 'd': 40, 'e': 35}),\n  ('two-way one unit',\n   {'button': 'b', 'pot': 25, 'seats': ['a', 'b', 'c', 'd'], 'unit': 5, 'winners': ['a', 'c']},\n   {'a': 10, 'c': 15}),\n  ('button is a winner',\n   {'button': 'd', 'pot': 7, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'd']},\n   {'a': 4, 'd': 3}),\n  ('even split',\n   {'button': 'c', 'pot': 100, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['a', 'b']},\n   {'a': 50, 'b': 50}),\n  ('wrap past last seat',\n   {'button': 'd',\n    'pot': 11,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 1,\n    'winners': ['a', 'e', 'b']},\n   {'a': 4, 'b': 3, 'e': 4}),\n  ('four-way three odd',\n   {'button': 'b',\n    'pot': 19,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 1,\n    'winners': ['a', 'b', 'c', 'd']},\n   {'a': 5, 'b': 4, 'c': 5, 'd': 5}),\n  ('button left winner',\n   {'button': 'a', 'pot': 5, 'seats': ['a', 'b', 'c'], 'unit': 1, 'winners': ['b', 'c']},\n   {'b': 3, 'c': 2}),\n  ('winner right of button',\n   {'button': 'b', 'pot': 5, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'c']},\n   {'a': 2, 'c': 3})],\n [('three-way odd units',\n   {'button': 'c',\n    'pot': 110,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 5,\n    'winners': ['b', 'd', 'e']},\n   {'b': 35, 'd': 40, 'e': 35}),\n  ('two-way one unit',\n   {'button': 'b', 'pot': 25, 'seats': ['a', 'b', 'c', 'd'], 'unit': 5, 'winners': ['a', 'c']},\n   {'a': 10, 'c': 15}),\n  ('button is a winner',\n   {'button': 'd', 'pot': 7, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'd']},\n   {'a': 4, 'd': 3}),\n  ('even split',\n   {'button': 'c', 'pot': 100, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['a', 'b']},\n   {'a': 50, 'b': 50}),\n  ('single winner',\n   {'button': 'a', 'pot': 35, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['c']}, {'c': 35}),\n  ('large unit',\n   {'button': 'a',\n    'pot': 300,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 100,\n    'winners': ['f', 'a']},\n   {'a': 100, 'f': 200}),\n  ('button left winner',\n   {'button': 'a', 'pot': 5, 'seats': ['a', 'b', 'c'], 'unit': 1, 'winners': ['b', 'c']},\n   {'b': 3, 'c': 2}),\n  ('winner right of button',\n   {'button': 'b', 'pot': 5, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'c']},\n   {'a': 2, 'c': 3})],\n [('three-way odd units',\n   {'button': 'c',\n    'pot': 110,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 5,\n    'winners': ['b', 'd', 'e']},\n   {'b': 35, 'd': 40, 'e': 35}),\n  ('two-way one unit',\n   {'button': 'b', 'pot': 25, 'seats': ['a', 'b', 'c', 'd'], 'unit': 5, 'winners': ['a', 'c']},\n   {'a': 10, 'c': 15}),\n  ('button is a winner',\n   {'button': 'd', 'pot': 7, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'd']},\n   {'a': 4, 'd': 3}),\n  ('even split',\n   {'button': 'c', 'pot': 100, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['a', 'b']},\n   {'a': 50, 'b': 50}),\n  ('single winner',\n   {'button': 'a', 'pot': 35, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['c']}, {'c': 35}),\n  ('wrap past last seat',\n   {'button': 'd',\n    'pot': 11,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 1,\n    'winners': ['a', 'e', 'b']},\n   {'a': 4, 'b': 3, 'e': 4}),\n  ('four-way three odd',\n   {'button': 'b',\n    'pot': 19,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 1,\n    'winners': ['a', 'b', 'c', 'd']},\n   {'a': 5, 'b': 4, 'c': 5, 'd': 5}),\n  ('large unit',\n   {'button': 'a',\n    'pot': 300,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 100,\n    'winners': ['f', 'a']},\n   {'a': 100, 'f': 200})],\n [('three-way odd units',\n   {'button': 'c',\n    'pot': 110,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 5,\n    'winners': ['b', 'd', 'e']},\n   {'b': 35, 'd': 40, 'e': 35}),\n  ('two-way one unit',\n   {'button': 'b', 'pot': 25, 'seats': ['a', 'b', 'c', 'd'], 'unit': 5, 'winners': ['a', 'c']},\n   {'a': 10, 'c': 15}),\n  ('button is a winner',\n   {'button': 'd', 'pot': 7, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'd']},\n   {'a': 4, 'd': 3}),\n  ('single winner',\n   {'button': 'a', 'pot': 35, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['c']}, {'c': 35}),\n  ('wrap past last seat',\n   {'button': 'd',\n    'pot': 11,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 1,\n    'winners': ['a', 'e', 'b']},\n   {'a': 4, 'b': 3, 'e': 4}),\n  ('four-way three odd',\n   {'button': 'b',\n    'pot': 19,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 1,\n    'winners': ['a', 'b', 'c', 'd']},\n   {'a': 5, 'b': 4, 'c': 5, 'd': 5}),\n  ('large unit',\n   {'button': 'a',\n    'pot': 300,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 100,\n    'winners': ['f', 'a']},\n   {'a': 100, 'f': 200}),\n  ('button left winner',\n   {'button': 'a', 'pot': 5, 'seats': ['a', 'b', 'c'], 'unit': 1, 'winners': ['b', 'c']},\n   {'b': 3, 'c': 2})],\n [('three-way odd units',\n   {'button': 'c',\n    'pot': 110,\n    'seats': ['a', 'b', 'c', 'd', 'e'],\n    'unit': 5,\n    'winners': ['b', 'd', 'e']},\n   {'b': 35, 'd': 40, 'e': 35}),\n  ('two-way one unit',\n   {'button': 'b', 'pot': 25, 'seats': ['a', 'b', 'c', 'd'], 'unit': 5, 'winners': ['a', 'c']},\n   {'a': 10, 'c': 15}),\n  ('even split',\n   {'button': 'c', 'pot': 100, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['a', 'b']},\n   {'a': 50, 'b': 50}),\n  ('single winner',\n   {'button': 'a', 'pot': 35, 'seats': ['a', 'b', 'c'], 'unit': 5, 'winners': ['c']}, {'c': 35}),\n  ('four-way three odd',\n   {'button': 'b',\n    'pot': 19,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 1,\n    'winners': ['a', 'b', 'c', 'd']},\n   {'a': 5, 'b': 4, 'c': 5, 'd': 5}),\n  ('large unit',\n   {'button': 'a',\n    'pot': 300,\n    'seats': ['a', 'b', 'c', 'd', 'e', 'f'],\n    'unit': 100,\n    'winners': ['f', 'a']},\n   {'a': 100, 'f': 200}),\n  ('button left winner',\n   {'button': 'a', 'pot': 5, 'seats': ['a', 'b', 'c'], 'unit': 1, 'winners': ['b', 'c']},\n   {'b': 3, 'c': 2}),\n  ('winner right of button',\n   {'button': 'b', 'pot': 5, 'seats': ['a', 'b', 'c', 'd'], 'unit': 1, 'winners': ['a', 'c']},\n   {'a': 2, 'c': 3})]]\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-odd-chip-award-unit-scaling-of-shares","generated_at":"2026-09-29T14:50:08.290838+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Odd-chip placement is where split pots disagree between dealers and software.","repair":"Compute the base share in units and convert once by multiplying by the unit.","root_cause":"The base share is computed in chips while the remainder is computed in units, so the leftover is paid twice.","sha256":"d070b803c93deb313770265c11953021c70fa77ea5ffbcd91633d975f488eed8","title":"Shares paid in raw chips then topped up in units · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.841,"exit_code":1,"observations":[{"actual":{"b":7,"d":12,"e":7},"check":"three-way odd units","expected":{"b":35,"d":40,"e":35},"passed":false},{"actual":{"a":2,"c":7},"check":"two-way one unit","expected":{"a":10,"c":15},"passed":false},{"actual":{"a":4,"d":3},"check":"button is a winner","expected":{"a":4,"d":3},"passed":true},{"actual":{"a":10,"b":10},"check":"even split","expected":{"a":50,"b":50},"passed":false},{"actual":{"a":4,"b":3,"e":4},"check":"wrap past last seat","expected":{"a":4,"b":3,"e":4},"passed":true},{"actual":{"a":5,"b":4,"c":5,"d":5},"check":"four-way three odd","expected":{"a":5,"b":4,"c":5,"d":5},"passed":true},{"actual":{"b":3,"c":2},"check":"button left winner","expected":{"b":3,"c":2},"passed":true},{"actual":{"a":2,"c":3},"check":"winner right of button","expected":{"a":2,"c":3},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"three-way odd units\", \"actual\": {\"b\": 7, \"d\": 12, \"e\": 7}, \"expected\": {\"b\": 35, \"d\": 40, \"e\": 35}, \"passed\": false}, {\"check\": \"two-way one unit\", \"actual\": {\"a\": 2, \"c\": 7}, \"expected\": {\"a\": 10, \"c\": 15}, \"passed\": false}, {\"check\": \"button is a winner\", \"actual\": {\"a\": 4, \"d\": 3}, \"expected\": {\"a\": 4, \"d\": 3}, \"passed\": true}, {\"check\": \"even split\", \"actual\": {\"a\": 10, \"b\": 10}, \"expected\": {\"a\": 50, \"b\": 50}, \"passed\": false}, {\"check\": \"wrap past last seat\", \"actual\": {\"a\": 4, \"b\": 3, \"e\": 4}, \"expected\": {\"a\": 4, \"b\": 3, \"e\": 4}, \"passed\": true}, {\"check\": \"four-way three odd\", \"actual\": {\"a\": 5, \"b\": 4, \"c\": 5, \"d\": 5}, \"expected\": {\"a\": 5, \"b\": 4, \"c\": 5, \"d\": 5}, \"passed\": true}, {\"check\": \"button left winner\", \"actual\": {\"b\": 3, \"c\": 2}, \"expected\": {\"b\": 3, \"c\": 2}, \"passed\": true}, {\"check\": \"winner right of button\", \"actual\": {\"a\": 2, \"c\": 3}, \"expected\": {\"a\": 2, \"c\": 3}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.824,"exit_code":1,"observations":[{"actual":{"b":36,"d":41,"e":36},"check":"three-way odd units","expected":{"b":35,"d":40,"e":35},"passed":false},{"actual":{"a":12,"c":17},"check":"two-way one unit","expected":{"a":10,"c":15},"passed":false},{"actual":{"a":4,"d":3},"check":"button is a winner","expected":{"a":4,"d":3},"passed":true},{"actual":{"a":50,"b":50},"check":"even split","expected":{"a":50,"b":50},"passed":true},{"actual":{"a":4,"b":3,"e":4},"check":"wrap past last seat","expected":{"a":4,"b":3,"e":4},"passed":true},{"actual":{"a":5,"b":4,"c":5,"d":5},"check":"four-way three odd","expected":{"a":5,"b":4,"c":5,"d":5},"passed":true},{"actual":{"b":3,"c":2},"check":"button left winner","expected":{"b":3,"c":2},"passed":true},{"actual":{"a":2,"c":3},"check":"winner right of button","expected":{"a":2,"c":3},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"three-way odd units\", \"actual\": {\"b\": 36, \"d\": 41, \"e\": 36}, \"expected\": {\"b\": 35, \"d\": 40, \"e\": 35}, \"passed\": false}, {\"check\": \"two-way one unit\", \"actual\": {\"a\": 12, \"c\": 17}, \"expected\": {\"a\": 10, \"c\": 15}, \"passed\": false}, {\"check\": \"button is a winner\", \"actual\": {\"a\": 4, \"d\": 3}, \"expected\": {\"a\": 4, \"d\": 3}, \"passed\": true}, {\"check\": \"even split\", \"actual\": {\"a\": 50, \"b\": 50}, \"expected\": {\"a\": 50, \"b\": 50}, \"passed\": true}, {\"check\": \"wrap past last seat\", \"actual\": {\"a\": 4, \"b\": 3, \"e\": 4}, \"expected\": {\"a\": 4, \"b\": 3, \"e\": 4}, \"passed\": true}, {\"check\": \"four-way three odd\", \"actual\": {\"a\": 5, \"b\": 4, \"c\": 5, \"d\": 5}, \"expected\": {\"a\": 5, \"b\": 4, \"c\": 5, \"d\": 5}, \"passed\": true}, {\"check\": \"button left winner\", \"actual\": {\"b\": 3, \"c\": 2}, \"expected\": {\"b\": 3, \"c\": 2}, \"passed\": true}, {\"check\": \"winner right of button\", \"actual\": {\"a\": 2, \"c\": 3}, \"expected\": {\"a\": 2, \"c\": 3}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.618,"exit_code":0,"observations":[{"actual":{"b":35,"d":40,"e":35},"check":"three-way odd units","expected":{"b":35,"d":40,"e":35},"passed":true},{"actual":{"a":10,"c":15},"check":"two-way one unit","expected":{"a":10,"c":15},"passed":true},{"actual":{"a":4,"d":3},"check":"button is a winner","expected":{"a":4,"d":3},"passed":true},{"actual":{"a":50,"b":50},"check":"even split","expected":{"a":50,"b":50},"passed":true},{"actual":{"a":4,"b":3,"e":4},"check":"wrap past last seat","expected":{"a":4,"b":3,"e":4},"passed":true},{"actual":{"a":5,"b":4,"c":5,"d":5},"check":"four-way three odd","expected":{"a":5,"b":4,"c":5,"d":5},"passed":true},{"actual":{"b":3,"c":2},"check":"button left winner","expected":{"b":3,"c":2},"passed":true},{"actual":{"a":2,"c":3},"check":"winner right of button","expected":{"a":2,"c":3},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"three-way odd units\", \"actual\": {\"b\": 35, \"d\": 40, \"e\": 35}, \"expected\": {\"b\": 35, \"d\": 40, \"e\": 35}, \"passed\": true}, {\"check\": \"two-way one unit\", \"actual\": {\"a\": 10, \"c\": 15}, \"expected\": {\"a\": 10, \"c\": 15}, \"passed\": true}, {\"check\": \"button is a winner\", \"actual\": {\"a\": 4, \"d\": 3}, \"expected\": {\"a\": 4, \"d\": 3}, \"passed\": true}, {\"check\": \"even split\", \"actual\": {\"a\": 50, \"b\": 50}, \"expected\": {\"a\": 50, \"b\": 50}, \"passed\": true}, {\"check\": \"wrap past last seat\", \"actual\": {\"a\": 4, \"b\": 3, \"e\": 4}, \"expected\": {\"a\": 4, \"b\": 3, \"e\": 4}, \"passed\": true}, {\"check\": \"four-way three odd\", \"actual\": {\"a\": 5, \"b\": 4, \"c\": 5, \"d\": 5}, \"expected\": {\"a\": 5, \"b\": 4, \"c\": 5, \"d\": 5}, \"passed\": true}, {\"check\": \"button left winner\", \"actual\": {\"b\": 3, \"c\": 2}, \"expected\": {\"b\": 3, \"c\": 2}, \"passed\": true}, {\"check\": \"winner right of button\", \"actual\": {\"a\": 2, \"c\": 3}, \"expected\": {\"a\": 2, \"c\": 3}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}