{"abstract":"Multi-piece shipments are under-billed because fractional pounds are pooled before rounding.","category":"Shipping rate zone lookup","checks":8,"contract":"pieces lb; each piece rounds up to a whole lb and the shipment total is their sum. Qualifies when there are at least 2 pieces, total >= 200 lb and average piece weight >= 10 lb (total >= 10*n); otherwise [\"PARCEL\", total]. Charge = ceil(total * cents per cwt / 100) for zone (rates list zones 2-8), at least min_piece * pieces. Return [total, charge].","evaluation_group":"w2-shipping-zone-hundredweight","failed_approach":"Rounding pieces to nearest drops fractions below one half.","family":"w2-shipping-zone-hundredweight-piece-rounding","id":"FA-95546","implementations":{"attempt":{"sha256":"4ab08190212730ea0277ee3ecd2f4b57e3528bb0ff8caac3ec33d794213a4e08","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(pieces, zone, rates, min_piece):\n    ws = [round(w) for w in pieces]\n    total = sum(ws)\n    n = len(ws)\n    if n < 2 or total < 200 or total < 10 * n:\n        return ['PARCEL', total]\n    rate = rates[zone - 2]\n    charge = -(-total * rate // 100)\n    return [total, max(charge, min_piece * n)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['per piece round', [[100.2, 100.2], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [202, 8155]], ['rounded pieces reach average', [[9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [250, 14103]], ['threshold via rounding', [[99.5, 100], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [200, 8074]], ['light average', [[150, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 200]], ['average exactly 10', [[10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [200, 9024]], ['two exact', [[100, 100], 8, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [200, 15110]], ['single piece', [[250], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 250]], ['generated mix 6', [[10, 10.4, 10.4], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 500], ['PARCEL', 32]]], [['generated mix 9', [[19.2, 19.2], 7, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 6000], ['PARCEL', 40]], ['generated mix 5', [[1.4, 11], 4, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 500], ['PARCEL', 13]], ['light average', [[150, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 200]], ['average exactly 10', [[10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [200, 9024]], ['rounded pieces reach average', [[9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [250, 14103]], ['per piece round', [[100.2, 100.2], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [202, 8155]], ['generated mix 8', [[11, 10.4], 8, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 22]], ['generated mix 17', [[11, 10], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 21]]], [['generated mix 25', [[10.2, 9.6], 6, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 6000], ['PARCEL', 21]], ['generated mix 10', [[9.2, 9.6], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 20]], ['many one pound pieces', [[120, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 4, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], ['PARCEL', 210]], ['two exact', [[100, 100], 8, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [200, 15110]], ['threshold via rounding', [[99.5, 100], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [200, 8074]], ['light average', [[150, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 200]], ['generated mix 19', [[66.7, 66.3], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 3000], ['PARCEL', 134]], ['generated mix 28', [[1.4, 2], 7, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 500], ['PARCEL', 4]]], [['generated mix 40', [[66.7, 76.3], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 144]], ['generated mix 18', [[20, 11, 10, 10.4, 10, 10, 10, 10, 10.4, 10, 20, 11, 10, 11, 20, 10, 11, 10.4, 10.4, 10.4, 10, 20, 11, 10, 20], 6, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [310, 37500]], ['per piece round', [[100.2, 100.2], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [202, 8155]], ['single piece', [[250], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 250]], ['minimum charge', [[100, 100], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 5000], [200, 10000]], ['many one pound pieces', [[120, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 4, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], ['PARCEL', 210]], ['generated mix 30', [[40.5, 40.5, 40.5, 40.9, 50.5, 50.5, 40.5, 40.9, 40.9, 40.5, 41.5, 40.9, 40.9, 41.5, 50.5, 50.5, 40.5, 40.9, 50.5, 50.5], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [882, 39796]], ['generated mix 38', [[10.4, 10, 10, 20, 11, 11, 10, 10, 11, 10.4, 20, 20, 11, 11, 11, 10, 20, 10, 10.4, 11], 8, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [250, 30000]]], [['generated mix 47', [[66.7, 76.3, 66.3, 67.3, 66.7], 6, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [346, 21515]], ['generated mix 25', [[10.2, 9.6], 6, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 6000], ['PARCEL', 21]], ['light average', [[150, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 200]], ['average exactly 10', [[10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [200, 9024]], ['rounded pieces reach average', [[9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [250, 14103]], ['per piece round', [[100.2, 100.2], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [202, 8155]], ['generated mix 41', [[50.5, 50.5, 41.5, 40.9, 50.5, 50.5, 40.9, 40.9, 41.5, 50.5, 50.5, 50.5, 50.5, 40.5, 40.9, 40.9, 50.5, 40.9, 40.5, 41.5], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [913, 51503]], ['generated mix 50', [[150, 150], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 6000], [300, 13536]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, 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":"e2b4bee488e95faf892a43859e713035e724c712995b7f20ed75310d93d25495","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(pieces, zone, rates, min_piece):\n    ws = list(pieces)\n    total = math.ceil(sum(ws))\n    n = len(ws)\n    if n < 2 or total < 200 or total < 10 * n:\n        return ['PARCEL', total]\n    rate = rates[zone - 2]\n    charge = -(-total * rate // 100)\n    return [total, max(charge, min_piece * n)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['per piece round', [[100.2, 100.2], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [202, 8155]], ['rounded pieces reach average', [[9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [250, 14103]], ['threshold via rounding', [[99.5, 100], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [200, 8074]], ['light average', [[150, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 200]], ['average exactly 10', [[10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [200, 9024]], ['two exact', [[100, 100], 8, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [200, 15110]], ['single piece', [[250], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 250]], ['generated mix 6', [[10, 10.4, 10.4], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 500], ['PARCEL', 32]]], [['generated mix 9', [[19.2, 19.2], 7, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 6000], ['PARCEL', 40]], ['generated mix 5', [[1.4, 11], 4, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 500], ['PARCEL', 13]], ['light average', [[150, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 200]], ['average exactly 10', [[10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [200, 9024]], ['rounded pieces reach average', [[9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [250, 14103]], ['per piece round', [[100.2, 100.2], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [202, 8155]], ['generated mix 8', [[11, 10.4], 8, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 22]], ['generated mix 17', [[11, 10], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 21]]], [['generated mix 25', [[10.2, 9.6], 6, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 6000], ['PARCEL', 21]], ['generated mix 10', [[9.2, 9.6], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 20]], ['many one pound pieces', [[120, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 4, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], ['PARCEL', 210]], ['two exact', [[100, 100], 8, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [200, 15110]], ['threshold via rounding', [[99.5, 100], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [200, 8074]], ['light average', [[150, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 200]], ['generated mix 19', [[66.7, 66.3], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 3000], ['PARCEL', 134]], ['generated mix 28', [[1.4, 2], 7, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 500], ['PARCEL', 4]]], [['generated mix 40', [[66.7, 76.3], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 144]], ['generated mix 18', [[20, 11, 10, 10.4, 10, 10, 10, 10, 10.4, 10, 20, 11, 10, 11, 20, 10, 11, 10.4, 10.4, 10.4, 10, 20, 11, 10, 20], 6, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [310, 37500]], ['per piece round', [[100.2, 100.2], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [202, 8155]], ['single piece', [[250], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 250]], ['minimum charge', [[100, 100], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 5000], [200, 10000]], ['many one pound pieces', [[120, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 4, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], ['PARCEL', 210]], ['generated mix 30', [[40.5, 40.5, 40.5, 40.9, 50.5, 50.5, 40.5, 40.9, 40.9, 40.5, 41.5, 40.9, 40.9, 41.5, 50.5, 50.5, 40.5, 40.9, 50.5, 50.5], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [882, 39796]], ['generated mix 38', [[10.4, 10, 10, 20, 11, 11, 10, 10, 11, 10.4, 20, 20, 11, 11, 11, 10, 20, 10, 10.4, 11], 8, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [250, 30000]]], [['generated mix 47', [[66.7, 76.3, 66.3, 67.3, 66.7], 6, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [346, 21515]], ['generated mix 25', [[10.2, 9.6], 6, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 6000], ['PARCEL', 21]], ['light average', [[150, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 200]], ['average exactly 10', [[10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [200, 9024]], ['rounded pieces reach average', [[9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [250, 14103]], ['per piece round', [[100.2, 100.2], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [202, 8155]], ['generated mix 41', [[50.5, 50.5, 41.5, 40.9, 50.5, 50.5, 40.9, 40.9, 41.5, 50.5, 50.5, 50.5, 50.5, 40.5, 40.9, 40.9, 50.5, 40.9, 40.5, 41.5], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [913, 51503]], ['generated mix 50', [[150, 150], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 6000], [300, 13536]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, 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"},"fixed":{"sha256":"ee7ab2ac6f1f6a04cff6fe7cc6b286286818024c40eae485844d2a4da0ae80fc","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(pieces, zone, rates, min_piece):\n    ws = [math.ceil(w) for w in pieces]\n    total = sum(ws)\n    n = len(ws)\n    if n < 2 or total < 200 or total < 10 * n:\n        return ['PARCEL', total]\n    rate = rates[zone - 2]\n    charge = -(-total * rate // 100)\n    return [total, max(charge, min_piece * n)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['per piece round', [[100.2, 100.2], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [202, 8155]], ['rounded pieces reach average', [[9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [250, 14103]], ['threshold via rounding', [[99.5, 100], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [200, 8074]], ['light average', [[150, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 200]], ['average exactly 10', [[10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [200, 9024]], ['two exact', [[100, 100], 8, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [200, 15110]], ['single piece', [[250], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 250]], ['generated mix 6', [[10, 10.4, 10.4], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 500], ['PARCEL', 32]]], [['generated mix 9', [[19.2, 19.2], 7, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 6000], ['PARCEL', 40]], ['generated mix 5', [[1.4, 11], 4, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 500], ['PARCEL', 13]], ['light average', [[150, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 200]], ['average exactly 10', [[10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [200, 9024]], ['rounded pieces reach average', [[9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [250, 14103]], ['per piece round', [[100.2, 100.2], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [202, 8155]], ['generated mix 8', [[11, 10.4], 8, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 22]], ['generated mix 17', [[11, 10], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 21]]], [['generated mix 25', [[10.2, 9.6], 6, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 6000], ['PARCEL', 21]], ['generated mix 10', [[9.2, 9.6], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 20]], ['many one pound pieces', [[120, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 4, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], ['PARCEL', 210]], ['two exact', [[100, 100], 8, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [200, 15110]], ['threshold via rounding', [[99.5, 100], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [200, 8074]], ['light average', [[150, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 200]], ['generated mix 19', [[66.7, 66.3], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 3000], ['PARCEL', 134]], ['generated mix 28', [[1.4, 2], 7, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 500], ['PARCEL', 4]]], [['generated mix 40', [[66.7, 76.3], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 144]], ['generated mix 18', [[20, 11, 10, 10.4, 10, 10, 10, 10, 10.4, 10, 20, 11, 10, 11, 20, 10, 11, 10.4, 10.4, 10.4, 10, 20, 11, 10, 20], 6, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [310, 37500]], ['per piece round', [[100.2, 100.2], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [202, 8155]], ['single piece', [[250], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 250]], ['minimum charge', [[100, 100], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 5000], [200, 10000]], ['many one pound pieces', [[120, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 4, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], ['PARCEL', 210]], ['generated mix 30', [[40.5, 40.5, 40.5, 40.9, 50.5, 50.5, 40.5, 40.9, 40.9, 40.5, 41.5, 40.9, 40.9, 41.5, 50.5, 50.5, 40.5, 40.9, 50.5, 50.5], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [882, 39796]], ['generated mix 38', [[10.4, 10, 10, 20, 11, 11, 10, 10, 11, 10.4, 20, 20, 11, 11, 11, 10, 20, 10, 10.4, 11], 8, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [250, 30000]]], [['generated mix 47', [[66.7, 76.3, 66.3, 67.3, 66.7], 6, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [346, 21515]], ['generated mix 25', [[10.2, 9.6], 6, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 6000], ['PARCEL', 21]], ['light average', [[150, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], ['PARCEL', 200]], ['average exactly 10', [[10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [200, 9024]], ['rounded pieces reach average', [[9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 100], [250, 14103]], ['per piece round', [[100.2, 100.2], 2, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [202, 8155]], ['generated mix 41', [[50.5, 50.5, 41.5, 40.9, 50.5, 50.5, 40.9, 40.9, 41.5, 50.5, 50.5, 50.5, 50.5, 40.5, 40.9, 40.9, 50.5, 40.9, 40.5, 41.5], 5, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 1500], [913, 51503]], ['generated mix 50', [[150, 150], 3, [4037, 4512, 5093, 5641, 6218, 6907, 7555], 6000], [300, 13536]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, 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":"Stipulated qualification and rate 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-shipping-zone-hundredweight-piece-rounding","generated_at":"2026-09-29T14:52:14.618546+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Hundredweight programs price qualifying multi-piece shipments by aggregate weight.","repair":"Round every piece up to a whole pound, then sum.","root_cause":"Rounding up is applied to the summed weight instead of to each piece.","sha256":"eaceb7ee7f0ca9d6dd4a66819de94cfee006d7b524dda0fce4e867874e7268e0","title":"Hundredweight: weight rounded at shipment level · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.927,"exit_code":1,"observations":[{"actual":[200,8074],"check":"per piece round","expected":[202,8155],"passed":false},{"actual":["PARCEL",225],"check":"rounded pieces reach average","expected":[250,14103],"passed":false},{"actual":[200,8074],"check":"threshold via rounding","expected":[200,8074],"passed":true},{"actual":["PARCEL",200],"check":"light average","expected":["PARCEL",200],"passed":true},{"actual":[200,9024],"check":"average exactly 10","expected":[200,9024],"passed":true},{"actual":[200,15110],"check":"two exact","expected":[200,15110],"passed":true},{"actual":["PARCEL",250],"check":"single piece","expected":["PARCEL",250],"passed":true},{"actual":["PARCEL",30],"check":"generated mix 6","expected":["PARCEL",32],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"per piece round\", \"actual\": [200, 8074], \"expected\": [202, 8155], \"passed\": false}, {\"check\": \"rounded pieces reach average\", \"actual\": [\"PARCEL\", 225], \"expected\": [250, 14103], \"passed\": false}, {\"check\": \"threshold via rounding\", \"actual\": [200, 8074], \"expected\": [200, 8074], \"passed\": true}, {\"check\": \"light average\", \"actual\": [\"PARCEL\", 200], \"expected\": [\"PARCEL\", 200], \"passed\": true}, {\"check\": \"average exactly 10\", \"actual\": [200, 9024], \"expected\": [200, 9024], \"passed\": true}, {\"check\": \"two exact\", \"actual\": [200, 15110], \"expected\": [200, 15110], \"passed\": true}, {\"check\": \"single piece\", \"actual\": [\"PARCEL\", 250], \"expected\": [\"PARCEL\", 250], \"passed\": true}, {\"check\": \"generated mix 6\", \"actual\": [\"PARCEL\", 30], \"expected\": [\"PARCEL\", 32], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":45.401,"exit_code":1,"observations":[{"actual":[201,8115],"check":"per piece round","expected":[202,8155],"passed":false},{"actual":["PARCEL",230],"check":"rounded pieces reach average","expected":[250,14103],"passed":false},{"actual":[200,8074],"check":"threshold via rounding","expected":[200,8074],"passed":true},{"actual":["PARCEL",200],"check":"light average","expected":["PARCEL",200],"passed":true},{"actual":[200,9024],"check":"average exactly 10","expected":[200,9024],"passed":true},{"actual":[200,15110],"check":"two exact","expected":[200,15110],"passed":true},{"actual":["PARCEL",250],"check":"single piece","expected":["PARCEL",250],"passed":true},{"actual":["PARCEL",31],"check":"generated mix 6","expected":["PARCEL",32],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"per piece round\", \"actual\": [201, 8115], \"expected\": [202, 8155], \"passed\": false}, {\"check\": \"rounded pieces reach average\", \"actual\": [\"PARCEL\", 230], \"expected\": [250, 14103], \"passed\": false}, {\"check\": \"threshold via rounding\", \"actual\": [200, 8074], \"expected\": [200, 8074], \"passed\": true}, {\"check\": \"light average\", \"actual\": [\"PARCEL\", 200], \"expected\": [\"PARCEL\", 200], \"passed\": true}, {\"check\": \"average exactly 10\", \"actual\": [200, 9024], \"expected\": [200, 9024], \"passed\": true}, {\"check\": \"two exact\", \"actual\": [200, 15110], \"expected\": [200, 15110], \"passed\": true}, {\"check\": \"single piece\", \"actual\": [\"PARCEL\", 250], \"expected\": [\"PARCEL\", 250], \"passed\": true}, {\"check\": \"generated mix 6\", \"actual\": [\"PARCEL\", 31], \"expected\": [\"PARCEL\", 32], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.747,"exit_code":0,"observations":[{"actual":[202,8155],"check":"per piece round","expected":[202,8155],"passed":true},{"actual":[250,14103],"check":"rounded pieces reach average","expected":[250,14103],"passed":true},{"actual":[200,8074],"check":"threshold via rounding","expected":[200,8074],"passed":true},{"actual":["PARCEL",200],"check":"light average","expected":["PARCEL",200],"passed":true},{"actual":[200,9024],"check":"average exactly 10","expected":[200,9024],"passed":true},{"actual":[200,15110],"check":"two exact","expected":[200,15110],"passed":true},{"actual":["PARCEL",250],"check":"single piece","expected":["PARCEL",250],"passed":true},{"actual":["PARCEL",32],"check":"generated mix 6","expected":["PARCEL",32],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"per piece round\", \"actual\": [202, 8155], \"expected\": [202, 8155], \"passed\": true}, {\"check\": \"rounded pieces reach average\", \"actual\": [250, 14103], \"expected\": [250, 14103], \"passed\": true}, {\"check\": \"threshold via rounding\", \"actual\": [200, 8074], \"expected\": [200, 8074], \"passed\": true}, {\"check\": \"light average\", \"actual\": [\"PARCEL\", 200], \"expected\": [\"PARCEL\", 200], \"passed\": true}, {\"check\": \"average exactly 10\", \"actual\": [200, 9024], \"expected\": [200, 9024], \"passed\": true}, {\"check\": \"two exact\", \"actual\": [200, 15110], \"expected\": [200, 15110], \"passed\": true}, {\"check\": \"single piece\", \"actual\": [\"PARCEL\", 250], \"expected\": [\"PARCEL\", 250], \"passed\": true}, {\"check\": \"generated mix 6\", \"actual\": [\"PARCEL\", 32], \"expected\": [\"PARCEL\", 32], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}