{"abstract":"Distance charges ending in half a cent or more lose a cent.","category":"Ride-hailing fare and surge pricing","checks":7,"contract":"All money is integer cents. Distance charge = meters x per_km / 1000 and time charge = seconds x per_min / 60, each rounded half up to a cent on its own. Subtotal = base + distance + time. The minimum fare applies to that subtotal only; the booking fee is added after the minimum. Return the distance charge, time charge and fare.","evaluation_group":"w2-ride-hailing-fare-surge-metered-fare","failed_approach":"Python round() is half-even and still drops half cents on even values.","family":"w2-ride-hailing-fare-surge-metered-fare-distance-cent-rounding","id":"FA-85346","implementations":{"attempt":{"sha256":"026d68314e34c4c3409fdc0fd54afa43282e69b6b3483ddfb862781e019bf502","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(trip, rate):\n    def half_up(num, den):\n        return (num * 2 + den) // (den * 2)\n    dist = round(trip['meters'] * rate['per_km'] / 1000)\n    tm = half_up(trip['seconds'] * rate['per_min'], 60)\n    sub = rate['base'] + dist + tm\n    fare = max(sub, rate['minimum']) + rate['booking_fee']\n    return {'distance': dist, 'time': tm, 'fare': fare}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: distance cent rounding',\n   [{'meters': 13218, 'seconds': 30},\n    {'base': 150, 'booking_fee': 0, 'minimum': 1000, 'per_km': 250, 'per_min': 25}],\n   {'distance': 3305, 'fare': 3468, 'time': 13}),\n  ('partial repair probe: distance cent rounding',\n   [{'meters': 2500, 'seconds': 0},\n    {'base': 150, 'booking_fee': 175, 'minimum': 700, 'per_km': 125, 'per_min': 35}],\n   {'distance': 313, 'fare': 875, 'time': 0}),\n  ('second regression',\n   [{'meters': 5073, 'seconds': 440},\n    {'base': 250, 'booking_fee': 175, 'minimum': 500, 'per_km': 95, 'per_min': 30}],\n   {'distance': 482, 'fare': 1127, 'time': 220}),\n  ('normal control 1',\n   [{'meters': 12, 'seconds': 0},\n    {'base': 250, 'booking_fee': 0, 'minimum': 1000, 'per_km': 250, 'per_min': 30}],\n   {'distance': 3, 'fare': 1000, 'time': 0}),\n  ('normal control 2',\n   [{'meters': 1004, 'seconds': 1448},\n    {'base': 0, 'booking_fee': 250, 'minimum': 1000, 'per_km': 250, 'per_min': 35}],\n   {'distance': 251, 'fare': 1346, 'time': 845}),\n  ('normal control 3',\n   [{'meters': 4, 'seconds': 1514},\n    {'base': 0, 'booking_fee': 250, 'minimum': 700, 'per_km': 250, 'per_min': 25}],\n   {'distance': 1, 'fare': 950, 'time': 631}),\n  ('normal control 4',\n   [{'meters': 12, 'seconds': 2021},\n    {'base': 250, 'booking_fee': 250, 'minimum': 1000, 'per_km': 110, 'per_min': 15}],\n   {'distance': 1, 'fare': 1250, 'time': 505})],\n [('regression: distance cent rounding',\n   [{'meters': 23462, 'seconds': 61},\n    {'base': 250, 'booking_fee': 0, 'minimum': 1000, 'per_km': 125, 'per_min': 35}],\n   {'distance': 2933, 'fare': 3219, 'time': 36}),\n  ('partial repair probe: distance cent rounding',\n   [{'meters': 2500, 'seconds': 61},\n    {'base': 250, 'booking_fee': 0, 'minimum': 500, 'per_km': 125, 'per_min': 25}],\n   {'distance': 313, 'fare': 588, 'time': 25}),\n  ('second regression',\n   [{'meters': 1004, 'seconds': 30},\n    {'base': 150, 'booking_fee': 175, 'minimum': 500, 'per_km': 125, 'per_min': 35}],\n   {'distance': 126, 'fare': 675, 'time': 18}),\n  ('normal control 1',\n   [{'meters': 1004, 'seconds': 61},\n    {'base': 0, 'booking_fee': 175, 'minimum': 700, 'per_km': 95, 'per_min': 30}],\n   {'distance': 95, 'fare': 875, 'time': 31}),\n  ('normal control 2',\n   [{'meters': 12, 'seconds': 61},\n    {'base': 250, 'booking_fee': 175, 'minimum': 500, 'per_km': 95, 'per_min': 25}],\n   {'distance': 1, 'fare': 675, 'time': 25}),\n  ('normal control 3',\n   [{'meters': 9283, 'seconds': 2669},\n    {'base': 250, 'booking_fee': 0, 'minimum': 700, 'per_km': 125, 'per_min': 25}],\n   {'distance': 1160, 'fare': 2522, 'time': 1112}),\n  ('normal control 4',\n   [{'meters': 4, 'seconds': 1599},\n    {'base': 0, 'booking_fee': 0, 'minimum': 1000, 'per_km': 95, 'per_min': 35}],\n   {'distance': 0, 'fare': 1000, 'time': 933})],\n [('regression: distance cent rounding',\n   [{'meters': 2500, 'seconds': 30},\n    {'base': 150, 'booking_fee': 175, 'minimum': 500, 'per_km': 125, 'per_min': 35}],\n   {'distance': 313, 'fare': 675, 'time': 18}),\n  ('partial repair probe: distance cent rounding',\n   [{'meters': 4, 'seconds': 30},\n    {'base': 250, 'booking_fee': 175, 'minimum': 500, 'per_km': 125, 'per_min': 25}],\n   {'distance': 1, 'fare': 675, 'time': 13}),\n  ('second regression',\n   [{'meters': 16236, 'seconds': 0},\n    {'base': 150, 'booking_fee': 0, 'minimum': 1000, 'per_km': 125, 'per_min': 15}],\n   {'distance': 2030, 'fare': 2180, 'time': 0}),\n  ('normal control 1',\n   [{'meters': 0, 'seconds': 90},\n    {'base': 150, 'booking_fee': 175, 'minimum': 700, 'per_km': 95, 'per_min': 25}],\n   {'distance': 0, 'fare': 875, 'time': 38}),\n  ('normal control 2',\n   [{'meters': 4, 'seconds': 30},\n    {'base': 150, 'booking_fee': 175, 'minimum': 1000, 'per_km': 95, 'per_min': 35}],\n   {'distance': 0, 'fare': 1175, 'time': 18}),\n  ('normal control 3',\n   [{'meters': 12, 'seconds': 30},\n    {'base': 150, 'booking_fee': 0, 'minimum': 500, 'per_km': 110, 'per_min': 35}],\n   {'distance': 1, 'fare': 500, 'time': 18}),\n  ('normal control 4',\n   [{'meters': 1004, 'seconds': 90},\n    {'base': 150, 'booking_fee': 0, 'minimum': 500, 'per_km': 110, 'per_min': 15}],\n   {'distance': 110, 'fare': 500, 'time': 23})],\n [('regression: distance cent rounding',\n   [{'meters': 2500, 'seconds': 90},\n    {'base': 150, 'booking_fee': 250, 'minimum': 1000, 'per_km': 125, 'per_min': 25}],\n   {'distance': 313, 'fare': 1250, 'time': 38}),\n  ('partial repair probe: distance cent rounding',\n   [{'meters': 13716, 'seconds': 61},\n    {'base': 0, 'booking_fee': 250, 'minimum': 500, 'per_km': 125, 'per_min': 30}],\n   {'distance': 1715, 'fare': 1996, 'time': 31}),\n  ('second regression',\n   [{'meters': 12, 'seconds': 0},\n    {'base': 150, 'booking_fee': 0, 'minimum': 700, 'per_km': 125, 'per_min': 30}],\n   {'distance': 2, 'fare': 700, 'time': 0}),\n  ('normal control 1',\n   [{'meters': 12, 'seconds': 1415},\n    {'base': 150, 'booking_fee': 175, 'minimum': 500, 'per_km': 110, 'per_min': 15}],\n   {'distance': 1, 'fare': 680, 'time': 354}),\n  ('normal control 2',\n   [{'meters': 500, 'seconds': 30},\n    {'base': 150, 'booking_fee': 250, 'minimum': 700, 'per_km': 110, 'per_min': 30}],\n   {'distance': 55, 'fare': 950, 'time': 15}),\n  ('normal control 3',\n   [{'meters': 12, 'seconds': 90},\n    {'base': 150, 'booking_fee': 175, 'minimum': 1000, 'per_km': 110, 'per_min': 35}],\n   {'distance': 1, 'fare': 1175, 'time': 53}),\n  ('normal control 4',\n   [{'meters': 17013, 'seconds': 61},\n    {'base': 250, 'booking_fee': 175, 'minimum': 1000, 'per_km': 110, 'per_min': 25}],\n   {'distance': 1871, 'fare': 2321, 'time': 25})],\n [('regression: distance cent rounding',\n   [{'meters': 500, 'seconds': 1926},\n    {'base': 250, 'booking_fee': 0, 'minimum': 700, 'per_km': 125, 'per_min': 30}],\n   {'distance': 63, 'fare': 1276, 'time': 963}),\n  ('partial repair probe: distance cent rounding',\n   [{'meters': 4, 'seconds': 90},\n    {'base': 0, 'booking_fee': 0, 'minimum': 700, 'per_km': 125, 'per_min': 25}],\n   {'distance': 1, 'fare': 700, 'time': 38}),\n  ('second regression',\n   [{'meters': 11469, 'seconds': 811},\n    {'base': 0, 'booking_fee': 250, 'minimum': 1000, 'per_km': 125, 'per_min': 30}],\n   {'distance': 1434, 'fare': 2090, 'time': 406}),\n  ('normal control 1',\n   [{'meters': 12570, 'seconds': 61},\n    {'base': 0, 'booking_fee': 0, 'minimum': 500, 'per_km': 125, 'per_min': 15}],\n   {'distance': 1571, 'fare': 1586, 'time': 15}),\n  ('normal control 2',\n   [{'meters': 1004, 'seconds': 90},\n    {'base': 250, 'booking_fee': 175, 'minimum': 700, 'per_km': 250, 'per_min': 30}],\n   {'distance': 251, 'fare': 875, 'time': 45}),\n  ('normal control 3',\n   [{'meters': 0, 'seconds': 2350},\n    {'base': 150, 'booking_fee': 0, 'minimum': 700, 'per_km': 125, 'per_min': 25}],\n   {'distance': 0, 'fare': 1129, 'time': 979}),\n  ('normal control 4',\n   [{'meters': 1004, 'seconds': 0},\n    {'base': 250, 'booking_fee': 250, 'minimum': 700, 'per_km': 95, 'per_min': 25}],\n   {'distance': 95, 'fare': 950, 'time': 0})]]\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":"892df54a9ed4a8e88d72f21c7e6861f2261c6bf48e8699dc41ed08a9ab9781bf","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(trip, rate):\n    def half_up(num, den):\n        return (num * 2 + den) // (den * 2)\n    dist = trip['meters'] * rate['per_km'] // 1000\n    tm = half_up(trip['seconds'] * rate['per_min'], 60)\n    sub = rate['base'] + dist + tm\n    fare = max(sub, rate['minimum']) + rate['booking_fee']\n    return {'distance': dist, 'time': tm, 'fare': fare}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: distance cent rounding',\n   [{'meters': 13218, 'seconds': 30},\n    {'base': 150, 'booking_fee': 0, 'minimum': 1000, 'per_km': 250, 'per_min': 25}],\n   {'distance': 3305, 'fare': 3468, 'time': 13}),\n  ('partial repair probe: distance cent rounding',\n   [{'meters': 2500, 'seconds': 0},\n    {'base': 150, 'booking_fee': 175, 'minimum': 700, 'per_km': 125, 'per_min': 35}],\n   {'distance': 313, 'fare': 875, 'time': 0}),\n  ('second regression',\n   [{'meters': 5073, 'seconds': 440},\n    {'base': 250, 'booking_fee': 175, 'minimum': 500, 'per_km': 95, 'per_min': 30}],\n   {'distance': 482, 'fare': 1127, 'time': 220}),\n  ('normal control 1',\n   [{'meters': 12, 'seconds': 0},\n    {'base': 250, 'booking_fee': 0, 'minimum': 1000, 'per_km': 250, 'per_min': 30}],\n   {'distance': 3, 'fare': 1000, 'time': 0}),\n  ('normal control 2',\n   [{'meters': 1004, 'seconds': 1448},\n    {'base': 0, 'booking_fee': 250, 'minimum': 1000, 'per_km': 250, 'per_min': 35}],\n   {'distance': 251, 'fare': 1346, 'time': 845}),\n  ('normal control 3',\n   [{'meters': 4, 'seconds': 1514},\n    {'base': 0, 'booking_fee': 250, 'minimum': 700, 'per_km': 250, 'per_min': 25}],\n   {'distance': 1, 'fare': 950, 'time': 631}),\n  ('normal control 4',\n   [{'meters': 12, 'seconds': 2021},\n    {'base': 250, 'booking_fee': 250, 'minimum': 1000, 'per_km': 110, 'per_min': 15}],\n   {'distance': 1, 'fare': 1250, 'time': 505})],\n [('regression: distance cent rounding',\n   [{'meters': 23462, 'seconds': 61},\n    {'base': 250, 'booking_fee': 0, 'minimum': 1000, 'per_km': 125, 'per_min': 35}],\n   {'distance': 2933, 'fare': 3219, 'time': 36}),\n  ('partial repair probe: distance cent rounding',\n   [{'meters': 2500, 'seconds': 61},\n    {'base': 250, 'booking_fee': 0, 'minimum': 500, 'per_km': 125, 'per_min': 25}],\n   {'distance': 313, 'fare': 588, 'time': 25}),\n  ('second regression',\n   [{'meters': 1004, 'seconds': 30},\n    {'base': 150, 'booking_fee': 175, 'minimum': 500, 'per_km': 125, 'per_min': 35}],\n   {'distance': 126, 'fare': 675, 'time': 18}),\n  ('normal control 1',\n   [{'meters': 1004, 'seconds': 61},\n    {'base': 0, 'booking_fee': 175, 'minimum': 700, 'per_km': 95, 'per_min': 30}],\n   {'distance': 95, 'fare': 875, 'time': 31}),\n  ('normal control 2',\n   [{'meters': 12, 'seconds': 61},\n    {'base': 250, 'booking_fee': 175, 'minimum': 500, 'per_km': 95, 'per_min': 25}],\n   {'distance': 1, 'fare': 675, 'time': 25}),\n  ('normal control 3',\n   [{'meters': 9283, 'seconds': 2669},\n    {'base': 250, 'booking_fee': 0, 'minimum': 700, 'per_km': 125, 'per_min': 25}],\n   {'distance': 1160, 'fare': 2522, 'time': 1112}),\n  ('normal control 4',\n   [{'meters': 4, 'seconds': 1599},\n    {'base': 0, 'booking_fee': 0, 'minimum': 1000, 'per_km': 95, 'per_min': 35}],\n   {'distance': 0, 'fare': 1000, 'time': 933})],\n [('regression: distance cent rounding',\n   [{'meters': 2500, 'seconds': 30},\n    {'base': 150, 'booking_fee': 175, 'minimum': 500, 'per_km': 125, 'per_min': 35}],\n   {'distance': 313, 'fare': 675, 'time': 18}),\n  ('partial repair probe: distance cent rounding',\n   [{'meters': 4, 'seconds': 30},\n    {'base': 250, 'booking_fee': 175, 'minimum': 500, 'per_km': 125, 'per_min': 25}],\n   {'distance': 1, 'fare': 675, 'time': 13}),\n  ('second regression',\n   [{'meters': 16236, 'seconds': 0},\n    {'base': 150, 'booking_fee': 0, 'minimum': 1000, 'per_km': 125, 'per_min': 15}],\n   {'distance': 2030, 'fare': 2180, 'time': 0}),\n  ('normal control 1',\n   [{'meters': 0, 'seconds': 90},\n    {'base': 150, 'booking_fee': 175, 'minimum': 700, 'per_km': 95, 'per_min': 25}],\n   {'distance': 0, 'fare': 875, 'time': 38}),\n  ('normal control 2',\n   [{'meters': 4, 'seconds': 30},\n    {'base': 150, 'booking_fee': 175, 'minimum': 1000, 'per_km': 95, 'per_min': 35}],\n   {'distance': 0, 'fare': 1175, 'time': 18}),\n  ('normal control 3',\n   [{'meters': 12, 'seconds': 30},\n    {'base': 150, 'booking_fee': 0, 'minimum': 500, 'per_km': 110, 'per_min': 35}],\n   {'distance': 1, 'fare': 500, 'time': 18}),\n  ('normal control 4',\n   [{'meters': 1004, 'seconds': 90},\n    {'base': 150, 'booking_fee': 0, 'minimum': 500, 'per_km': 110, 'per_min': 15}],\n   {'distance': 110, 'fare': 500, 'time': 23})],\n [('regression: distance cent rounding',\n   [{'meters': 2500, 'seconds': 90},\n    {'base': 150, 'booking_fee': 250, 'minimum': 1000, 'per_km': 125, 'per_min': 25}],\n   {'distance': 313, 'fare': 1250, 'time': 38}),\n  ('partial repair probe: distance cent rounding',\n   [{'meters': 13716, 'seconds': 61},\n    {'base': 0, 'booking_fee': 250, 'minimum': 500, 'per_km': 125, 'per_min': 30}],\n   {'distance': 1715, 'fare': 1996, 'time': 31}),\n  ('second regression',\n   [{'meters': 12, 'seconds': 0},\n    {'base': 150, 'booking_fee': 0, 'minimum': 700, 'per_km': 125, 'per_min': 30}],\n   {'distance': 2, 'fare': 700, 'time': 0}),\n  ('normal control 1',\n   [{'meters': 12, 'seconds': 1415},\n    {'base': 150, 'booking_fee': 175, 'minimum': 500, 'per_km': 110, 'per_min': 15}],\n   {'distance': 1, 'fare': 680, 'time': 354}),\n  ('normal control 2',\n   [{'meters': 500, 'seconds': 30},\n    {'base': 150, 'booking_fee': 250, 'minimum': 700, 'per_km': 110, 'per_min': 30}],\n   {'distance': 55, 'fare': 950, 'time': 15}),\n  ('normal control 3',\n   [{'meters': 12, 'seconds': 90},\n    {'base': 150, 'booking_fee': 175, 'minimum': 1000, 'per_km': 110, 'per_min': 35}],\n   {'distance': 1, 'fare': 1175, 'time': 53}),\n  ('normal control 4',\n   [{'meters': 17013, 'seconds': 61},\n    {'base': 250, 'booking_fee': 175, 'minimum': 1000, 'per_km': 110, 'per_min': 25}],\n   {'distance': 1871, 'fare': 2321, 'time': 25})],\n [('regression: distance cent rounding',\n   [{'meters': 500, 'seconds': 1926},\n    {'base': 250, 'booking_fee': 0, 'minimum': 700, 'per_km': 125, 'per_min': 30}],\n   {'distance': 63, 'fare': 1276, 'time': 963}),\n  ('partial repair probe: distance cent rounding',\n   [{'meters': 4, 'seconds': 90},\n    {'base': 0, 'booking_fee': 0, 'minimum': 700, 'per_km': 125, 'per_min': 25}],\n   {'distance': 1, 'fare': 700, 'time': 38}),\n  ('second regression',\n   [{'meters': 11469, 'seconds': 811},\n    {'base': 0, 'booking_fee': 250, 'minimum': 1000, 'per_km': 125, 'per_min': 30}],\n   {'distance': 1434, 'fare': 2090, 'time': 406}),\n  ('normal control 1',\n   [{'meters': 12570, 'seconds': 61},\n    {'base': 0, 'booking_fee': 0, 'minimum': 500, 'per_km': 125, 'per_min': 15}],\n   {'distance': 1571, 'fare': 1586, 'time': 15}),\n  ('normal control 2',\n   [{'meters': 1004, 'seconds': 90},\n    {'base': 250, 'booking_fee': 175, 'minimum': 700, 'per_km': 250, 'per_min': 30}],\n   {'distance': 251, 'fare': 875, 'time': 45}),\n  ('normal control 3',\n   [{'meters': 0, 'seconds': 2350},\n    {'base': 150, 'booking_fee': 0, 'minimum': 700, 'per_km': 125, 'per_min': 25}],\n   {'distance': 0, 'fare': 1129, 'time': 979}),\n  ('normal control 4',\n   [{'meters': 1004, 'seconds': 0},\n    {'base': 250, 'booking_fee': 250, 'minimum': 700, 'per_km': 95, 'per_min': 25}],\n   {'distance': 95, 'fare': 950, 'time': 0})]]\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":"041c11760a0e2f631fea2a36eff5d49b4357634acb52470f41fa9bf950cbba8f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(trip, rate):\n    def half_up(num, den):\n        return (num * 2 + den) // (den * 2)\n    dist = half_up(trip['meters'] * rate['per_km'], 1000)\n    tm = half_up(trip['seconds'] * rate['per_min'], 60)\n    sub = rate['base'] + dist + tm\n    fare = max(sub, rate['minimum']) + rate['booking_fee']\n    return {'distance': dist, 'time': tm, 'fare': fare}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: distance cent rounding',\n   [{'meters': 13218, 'seconds': 30},\n    {'base': 150, 'booking_fee': 0, 'minimum': 1000, 'per_km': 250, 'per_min': 25}],\n   {'distance': 3305, 'fare': 3468, 'time': 13}),\n  ('partial repair probe: distance cent rounding',\n   [{'meters': 2500, 'seconds': 0},\n    {'base': 150, 'booking_fee': 175, 'minimum': 700, 'per_km': 125, 'per_min': 35}],\n   {'distance': 313, 'fare': 875, 'time': 0}),\n  ('second regression',\n   [{'meters': 5073, 'seconds': 440},\n    {'base': 250, 'booking_fee': 175, 'minimum': 500, 'per_km': 95, 'per_min': 30}],\n   {'distance': 482, 'fare': 1127, 'time': 220}),\n  ('normal control 1',\n   [{'meters': 12, 'seconds': 0},\n    {'base': 250, 'booking_fee': 0, 'minimum': 1000, 'per_km': 250, 'per_min': 30}],\n   {'distance': 3, 'fare': 1000, 'time': 0}),\n  ('normal control 2',\n   [{'meters': 1004, 'seconds': 1448},\n    {'base': 0, 'booking_fee': 250, 'minimum': 1000, 'per_km': 250, 'per_min': 35}],\n   {'distance': 251, 'fare': 1346, 'time': 845}),\n  ('normal control 3',\n   [{'meters': 4, 'seconds': 1514},\n    {'base': 0, 'booking_fee': 250, 'minimum': 700, 'per_km': 250, 'per_min': 25}],\n   {'distance': 1, 'fare': 950, 'time': 631}),\n  ('normal control 4',\n   [{'meters': 12, 'seconds': 2021},\n    {'base': 250, 'booking_fee': 250, 'minimum': 1000, 'per_km': 110, 'per_min': 15}],\n   {'distance': 1, 'fare': 1250, 'time': 505})],\n [('regression: distance cent rounding',\n   [{'meters': 23462, 'seconds': 61},\n    {'base': 250, 'booking_fee': 0, 'minimum': 1000, 'per_km': 125, 'per_min': 35}],\n   {'distance': 2933, 'fare': 3219, 'time': 36}),\n  ('partial repair probe: distance cent rounding',\n   [{'meters': 2500, 'seconds': 61},\n    {'base': 250, 'booking_fee': 0, 'minimum': 500, 'per_km': 125, 'per_min': 25}],\n   {'distance': 313, 'fare': 588, 'time': 25}),\n  ('second regression',\n   [{'meters': 1004, 'seconds': 30},\n    {'base': 150, 'booking_fee': 175, 'minimum': 500, 'per_km': 125, 'per_min': 35}],\n   {'distance': 126, 'fare': 675, 'time': 18}),\n  ('normal control 1',\n   [{'meters': 1004, 'seconds': 61},\n    {'base': 0, 'booking_fee': 175, 'minimum': 700, 'per_km': 95, 'per_min': 30}],\n   {'distance': 95, 'fare': 875, 'time': 31}),\n  ('normal control 2',\n   [{'meters': 12, 'seconds': 61},\n    {'base': 250, 'booking_fee': 175, 'minimum': 500, 'per_km': 95, 'per_min': 25}],\n   {'distance': 1, 'fare': 675, 'time': 25}),\n  ('normal control 3',\n   [{'meters': 9283, 'seconds': 2669},\n    {'base': 250, 'booking_fee': 0, 'minimum': 700, 'per_km': 125, 'per_min': 25}],\n   {'distance': 1160, 'fare': 2522, 'time': 1112}),\n  ('normal control 4',\n   [{'meters': 4, 'seconds': 1599},\n    {'base': 0, 'booking_fee': 0, 'minimum': 1000, 'per_km': 95, 'per_min': 35}],\n   {'distance': 0, 'fare': 1000, 'time': 933})],\n [('regression: distance cent rounding',\n   [{'meters': 2500, 'seconds': 30},\n    {'base': 150, 'booking_fee': 175, 'minimum': 500, 'per_km': 125, 'per_min': 35}],\n   {'distance': 313, 'fare': 675, 'time': 18}),\n  ('partial repair probe: distance cent rounding',\n   [{'meters': 4, 'seconds': 30},\n    {'base': 250, 'booking_fee': 175, 'minimum': 500, 'per_km': 125, 'per_min': 25}],\n   {'distance': 1, 'fare': 675, 'time': 13}),\n  ('second regression',\n   [{'meters': 16236, 'seconds': 0},\n    {'base': 150, 'booking_fee': 0, 'minimum': 1000, 'per_km': 125, 'per_min': 15}],\n   {'distance': 2030, 'fare': 2180, 'time': 0}),\n  ('normal control 1',\n   [{'meters': 0, 'seconds': 90},\n    {'base': 150, 'booking_fee': 175, 'minimum': 700, 'per_km': 95, 'per_min': 25}],\n   {'distance': 0, 'fare': 875, 'time': 38}),\n  ('normal control 2',\n   [{'meters': 4, 'seconds': 30},\n    {'base': 150, 'booking_fee': 175, 'minimum': 1000, 'per_km': 95, 'per_min': 35}],\n   {'distance': 0, 'fare': 1175, 'time': 18}),\n  ('normal control 3',\n   [{'meters': 12, 'seconds': 30},\n    {'base': 150, 'booking_fee': 0, 'minimum': 500, 'per_km': 110, 'per_min': 35}],\n   {'distance': 1, 'fare': 500, 'time': 18}),\n  ('normal control 4',\n   [{'meters': 1004, 'seconds': 90},\n    {'base': 150, 'booking_fee': 0, 'minimum': 500, 'per_km': 110, 'per_min': 15}],\n   {'distance': 110, 'fare': 500, 'time': 23})],\n [('regression: distance cent rounding',\n   [{'meters': 2500, 'seconds': 90},\n    {'base': 150, 'booking_fee': 250, 'minimum': 1000, 'per_km': 125, 'per_min': 25}],\n   {'distance': 313, 'fare': 1250, 'time': 38}),\n  ('partial repair probe: distance cent rounding',\n   [{'meters': 13716, 'seconds': 61},\n    {'base': 0, 'booking_fee': 250, 'minimum': 500, 'per_km': 125, 'per_min': 30}],\n   {'distance': 1715, 'fare': 1996, 'time': 31}),\n  ('second regression',\n   [{'meters': 12, 'seconds': 0},\n    {'base': 150, 'booking_fee': 0, 'minimum': 700, 'per_km': 125, 'per_min': 30}],\n   {'distance': 2, 'fare': 700, 'time': 0}),\n  ('normal control 1',\n   [{'meters': 12, 'seconds': 1415},\n    {'base': 150, 'booking_fee': 175, 'minimum': 500, 'per_km': 110, 'per_min': 15}],\n   {'distance': 1, 'fare': 680, 'time': 354}),\n  ('normal control 2',\n   [{'meters': 500, 'seconds': 30},\n    {'base': 150, 'booking_fee': 250, 'minimum': 700, 'per_km': 110, 'per_min': 30}],\n   {'distance': 55, 'fare': 950, 'time': 15}),\n  ('normal control 3',\n   [{'meters': 12, 'seconds': 90},\n    {'base': 150, 'booking_fee': 175, 'minimum': 1000, 'per_km': 110, 'per_min': 35}],\n   {'distance': 1, 'fare': 1175, 'time': 53}),\n  ('normal control 4',\n   [{'meters': 17013, 'seconds': 61},\n    {'base': 250, 'booking_fee': 175, 'minimum': 1000, 'per_km': 110, 'per_min': 25}],\n   {'distance': 1871, 'fare': 2321, 'time': 25})],\n [('regression: distance cent rounding',\n   [{'meters': 500, 'seconds': 1926},\n    {'base': 250, 'booking_fee': 0, 'minimum': 700, 'per_km': 125, 'per_min': 30}],\n   {'distance': 63, 'fare': 1276, 'time': 963}),\n  ('partial repair probe: distance cent rounding',\n   [{'meters': 4, 'seconds': 90},\n    {'base': 0, 'booking_fee': 0, 'minimum': 700, 'per_km': 125, 'per_min': 25}],\n   {'distance': 1, 'fare': 700, 'time': 38}),\n  ('second regression',\n   [{'meters': 11469, 'seconds': 811},\n    {'base': 0, 'booking_fee': 250, 'minimum': 1000, 'per_km': 125, 'per_min': 30}],\n   {'distance': 1434, 'fare': 2090, 'time': 406}),\n  ('normal control 1',\n   [{'meters': 12570, 'seconds': 61},\n    {'base': 0, 'booking_fee': 0, 'minimum': 500, 'per_km': 125, 'per_min': 15}],\n   {'distance': 1571, 'fare': 1586, 'time': 15}),\n  ('normal control 2',\n   [{'meters': 1004, 'seconds': 90},\n    {'base': 250, 'booking_fee': 175, 'minimum': 700, 'per_km': 250, 'per_min': 30}],\n   {'distance': 251, 'fare': 875, 'time': 45}),\n  ('normal control 3',\n   [{'meters': 0, 'seconds': 2350},\n    {'base': 150, 'booking_fee': 0, 'minimum': 700, 'per_km': 125, 'per_min': 25}],\n   {'distance': 0, 'fare': 1129, 'time': 979}),\n  ('normal control 4',\n   [{'meters': 1004, 'seconds': 0},\n    {'base': 250, 'booking_fee': 250, 'minimum': 700, 'per_km': 95, 'per_min': 25}],\n   {'distance': 95, 'fare': 950, 'time': 0})]]\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":"A deterministic toy pricing contract stipulated for this example; it does not reproduce the pricing of any real ride-hailing operator or regulator. 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-ride-hailing-fare-surge-metered-fare-distance-cent-rounding","generated_at":"2026-09-29T14:50:39.596263+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Ride-hailing prices are computed per trip at scale; ordering, unit and boundary slips become systematic over- or under-charging.","repair":"Round the distance charge half up to the cent.","root_cause":"The distance charge uses floor division instead of half-up rounding.","sha256":"36b2542d850845084ce14caa47c72e47880abf859627e2ebe90a9c4c4cd6c306","title":"Distance charge truncated to the cent · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.749,"exit_code":1,"observations":[{"actual":{"distance":3304,"fare":3467,"time":13},"check":"regression: distance cent rounding","expected":{"distance":3305,"fare":3468,"time":13},"passed":false},{"actual":{"distance":312,"fare":875,"time":0},"check":"partial repair probe: distance cent rounding","expected":{"distance":313,"fare":875,"time":0},"passed":false},{"actual":{"distance":482,"fare":1127,"time":220},"check":"second regression","expected":{"distance":482,"fare":1127,"time":220},"passed":true},{"actual":{"distance":3,"fare":1000,"time":0},"check":"normal control 1","expected":{"distance":3,"fare":1000,"time":0},"passed":true},{"actual":{"distance":251,"fare":1346,"time":845},"check":"normal control 2","expected":{"distance":251,"fare":1346,"time":845},"passed":true},{"actual":{"distance":1,"fare":950,"time":631},"check":"normal control 3","expected":{"distance":1,"fare":950,"time":631},"passed":true},{"actual":{"distance":1,"fare":1250,"time":505},"check":"normal control 4","expected":{"distance":1,"fare":1250,"time":505},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: distance cent rounding\", \"actual\": {\"distance\": 3304, \"time\": 13, \"fare\": 3467}, \"expected\": {\"distance\": 3305, \"fare\": 3468, \"time\": 13}, \"passed\": false}, {\"check\": \"partial repair probe: distance cent rounding\", \"actual\": {\"distance\": 312, \"time\": 0, \"fare\": 875}, \"expected\": {\"distance\": 313, \"fare\": 875, \"time\": 0}, \"passed\": false}, {\"check\": \"second regression\", \"actual\": {\"distance\": 482, \"time\": 220, \"fare\": 1127}, \"expected\": {\"distance\": 482, \"fare\": 1127, \"time\": 220}, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": {\"distance\": 3, \"time\": 0, \"fare\": 1000}, \"expected\": {\"distance\": 3, \"fare\": 1000, \"time\": 0}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"distance\": 251, \"time\": 845, \"fare\": 1346}, \"expected\": {\"distance\": 251, \"fare\": 1346, \"time\": 845}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"distance\": 1, \"time\": 631, \"fare\": 950}, \"expected\": {\"distance\": 1, \"fare\": 950, \"time\": 631}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"distance\": 1, \"time\": 505, \"fare\": 1250}, \"expected\": {\"distance\": 1, \"fare\": 1250, \"time\": 505}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.506,"exit_code":1,"observations":[{"actual":{"distance":3304,"fare":3467,"time":13},"check":"regression: distance cent rounding","expected":{"distance":3305,"fare":3468,"time":13},"passed":false},{"actual":{"distance":312,"fare":875,"time":0},"check":"partial repair probe: distance cent rounding","expected":{"distance":313,"fare":875,"time":0},"passed":false},{"actual":{"distance":481,"fare":1126,"time":220},"check":"second regression","expected":{"distance":482,"fare":1127,"time":220},"passed":false},{"actual":{"distance":3,"fare":1000,"time":0},"check":"normal control 1","expected":{"distance":3,"fare":1000,"time":0},"passed":true},{"actual":{"distance":251,"fare":1346,"time":845},"check":"normal control 2","expected":{"distance":251,"fare":1346,"time":845},"passed":true},{"actual":{"distance":1,"fare":950,"time":631},"check":"normal control 3","expected":{"distance":1,"fare":950,"time":631},"passed":true},{"actual":{"distance":1,"fare":1250,"time":505},"check":"normal control 4","expected":{"distance":1,"fare":1250,"time":505},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: distance cent rounding\", \"actual\": {\"distance\": 3304, \"time\": 13, \"fare\": 3467}, \"expected\": {\"distance\": 3305, \"fare\": 3468, \"time\": 13}, \"passed\": false}, {\"check\": \"partial repair probe: distance cent rounding\", \"actual\": {\"distance\": 312, \"time\": 0, \"fare\": 875}, \"expected\": {\"distance\": 313, \"fare\": 875, \"time\": 0}, \"passed\": false}, {\"check\": \"second regression\", \"actual\": {\"distance\": 481, \"time\": 220, \"fare\": 1126}, \"expected\": {\"distance\": 482, \"fare\": 1127, \"time\": 220}, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": {\"distance\": 3, \"time\": 0, \"fare\": 1000}, \"expected\": {\"distance\": 3, \"fare\": 1000, \"time\": 0}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"distance\": 251, \"time\": 845, \"fare\": 1346}, \"expected\": {\"distance\": 251, \"fare\": 1346, \"time\": 845}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"distance\": 1, \"time\": 631, \"fare\": 950}, \"expected\": {\"distance\": 1, \"fare\": 950, \"time\": 631}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"distance\": 1, \"time\": 505, \"fare\": 1250}, \"expected\": {\"distance\": 1, \"fare\": 1250, \"time\": 505}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.942,"exit_code":0,"observations":[{"actual":{"distance":3305,"fare":3468,"time":13},"check":"regression: distance cent rounding","expected":{"distance":3305,"fare":3468,"time":13},"passed":true},{"actual":{"distance":313,"fare":875,"time":0},"check":"partial repair probe: distance cent rounding","expected":{"distance":313,"fare":875,"time":0},"passed":true},{"actual":{"distance":482,"fare":1127,"time":220},"check":"second regression","expected":{"distance":482,"fare":1127,"time":220},"passed":true},{"actual":{"distance":3,"fare":1000,"time":0},"check":"normal control 1","expected":{"distance":3,"fare":1000,"time":0},"passed":true},{"actual":{"distance":251,"fare":1346,"time":845},"check":"normal control 2","expected":{"distance":251,"fare":1346,"time":845},"passed":true},{"actual":{"distance":1,"fare":950,"time":631},"check":"normal control 3","expected":{"distance":1,"fare":950,"time":631},"passed":true},{"actual":{"distance":1,"fare":1250,"time":505},"check":"normal control 4","expected":{"distance":1,"fare":1250,"time":505},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: distance cent rounding\", \"actual\": {\"distance\": 3305, \"time\": 13, \"fare\": 3468}, \"expected\": {\"distance\": 3305, \"fare\": 3468, \"time\": 13}, \"passed\": true}, {\"check\": \"partial repair probe: distance cent rounding\", \"actual\": {\"distance\": 313, \"time\": 0, \"fare\": 875}, \"expected\": {\"distance\": 313, \"fare\": 875, \"time\": 0}, \"passed\": true}, {\"check\": \"second regression\", \"actual\": {\"distance\": 482, \"time\": 220, \"fare\": 1127}, \"expected\": {\"distance\": 482, \"fare\": 1127, \"time\": 220}, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": {\"distance\": 3, \"time\": 0, \"fare\": 1000}, \"expected\": {\"distance\": 3, \"fare\": 1000, \"time\": 0}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"distance\": 251, \"time\": 845, \"fare\": 1346}, \"expected\": {\"distance\": 251, \"fare\": 1346, \"time\": 845}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"distance\": 1, \"time\": 631, \"fare\": 950}, \"expected\": {\"distance\": 1, \"fare\": 950, \"time\": 631}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"distance\": 1, \"time\": 505, \"fare\": 1250}, \"expected\": {\"distance\": 1, \"fare\": 1250, \"time\": 505}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}