{"abstract":"Items below item level 4 cost nothing to repair.","category":"Game economy crafting balance","checks":8,"contract":"Per item cost = max(0, max-dur) * (ilvl//4 + 1) copper. Discount percentages stack multiplicatively on the exact total; the result is rounded up once to copper. Return [gold, silver, copper] with 100 copper per silver and 100 silver per gold.","evaluation_group":"w2-game-economy-crafting-balance-repair-bill","failed_approach":"Shifting the item level before dividing still yields zero for the lowest levels.","family":"w2-game-economy-crafting-balance-repair-bill-per-point-price","id":"FA-86006","implementations":{"attempt":{"sha256":"8d8d7f7cc330ada5c45a62ccb8eced0ee008384207a9238f9239d59a1de48ed6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(items, discounts):\n    total = 0\n    for it in items:\n        missing = max(0, it['max'] - it['dur'])\n        total += missing * ((it['ilvl'] + 1) // 4)\n    price = Fraction(total)\n    for pct in discounts:\n        price = price * (100 - pct) / 100\n    cost = math.ceil(price)\n    return [cost // 10000, cost // 100 % 100, cost % 100]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('over-repaired piece #1',\n   [[{'ilvl': 20, 'dur': 105, 'max': 100}, {'ilvl': 20, 'dur': 90, 'max': 100}], []],\n   [0, 0, 60]),\n  ('two stacked discounts #1', [[{'ilvl': 100, 'dur': 0, 'max': 120}], [10, 20]], [0, 22, 47]),\n  ('regression per-point price #1',\n   [[{'ilvl': 8, 'dur': 18, 'max': 120}, {'ilvl': 3, 'dur': 41, 'max': 60}], [20]],\n   [0, 2, 60]),\n  ('regression per-point price #2',\n   [[{'ilvl': 1, 'dur': 120, 'max': 120},\n     {'ilvl': 4, 'dur': 84, 'max': 100},\n     {'ilvl': 3, 'dur': 40, 'max': 40},\n     {'ilvl': 3, 'dur': 0, 'max': 120}],\n    [10, 33]],\n   [0, 0, 92]),\n  ('regression per-point price #3',\n   [[{'ilvl': 69, 'dur': 5, 'max': 40},\n     {'ilvl': 3, 'dur': 49, 'max': 120},\n     {'ilvl': 139, 'dur': 63, 'max': 60}],\n    [15]],\n   [0, 5, 96]),\n  ('regression per-point price #4',\n   [[{'ilvl': 1, 'dur': 123, 'max': 120},\n     {'ilvl': 7, 'dur': 61, 'max': 120},\n     {'ilvl': 3, 'dur': 120, 'max': 120},\n     {'ilvl': 374, 'dur': 38, 'max': 100}],\n    []],\n   [0, 59, 46]),\n  ('nothing to repair #1', [[], [15]], [0, 0, 0]),\n  ('control #1', [[{'ilvl': 7, 'dur': 40, 'max': 40}], [20]], [0, 0, 0])],\n [('two stacked discounts #1', [[{'ilvl': 100, 'dur': 0, 'max': 120}], [10, 20]], [0, 22, 47]),\n  ('over-repaired piece #1',\n   [[{'ilvl': 20, 'dur': 105, 'max': 100}, {'ilvl': 20, 'dur': 90, 'max': 100}], []],\n   [0, 0, 60]),\n  ('regression per-point price #1',\n   [[{'ilvl': 8, 'dur': 18, 'max': 120}, {'ilvl': 3, 'dur': 41, 'max': 60}], [20]],\n   [0, 2, 60]),\n  ('regression per-point price #2',\n   [[{'ilvl': 1, 'dur': 120, 'max': 120},\n     {'ilvl': 4, 'dur': 84, 'max': 100},\n     {'ilvl': 3, 'dur': 40, 'max': 40},\n     {'ilvl': 3, 'dur': 0, 'max': 120}],\n    [10, 33]],\n   [0, 0, 92]),\n  ('regression per-point price #3',\n   [[{'ilvl': 69, 'dur': 5, 'max': 40},\n     {'ilvl': 3, 'dur': 49, 'max': 120},\n     {'ilvl': 139, 'dur': 63, 'max': 60}],\n    [15]],\n   [0, 5, 96]),\n  ('regression per-point price #4',\n   [[{'ilvl': 1, 'dur': 123, 'max': 120},\n     {'ilvl': 7, 'dur': 61, 'max': 120},\n     {'ilvl': 3, 'dur': 120, 'max': 120},\n     {'ilvl': 374, 'dur': 38, 'max': 100}],\n    []],\n   [0, 59, 46]),\n  ('nothing to repair #1', [[], [15]], [0, 0, 0]),\n  ('control #1', [[{'ilvl': 7, 'dur': 40, 'max': 40}], [20]], [0, 0, 0])],\n [('over-repaired piece #1',\n   [[{'ilvl': 20, 'dur': 105, 'max': 100}, {'ilvl': 20, 'dur': 90, 'max': 100}], []],\n   [0, 0, 60]),\n  ('two stacked discounts #1', [[{'ilvl': 100, 'dur': 0, 'max': 120}], [10, 20]], [0, 22, 47]),\n  ('regression per-point price #1',\n   [[{'ilvl': 69, 'dur': 5, 'max': 40},\n     {'ilvl': 3, 'dur': 49, 'max': 120},\n     {'ilvl': 139, 'dur': 63, 'max': 60}],\n    [15]],\n   [0, 5, 96]),\n  ('fault site per-point price #1',\n   [[{'ilvl': 7, 'dur': 0, 'max': 100}, {'ilvl': 3, 'dur': 78, 'max': 120}], []],\n   [0, 2, 42]),\n  ('regression per-point price #2',\n   [[{'ilvl': 1, 'dur': 123, 'max': 120},\n     {'ilvl': 7, 'dur': 61, 'max': 120},\n     {'ilvl': 3, 'dur': 120, 'max': 120},\n     {'ilvl': 374, 'dur': 38, 'max': 100}],\n    []],\n   [0, 59, 46]),\n  ('regression per-point price #3', [[{'ilvl': 4, 'dur': 0, 'max': 60}], [25]], [0, 0, 90]),\n  ('nothing to repair #1', [[], [15]], [0, 0, 0]),\n  ('control #1',\n   [[{'ilvl': 4, 'dur': 63, 'max': 60},\n     {'ilvl': 130, 'dur': 63, 'max': 60},\n     {'ilvl': 3, 'dur': 60, 'max': 60}],\n    [25, 25]],\n   [0, 0, 0])],\n [('two stacked discounts #1', [[{'ilvl': 100, 'dur': 0, 'max': 120}], [10, 20]], [0, 22, 47]),\n  ('over-repaired piece #1',\n   [[{'ilvl': 20, 'dur': 105, 'max': 100}, {'ilvl': 20, 'dur': 90, 'max': 100}], []],\n   [0, 0, 60]),\n  ('regression per-point price #1',\n   [[{'ilvl': 1, 'dur': 123, 'max': 120},\n     {'ilvl': 7, 'dur': 61, 'max': 120},\n     {'ilvl': 3, 'dur': 120, 'max': 120},\n     {'ilvl': 374, 'dur': 38, 'max': 100}],\n    []],\n   [0, 59, 46]),\n  ('regression per-point price #2', [[{'ilvl': 4, 'dur': 0, 'max': 60}], [25]], [0, 0, 90]),\n  ('regression per-point price #3',\n   [[{'ilvl': 8, 'dur': 103, 'max': 100}, {'ilvl': 204, 'dur': 26, 'max': 60}], []],\n   [0, 17, 68]),\n  ('regression per-point price #4',\n   [[{'ilvl': 113, 'dur': 4, 'max': 40},\n     {'ilvl': 84, 'dur': 100, 'max': 100},\n     {'ilvl': 276, 'dur': 62, 'max': 100},\n     {'ilvl': 4, 'dur': 0, 'max': 120}],\n    [33]],\n   [0, 26, 43]),\n  ('nothing to repair #1', [[], [15]], [0, 0, 0]),\n  ('control #1', [[{'ilvl': 111, 'dur': 123, 'max': 120}], []], [0, 0, 0])],\n [('over-repaired piece #1',\n   [[{'ilvl': 20, 'dur': 105, 'max': 100}, {'ilvl': 20, 'dur': 90, 'max': 100}], []],\n   [0, 0, 60]),\n  ('two stacked discounts #1', [[{'ilvl': 100, 'dur': 0, 'max': 120}], [10, 20]], [0, 22, 47]),\n  ('regression per-point price #1',\n   [[{'ilvl': 8, 'dur': 103, 'max': 100}, {'ilvl': 204, 'dur': 26, 'max': 60}], []],\n   [0, 17, 68]),\n  ('regression per-point price #2',\n   [[{'ilvl': 113, 'dur': 4, 'max': 40},\n     {'ilvl': 84, 'dur': 100, 'max': 100},\n     {'ilvl': 276, 'dur': 62, 'max': 100},\n     {'ilvl': 4, 'dur': 0, 'max': 120}],\n    [33]],\n   [0, 26, 43]),\n  ('regression per-point price #3',\n   [[{'ilvl': 1, 'dur': 47, 'max': 60},\n     {'ilvl': 3, 'dur': 97, 'max': 120},\n     {'ilvl': 4, 'dur': 103, 'max': 100}],\n    [10]],\n   [0, 0, 33]),\n  ('regression per-point price #4',\n   [[{'ilvl': 377, 'dur': 103, 'max': 100},\n     {'ilvl': 1, 'dur': 0, 'max': 100},\n     {'ilvl': 1, 'dur': 5, 'max': 60}],\n    [15, 10]],\n   [0, 1, 19]),\n  ('nothing to repair #1', [[], [15]], [0, 0, 0]),\n  ('control #1',\n   [[{'ilvl': 113, 'dur': 123, 'max': 120}, {'ilvl': 8, 'dur': 103, 'max': 100}], []],\n   [0, 0, 0])]]\nfor label, args, expected in cases[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":"06c8ef7df84a9661df34a4342223742bf0cd2543a1d601ece709d11ec9c9bc05","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(items, discounts):\n    total = 0\n    for it in items:\n        missing = max(0, it['max'] - it['dur'])\n        total += missing * (it['ilvl'] // 4)\n    price = Fraction(total)\n    for pct in discounts:\n        price = price * (100 - pct) / 100\n    cost = math.ceil(price)\n    return [cost // 10000, cost // 100 % 100, cost % 100]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('over-repaired piece #1',\n   [[{'ilvl': 20, 'dur': 105, 'max': 100}, {'ilvl': 20, 'dur': 90, 'max': 100}], []],\n   [0, 0, 60]),\n  ('two stacked discounts #1', [[{'ilvl': 100, 'dur': 0, 'max': 120}], [10, 20]], [0, 22, 47]),\n  ('regression per-point price #1',\n   [[{'ilvl': 8, 'dur': 18, 'max': 120}, {'ilvl': 3, 'dur': 41, 'max': 60}], [20]],\n   [0, 2, 60]),\n  ('regression per-point price #2',\n   [[{'ilvl': 1, 'dur': 120, 'max': 120},\n     {'ilvl': 4, 'dur': 84, 'max': 100},\n     {'ilvl': 3, 'dur': 40, 'max': 40},\n     {'ilvl': 3, 'dur': 0, 'max': 120}],\n    [10, 33]],\n   [0, 0, 92]),\n  ('regression per-point price #3',\n   [[{'ilvl': 69, 'dur': 5, 'max': 40},\n     {'ilvl': 3, 'dur': 49, 'max': 120},\n     {'ilvl': 139, 'dur': 63, 'max': 60}],\n    [15]],\n   [0, 5, 96]),\n  ('regression per-point price #4',\n   [[{'ilvl': 1, 'dur': 123, 'max': 120},\n     {'ilvl': 7, 'dur': 61, 'max': 120},\n     {'ilvl': 3, 'dur': 120, 'max': 120},\n     {'ilvl': 374, 'dur': 38, 'max': 100}],\n    []],\n   [0, 59, 46]),\n  ('nothing to repair #1', [[], [15]], [0, 0, 0]),\n  ('control #1', [[{'ilvl': 7, 'dur': 40, 'max': 40}], [20]], [0, 0, 0])],\n [('two stacked discounts #1', [[{'ilvl': 100, 'dur': 0, 'max': 120}], [10, 20]], [0, 22, 47]),\n  ('over-repaired piece #1',\n   [[{'ilvl': 20, 'dur': 105, 'max': 100}, {'ilvl': 20, 'dur': 90, 'max': 100}], []],\n   [0, 0, 60]),\n  ('regression per-point price #1',\n   [[{'ilvl': 8, 'dur': 18, 'max': 120}, {'ilvl': 3, 'dur': 41, 'max': 60}], [20]],\n   [0, 2, 60]),\n  ('regression per-point price #2',\n   [[{'ilvl': 1, 'dur': 120, 'max': 120},\n     {'ilvl': 4, 'dur': 84, 'max': 100},\n     {'ilvl': 3, 'dur': 40, 'max': 40},\n     {'ilvl': 3, 'dur': 0, 'max': 120}],\n    [10, 33]],\n   [0, 0, 92]),\n  ('regression per-point price #3',\n   [[{'ilvl': 69, 'dur': 5, 'max': 40},\n     {'ilvl': 3, 'dur': 49, 'max': 120},\n     {'ilvl': 139, 'dur': 63, 'max': 60}],\n    [15]],\n   [0, 5, 96]),\n  ('regression per-point price #4',\n   [[{'ilvl': 1, 'dur': 123, 'max': 120},\n     {'ilvl': 7, 'dur': 61, 'max': 120},\n     {'ilvl': 3, 'dur': 120, 'max': 120},\n     {'ilvl': 374, 'dur': 38, 'max': 100}],\n    []],\n   [0, 59, 46]),\n  ('nothing to repair #1', [[], [15]], [0, 0, 0]),\n  ('control #1', [[{'ilvl': 7, 'dur': 40, 'max': 40}], [20]], [0, 0, 0])],\n [('over-repaired piece #1',\n   [[{'ilvl': 20, 'dur': 105, 'max': 100}, {'ilvl': 20, 'dur': 90, 'max': 100}], []],\n   [0, 0, 60]),\n  ('two stacked discounts #1', [[{'ilvl': 100, 'dur': 0, 'max': 120}], [10, 20]], [0, 22, 47]),\n  ('regression per-point price #1',\n   [[{'ilvl': 69, 'dur': 5, 'max': 40},\n     {'ilvl': 3, 'dur': 49, 'max': 120},\n     {'ilvl': 139, 'dur': 63, 'max': 60}],\n    [15]],\n   [0, 5, 96]),\n  ('fault site per-point price #1',\n   [[{'ilvl': 7, 'dur': 0, 'max': 100}, {'ilvl': 3, 'dur': 78, 'max': 120}], []],\n   [0, 2, 42]),\n  ('regression per-point price #2',\n   [[{'ilvl': 1, 'dur': 123, 'max': 120},\n     {'ilvl': 7, 'dur': 61, 'max': 120},\n     {'ilvl': 3, 'dur': 120, 'max': 120},\n     {'ilvl': 374, 'dur': 38, 'max': 100}],\n    []],\n   [0, 59, 46]),\n  ('regression per-point price #3', [[{'ilvl': 4, 'dur': 0, 'max': 60}], [25]], [0, 0, 90]),\n  ('nothing to repair #1', [[], [15]], [0, 0, 0]),\n  ('control #1',\n   [[{'ilvl': 4, 'dur': 63, 'max': 60},\n     {'ilvl': 130, 'dur': 63, 'max': 60},\n     {'ilvl': 3, 'dur': 60, 'max': 60}],\n    [25, 25]],\n   [0, 0, 0])],\n [('two stacked discounts #1', [[{'ilvl': 100, 'dur': 0, 'max': 120}], [10, 20]], [0, 22, 47]),\n  ('over-repaired piece #1',\n   [[{'ilvl': 20, 'dur': 105, 'max': 100}, {'ilvl': 20, 'dur': 90, 'max': 100}], []],\n   [0, 0, 60]),\n  ('regression per-point price #1',\n   [[{'ilvl': 1, 'dur': 123, 'max': 120},\n     {'ilvl': 7, 'dur': 61, 'max': 120},\n     {'ilvl': 3, 'dur': 120, 'max': 120},\n     {'ilvl': 374, 'dur': 38, 'max': 100}],\n    []],\n   [0, 59, 46]),\n  ('regression per-point price #2', [[{'ilvl': 4, 'dur': 0, 'max': 60}], [25]], [0, 0, 90]),\n  ('regression per-point price #3',\n   [[{'ilvl': 8, 'dur': 103, 'max': 100}, {'ilvl': 204, 'dur': 26, 'max': 60}], []],\n   [0, 17, 68]),\n  ('regression per-point price #4',\n   [[{'ilvl': 113, 'dur': 4, 'max': 40},\n     {'ilvl': 84, 'dur': 100, 'max': 100},\n     {'ilvl': 276, 'dur': 62, 'max': 100},\n     {'ilvl': 4, 'dur': 0, 'max': 120}],\n    [33]],\n   [0, 26, 43]),\n  ('nothing to repair #1', [[], [15]], [0, 0, 0]),\n  ('control #1', [[{'ilvl': 111, 'dur': 123, 'max': 120}], []], [0, 0, 0])],\n [('over-repaired piece #1',\n   [[{'ilvl': 20, 'dur': 105, 'max': 100}, {'ilvl': 20, 'dur': 90, 'max': 100}], []],\n   [0, 0, 60]),\n  ('two stacked discounts #1', [[{'ilvl': 100, 'dur': 0, 'max': 120}], [10, 20]], [0, 22, 47]),\n  ('regression per-point price #1',\n   [[{'ilvl': 8, 'dur': 103, 'max': 100}, {'ilvl': 204, 'dur': 26, 'max': 60}], []],\n   [0, 17, 68]),\n  ('regression per-point price #2',\n   [[{'ilvl': 113, 'dur': 4, 'max': 40},\n     {'ilvl': 84, 'dur': 100, 'max': 100},\n     {'ilvl': 276, 'dur': 62, 'max': 100},\n     {'ilvl': 4, 'dur': 0, 'max': 120}],\n    [33]],\n   [0, 26, 43]),\n  ('regression per-point price #3',\n   [[{'ilvl': 1, 'dur': 47, 'max': 60},\n     {'ilvl': 3, 'dur': 97, 'max': 120},\n     {'ilvl': 4, 'dur': 103, 'max': 100}],\n    [10]],\n   [0, 0, 33]),\n  ('regression per-point price #4',\n   [[{'ilvl': 377, 'dur': 103, 'max': 100},\n     {'ilvl': 1, 'dur': 0, 'max': 100},\n     {'ilvl': 1, 'dur': 5, 'max': 60}],\n    [15, 10]],\n   [0, 1, 19]),\n  ('nothing to repair #1', [[], [15]], [0, 0, 0]),\n  ('control #1',\n   [[{'ilvl': 113, 'dur': 123, 'max': 120}, {'ilvl': 8, 'dur': 103, 'max': 100}], []],\n   [0, 0, 0])]]\nfor label, args, expected in cases[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":"dd884131bd964862b78c10a963572482a3f39a332e965ee4c89755506f758bf4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(items, discounts):\n    total = 0\n    for it in items:\n        missing = max(0, it['max'] - it['dur'])\n        total += missing * (it['ilvl'] // 4 + 1)\n    price = Fraction(total)\n    for pct in discounts:\n        price = price * (100 - pct) / 100\n    cost = math.ceil(price)\n    return [cost // 10000, cost // 100 % 100, cost % 100]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('over-repaired piece #1',\n   [[{'ilvl': 20, 'dur': 105, 'max': 100}, {'ilvl': 20, 'dur': 90, 'max': 100}], []],\n   [0, 0, 60]),\n  ('two stacked discounts #1', [[{'ilvl': 100, 'dur': 0, 'max': 120}], [10, 20]], [0, 22, 47]),\n  ('regression per-point price #1',\n   [[{'ilvl': 8, 'dur': 18, 'max': 120}, {'ilvl': 3, 'dur': 41, 'max': 60}], [20]],\n   [0, 2, 60]),\n  ('regression per-point price #2',\n   [[{'ilvl': 1, 'dur': 120, 'max': 120},\n     {'ilvl': 4, 'dur': 84, 'max': 100},\n     {'ilvl': 3, 'dur': 40, 'max': 40},\n     {'ilvl': 3, 'dur': 0, 'max': 120}],\n    [10, 33]],\n   [0, 0, 92]),\n  ('regression per-point price #3',\n   [[{'ilvl': 69, 'dur': 5, 'max': 40},\n     {'ilvl': 3, 'dur': 49, 'max': 120},\n     {'ilvl': 139, 'dur': 63, 'max': 60}],\n    [15]],\n   [0, 5, 96]),\n  ('regression per-point price #4',\n   [[{'ilvl': 1, 'dur': 123, 'max': 120},\n     {'ilvl': 7, 'dur': 61, 'max': 120},\n     {'ilvl': 3, 'dur': 120, 'max': 120},\n     {'ilvl': 374, 'dur': 38, 'max': 100}],\n    []],\n   [0, 59, 46]),\n  ('nothing to repair #1', [[], [15]], [0, 0, 0]),\n  ('control #1', [[{'ilvl': 7, 'dur': 40, 'max': 40}], [20]], [0, 0, 0])],\n [('two stacked discounts #1', [[{'ilvl': 100, 'dur': 0, 'max': 120}], [10, 20]], [0, 22, 47]),\n  ('over-repaired piece #1',\n   [[{'ilvl': 20, 'dur': 105, 'max': 100}, {'ilvl': 20, 'dur': 90, 'max': 100}], []],\n   [0, 0, 60]),\n  ('regression per-point price #1',\n   [[{'ilvl': 8, 'dur': 18, 'max': 120}, {'ilvl': 3, 'dur': 41, 'max': 60}], [20]],\n   [0, 2, 60]),\n  ('regression per-point price #2',\n   [[{'ilvl': 1, 'dur': 120, 'max': 120},\n     {'ilvl': 4, 'dur': 84, 'max': 100},\n     {'ilvl': 3, 'dur': 40, 'max': 40},\n     {'ilvl': 3, 'dur': 0, 'max': 120}],\n    [10, 33]],\n   [0, 0, 92]),\n  ('regression per-point price #3',\n   [[{'ilvl': 69, 'dur': 5, 'max': 40},\n     {'ilvl': 3, 'dur': 49, 'max': 120},\n     {'ilvl': 139, 'dur': 63, 'max': 60}],\n    [15]],\n   [0, 5, 96]),\n  ('regression per-point price #4',\n   [[{'ilvl': 1, 'dur': 123, 'max': 120},\n     {'ilvl': 7, 'dur': 61, 'max': 120},\n     {'ilvl': 3, 'dur': 120, 'max': 120},\n     {'ilvl': 374, 'dur': 38, 'max': 100}],\n    []],\n   [0, 59, 46]),\n  ('nothing to repair #1', [[], [15]], [0, 0, 0]),\n  ('control #1', [[{'ilvl': 7, 'dur': 40, 'max': 40}], [20]], [0, 0, 0])],\n [('over-repaired piece #1',\n   [[{'ilvl': 20, 'dur': 105, 'max': 100}, {'ilvl': 20, 'dur': 90, 'max': 100}], []],\n   [0, 0, 60]),\n  ('two stacked discounts #1', [[{'ilvl': 100, 'dur': 0, 'max': 120}], [10, 20]], [0, 22, 47]),\n  ('regression per-point price #1',\n   [[{'ilvl': 69, 'dur': 5, 'max': 40},\n     {'ilvl': 3, 'dur': 49, 'max': 120},\n     {'ilvl': 139, 'dur': 63, 'max': 60}],\n    [15]],\n   [0, 5, 96]),\n  ('fault site per-point price #1',\n   [[{'ilvl': 7, 'dur': 0, 'max': 100}, {'ilvl': 3, 'dur': 78, 'max': 120}], []],\n   [0, 2, 42]),\n  ('regression per-point price #2',\n   [[{'ilvl': 1, 'dur': 123, 'max': 120},\n     {'ilvl': 7, 'dur': 61, 'max': 120},\n     {'ilvl': 3, 'dur': 120, 'max': 120},\n     {'ilvl': 374, 'dur': 38, 'max': 100}],\n    []],\n   [0, 59, 46]),\n  ('regression per-point price #3', [[{'ilvl': 4, 'dur': 0, 'max': 60}], [25]], [0, 0, 90]),\n  ('nothing to repair #1', [[], [15]], [0, 0, 0]),\n  ('control #1',\n   [[{'ilvl': 4, 'dur': 63, 'max': 60},\n     {'ilvl': 130, 'dur': 63, 'max': 60},\n     {'ilvl': 3, 'dur': 60, 'max': 60}],\n    [25, 25]],\n   [0, 0, 0])],\n [('two stacked discounts #1', [[{'ilvl': 100, 'dur': 0, 'max': 120}], [10, 20]], [0, 22, 47]),\n  ('over-repaired piece #1',\n   [[{'ilvl': 20, 'dur': 105, 'max': 100}, {'ilvl': 20, 'dur': 90, 'max': 100}], []],\n   [0, 0, 60]),\n  ('regression per-point price #1',\n   [[{'ilvl': 1, 'dur': 123, 'max': 120},\n     {'ilvl': 7, 'dur': 61, 'max': 120},\n     {'ilvl': 3, 'dur': 120, 'max': 120},\n     {'ilvl': 374, 'dur': 38, 'max': 100}],\n    []],\n   [0, 59, 46]),\n  ('regression per-point price #2', [[{'ilvl': 4, 'dur': 0, 'max': 60}], [25]], [0, 0, 90]),\n  ('regression per-point price #3',\n   [[{'ilvl': 8, 'dur': 103, 'max': 100}, {'ilvl': 204, 'dur': 26, 'max': 60}], []],\n   [0, 17, 68]),\n  ('regression per-point price #4',\n   [[{'ilvl': 113, 'dur': 4, 'max': 40},\n     {'ilvl': 84, 'dur': 100, 'max': 100},\n     {'ilvl': 276, 'dur': 62, 'max': 100},\n     {'ilvl': 4, 'dur': 0, 'max': 120}],\n    [33]],\n   [0, 26, 43]),\n  ('nothing to repair #1', [[], [15]], [0, 0, 0]),\n  ('control #1', [[{'ilvl': 111, 'dur': 123, 'max': 120}], []], [0, 0, 0])],\n [('over-repaired piece #1',\n   [[{'ilvl': 20, 'dur': 105, 'max': 100}, {'ilvl': 20, 'dur': 90, 'max': 100}], []],\n   [0, 0, 60]),\n  ('two stacked discounts #1', [[{'ilvl': 100, 'dur': 0, 'max': 120}], [10, 20]], [0, 22, 47]),\n  ('regression per-point price #1',\n   [[{'ilvl': 8, 'dur': 103, 'max': 100}, {'ilvl': 204, 'dur': 26, 'max': 60}], []],\n   [0, 17, 68]),\n  ('regression per-point price #2',\n   [[{'ilvl': 113, 'dur': 4, 'max': 40},\n     {'ilvl': 84, 'dur': 100, 'max': 100},\n     {'ilvl': 276, 'dur': 62, 'max': 100},\n     {'ilvl': 4, 'dur': 0, 'max': 120}],\n    [33]],\n   [0, 26, 43]),\n  ('regression per-point price #3',\n   [[{'ilvl': 1, 'dur': 47, 'max': 60},\n     {'ilvl': 3, 'dur': 97, 'max': 120},\n     {'ilvl': 4, 'dur': 103, 'max': 100}],\n    [10]],\n   [0, 0, 33]),\n  ('regression per-point price #4',\n   [[{'ilvl': 377, 'dur': 103, 'max': 100},\n     {'ilvl': 1, 'dur': 0, 'max': 100},\n     {'ilvl': 1, 'dur': 5, 'max': 60}],\n    [15, 10]],\n   [0, 1, 19]),\n  ('nothing to repair #1', [[], [15]], [0, 0, 0]),\n  ('control #1',\n   [[{'ilvl': 113, 'dur': 123, 'max': 120}, {'ilvl': 8, 'dur': 103, 'max': 100}], []],\n   [0, 0, 0])]]\nfor label, args, expected in cases[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":"Deterministic toy contract stipulated for this model; integer or exact arithmetic only, not a reproduction of any specific game engine. 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-game-economy-crafting-balance-repair-bill-per-point-price","generated_at":"2026-09-29T14:50:45.637386+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Game economies leak or destroy currency when one crafting or pricing rule is off by one boundary, rounding stage or state update; the defect is observable in exact integer outcomes.","repair":"Restore `(it['ilvl'] // 4 + 1)` at the per-point price step.","root_cause":"The per-point price drops the one-copper base.","sha256":"d3fdb5c80e8d16f0b7e09c78f2b04a61999eb681001c02d3da62fd8d25f429bb","title":"Repair bill: Low-level repairs are free · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.574,"exit_code":1,"observations":[{"actual":[0,0,50],"check":"over-repaired piece #1","expected":[0,0,60],"passed":false},{"actual":[0,21,60],"check":"two stacked discounts #1","expected":[0,22,47],"passed":false},{"actual":[0,1,79],"check":"regression per-point price #1","expected":[0,2,60],"passed":false},{"actual":[0,0,83],"check":"regression per-point price #2","expected":[0,0,92],"passed":false},{"actual":[0,5,67],"check":"regression per-point price #3","expected":[0,5,96],"passed":false},{"actual":[0,58,84],"check":"regression per-point price #4","expected":[0,59,46],"passed":false},{"actual":[0,0,0],"check":"nothing to repair #1","expected":[0,0,0],"passed":true},{"actual":[0,0,0],"check":"control #1","expected":[0,0,0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"over-repaired piece #1\", \"actual\": [0, 0, 50], \"expected\": [0, 0, 60], \"passed\": false}, {\"check\": \"two stacked discounts #1\", \"actual\": [0, 21, 60], \"expected\": [0, 22, 47], \"passed\": false}, {\"check\": \"regression per-point price #1\", \"actual\": [0, 1, 79], \"expected\": [0, 2, 60], \"passed\": false}, {\"check\": \"regression per-point price #2\", \"actual\": [0, 0, 83], \"expected\": [0, 0, 92], \"passed\": false}, {\"check\": \"regression per-point price #3\", \"actual\": [0, 5, 67], \"expected\": [0, 5, 96], \"passed\": false}, {\"check\": \"regression per-point price #4\", \"actual\": [0, 58, 84], \"expected\": [0, 59, 46], \"passed\": false}, {\"check\": \"nothing to repair #1\", \"actual\": [0, 0, 0], \"expected\": [0, 0, 0], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [0, 0, 0], \"expected\": [0, 0, 0], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.178,"exit_code":1,"observations":[{"actual":[0,0,50],"check":"over-repaired piece #1","expected":[0,0,60],"passed":false},{"actual":[0,21,60],"check":"two stacked discounts #1","expected":[0,22,47],"passed":false},{"actual":[0,1,64],"check":"regression per-point price #1","expected":[0,2,60],"passed":false},{"actual":[0,0,10],"check":"regression per-point price #2","expected":[0,0,92],"passed":false},{"actual":[0,5,6],"check":"regression per-point price #3","expected":[0,5,96],"passed":false},{"actual":[0,58,25],"check":"regression per-point price #4","expected":[0,59,46],"passed":false},{"actual":[0,0,0],"check":"nothing to repair #1","expected":[0,0,0],"passed":true},{"actual":[0,0,0],"check":"control #1","expected":[0,0,0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"over-repaired piece #1\", \"actual\": [0, 0, 50], \"expected\": [0, 0, 60], \"passed\": false}, {\"check\": \"two stacked discounts #1\", \"actual\": [0, 21, 60], \"expected\": [0, 22, 47], \"passed\": false}, {\"check\": \"regression per-point price #1\", \"actual\": [0, 1, 64], \"expected\": [0, 2, 60], \"passed\": false}, {\"check\": \"regression per-point price #2\", \"actual\": [0, 0, 10], \"expected\": [0, 0, 92], \"passed\": false}, {\"check\": \"regression per-point price #3\", \"actual\": [0, 5, 6], \"expected\": [0, 5, 96], \"passed\": false}, {\"check\": \"regression per-point price #4\", \"actual\": [0, 58, 25], \"expected\": [0, 59, 46], \"passed\": false}, {\"check\": \"nothing to repair #1\", \"actual\": [0, 0, 0], \"expected\": [0, 0, 0], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [0, 0, 0], \"expected\": [0, 0, 0], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.291,"exit_code":0,"observations":[{"actual":[0,0,60],"check":"over-repaired piece #1","expected":[0,0,60],"passed":true},{"actual":[0,22,47],"check":"two stacked discounts #1","expected":[0,22,47],"passed":true},{"actual":[0,2,60],"check":"regression per-point price #1","expected":[0,2,60],"passed":true},{"actual":[0,0,92],"check":"regression per-point price #2","expected":[0,0,92],"passed":true},{"actual":[0,5,96],"check":"regression per-point price #3","expected":[0,5,96],"passed":true},{"actual":[0,59,46],"check":"regression per-point price #4","expected":[0,59,46],"passed":true},{"actual":[0,0,0],"check":"nothing to repair #1","expected":[0,0,0],"passed":true},{"actual":[0,0,0],"check":"control #1","expected":[0,0,0],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"over-repaired piece #1\", \"actual\": [0, 0, 60], \"expected\": [0, 0, 60], \"passed\": true}, {\"check\": \"two stacked discounts #1\", \"actual\": [0, 22, 47], \"expected\": [0, 22, 47], \"passed\": true}, {\"check\": \"regression per-point price #1\", \"actual\": [0, 2, 60], \"expected\": [0, 2, 60], \"passed\": true}, {\"check\": \"regression per-point price #2\", \"actual\": [0, 0, 92], \"expected\": [0, 0, 92], \"passed\": true}, {\"check\": \"regression per-point price #3\", \"actual\": [0, 5, 96], \"expected\": [0, 5, 96], \"passed\": true}, {\"check\": \"regression per-point price #4\", \"actual\": [0, 59, 46], \"expected\": [0, 59, 46], \"passed\": true}, {\"check\": \"nothing to repair #1\", \"actual\": [0, 0, 0], \"expected\": [0, 0, 0], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [0, 0, 0], \"expected\": [0, 0, 0], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}