FA-87636 / Collision detection broadphase / Open access
Home cell index uses the base cell size · case 01
Objects on coarse levels are hashed to non-existent fine cells.
ROOT CAUSE
The cell index divides by base instead of the level cell size.
VERIFIED REPAIR
Divide by the chosen level's cell size.
Unsuccessful approach: Fixing only the x index leaves y at base resolution.
Case contract
solve(objs, base, levels): multi-level grid. Each [id,minx,miny,maxx,maxy] goes to the smallest level l (cell size base*2^l) whose cell size is >= the larger box extent, capped at levels-1; its home cell is floor(min corner / level cell size). Return sorted [[id, level, cx, cy]].
Why this case matters
Broadphase stages decide which object pairs ever reach narrowphase; a wrong boundary, ordering or bookkeeping rule silently drops real contacts or floods the solver with false candidates.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(objs, base, levels):
out = []
for i, a, b, c, d in objs:
ext = max(c - a, d - b)
lvl = 0
size = base
while size < ext and lvl < levels - 1:
size *= 2
lvl += 1
out.append([i, lvl, math.floor(a / base), math.floor(b / base)])
out.sort()
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[[[4, 4.0, 6.0, 20.0, 6.5], [18, 5.5, 2.5, 21.5, 7.5], [14, 1.5, -8.5, 5.5, 0.5]], 1.0, 2], [[4, 1, 2, 3], [14, 1, 0, -5], [18, 1, 2, 1]]], [[[[17, 1.5, 2.5, 17.5, 4.5], [5, -7.5, 4.5, -6.5, 13.5], [15, 4.0, -1.5, 20.0, -1.0]], 1.0, 2], [[5, 1, -4, 2], [15, 1, 2, -1], [17, 1, 0, 1]]], [[[[36, -9.0, -5.5, -1.0, 3.5], [28, 8.0, 7.5, 10.0, 16.5], [15, -7.5, -6.5, 0.5, -6.0], [11, 2.5, 7.5, 3.0, 8.5], [8, 10.0, -6.5, 18.0, -5.5]], 1.0, 4], [[8, 3, 1, -1], [11, 0, 2, 7], [15, 3, -1, -1], [28, 3, 1, 0], [36, 3, -2, -1]]], [[[[7, -6.0, 3.5, -2.0, 4.0], [19, -7.0, 7.0, -6.0, 7.5], [24, -3.0, -0.5, 13.0, 0.5], [35, 3.5, -6.0, 4.5, 3.0]], 2.0, 4], [[7, 1, -2, 0], [19, 0, -4, 3], [24, 3, -1, -1], [35, 3, 0, -1]]], [[[[34, 1.5, -9.5, 2.0, -0.5], [22, 4.5, -5.0, 8.5, 0.0], [33, 8.0, -7.0, 24.0, -3.0], [26, 1.0, 0.0, 1.5, 5.0], [4, -1.0, -8.0, 0.0, -6.0], [37, 2.0, -1.0, 9.0, 0.0]], 2.0, 4], [[4, 0, -1, -4], [22, 2, 0, -1], [26, 2, 0, 0], [33, 3, 0, -1], [34, 3, 0, -1], [37, 2, 0, -1]]], [[[[6, 7.0, 2.5, 14.0, 11.5], [9, 2.5, -6.5, 5.5, -5.5]], 1.0, 3], [[6, 2, 1, 0], [9, 2, 0, -2]]], [[[[9, -1.0, -6.0, -0.5, -2.0], [2, 5.0, -7.0, 13.0, -6.0], [3, -8.0, 4.5, -6.0, 9.5]], 1.0, 5], [[2, 3, 0, -1], [3, 3, -1, 0], [9, 2, -1, -2]]], [[[[32, -2.0, 8.0, 0.0, 12.0], [17, -6.5, -4.0, -4.5, 0.0], [1, -6.5, -9.0, -3.5, 0.0], [26, 6.5, -10.0, 13.5, -9.5], [28, 3.5, -3.5, 7.5, 0.5], [15, 0.0, -7.5, 8.0, -2.5]], 2.0, 4], [[1, 3, -1, -1], [15, 2, 0, -1], [17, 1, -2, -1], [26, 2, 0, -2], [28, 1, 0, -1], [32, 1, -1, 2]]]], [[[[[3, -6.0, 3.0, -5.5, 7.0], [27, -6.5, -4.5, -5.5, -0.5]], 1.0, 3], [[3, 2, -2, 0], [27, 2, -2, -2]]], [[[[24, -1.0, -6.5, -0.5, -5.5], [19, -1.0, -4.0, 3.0, -3.5], [33, -6.0, -4.0, -5.0, -3.5], [4, -1.5, -2.5, 5.5, 6.5], [37, 7.0, 1.0, 37.0, 3.0], [11, 4.0, 9.0, 5.0, 11.0]], 1.0, 4], [[4, 3, -1, -1], [11, 1, 2, 4], [19, 2, -1, -1], [24, 0, -1, -7], [33, 0, -6, -4], [37, 3, 0, 0]]], [[[[22, -8.5, -4.0, 7.5, 5.0], [16, -5.5, 8.5, 10.5, 10.5]], 2.0, 5], [[16, 3, -1, 0], [22, 3, -1, -1]]], [[[[20, 10.0, 2.5, 17.0, 11.5], [8, -3.5, -6.5, -3.0, -5.5], [39, 1.0, -1.0, 17.0, 4.0], [26, -7.0, 6.5, 23.0, 7.5], [3, 0.5, 5.5, 7.5, 14.5], [29, 6.0, 5.0, 8.0, 10.0], [30, 0.5, 10.0, 16.5, 11.0]], 2.0, 5], [[3, 3, 0, 0], [8, 0, -2, -4], [20, 3, 0, 0], [26, 4, -1, 0], [29, 2, 0, 0], [30, 3, 0, 0], [39, 3, 0, -1]]], [[[[36, -1.5, -4.5, 14.5, -2.5], [25, 4.5, 8.5, 11.5, 10.5], [1, 3.0, -1.0, 10.0, -0.5], [38, 9.5, 1.5, 13.5, 6.5]], 1.0, 4], [[1, 3, 0, -1], [25, 3, 0, 1], [36, 3, -1, -1], [38, 3, 1, 0]]], [[[[30, 7.0, -10.0, 8.0, -8.0], [39, 2.5, -4.0, 18.5, 0.0], [3, -3.5, 7.5, 26.5, 11.5], [36, 3.5, -3.0, 33.5, 6.0], [18, 3.5, -8.5, 6.5, 0.5], [38, 4.5, 6.5, 11.5, 7.0]], 2.0, 4], [[3, 3, -1, 0], [18, 3, 0, -1], [30, 0, 3, -5], [36, 3, 0, -1], [38, 2, 0, 0], [39, 3, 0, -1]]], [[[[7, 8.0, 2.5, 16.0, 4.5], [20, 7.5, 5.5, 11.5, 14.5], [25, -4.0, -10.0, 3.0, -9.0], [1, 0.5, -0.5, 4.5, 0.0]], 2.0, 5], [[1, 1, 0, -1], [7, 2, 1, 0], [20, 3, 0, 0], [25, 2, -1, -2]]], [[[[21, -9.0, -1.0, -2.0, 8.0], [20, -7.5, 2.0, -6.5, 2.5], [36, 6.5, -7.5, 14.5, -7.0], [17, 5.0, 2.0, 6.0, 4.0]], 1.0, 3], [[17, 1, 2, 1], [20, 0, -8, 2], [21, 2, -3, -1], [36, 2, 1, -2]]]], [[[[[38, -3.5, 7.5, 3.5, 16.5], [24, -2.0, 3.0, -1.0, 12.0], [17, 5.5, -9.5, 6.5, -4.5], [13, -3.5, 2.5, -3.0, 3.5], [3, 4.5, -5.0, 8.5, -4.5], [36, 3.5, -4.0, 7.5, 5.0], [20, -0.5, -8.0, 3.5, -6.0]], 2.0, 2], [[3, 1, 1, -2], [13, 0, -2, 1], [17, 1, 1, -3], [20, 1, -1, -2], [24, 1, -1, 0], [36, 1, 0, -1], [38, 1, -1, 1]]], [[[[5, -3.0, 1.5, 1.0, 5.5], [24, -1.5, -10.0, 6.5, -1.0], [19, 1.0, 7.5, 2.0, 11.5], [17, -4.5, 3.5, -4.0, 5.5], [7, 5.5, 10.0, 21.5, 19.0]], 1.0, 2], [[5, 1, -2, 0], [7, 1, 2, 5], [17, 1, -3, 1], [19, 1, 0, 3], [24, 1, -1, -5]]], [[[[17, -8.0, 2.5, 8.0, 6.5], [31, 1.5, 5.5, 9.5, 7.5], [8, 5.0, -2.5, 13.0, -1.5]], 2.0, 3], [[8, 2, 0, -1], [17, 2, -1, 0], [31, 2, 0, 0]]], [[[[5, 4.0, -1.0, 7.0, 8.0], [33, -5.5, -8.0, 10.5, -4.0], [30, -4.0, 5.0, 26.0, 10.0], [18, 7.0, -4.5, 37.0, -3.5], [36, -2.0, 2.0, 28.0, 3.0], [2, 5.0, 10.0, 21.0, 14.0], [22, 1.0, 4.5, 9.0, 5.5]], 1.0, 3], [[2, 2, 1, 2], [5, 2, 1, -1], [18, 2, 1, -2], [22, 2, 0, 1], [30, 2, -1, 1], [33, 2, -2, -2], [36, 2, -1, 0]]], [[[[8, -2.0, -3.5, 0.0, -1.5], [26, 4.0, -8.5, 11.0, 0.5], [22, -4.5, 8.0, -2.5, 10.0], [31, -6.0, 4.5, -5.5, 6.5]], 2.0, 5], [[8, 0, -1, -2], [22, 0, -3, 4], [26, 3, 0, -1], [31, 0, -3, 2]]], [[[[20, -7.0, -9.0, -6.0, -7.0], [26, -5.5, 10.0, 2.5, 19.0]], 2.0, 4], [[20, 0, -4, -5], [26, 3, -1, 0]]], [[[[33, 8.5, 0.5, 38.5, 5.5], [35, -4.0, 4.0, 3.0, 9.0], [10, -5.5, 1.5, -4.5, 3.5], [19, -7.5, -1.5, -0.5, 2.5], [14, 5.5, -10.0, 13.5, -1.0], [30, -4.0, 3.0, 4.0, 4.0], [5, -5.5, 6.0, 10.5, 11.0]], 2.0, 3], [[5, 2, -1, 0], [10, 0, -3, 0], [14, 2, 0, -2], [19, 2, -1, -1], [30, 2, -1, 0], [33, 2, 1, 0], [35, 2, -1, 0]]], [[[[7, -8.0, -9.0, -1.0, -8.5], [10, 3.0, -9.0, 6.0, -5.0], [3, -5.5, -8.0, -2.5, -3.0]], 1.0, 4], [[3, 3, -1, -1], [7, 3, -1, -2], [10, 2, 0, -3]]]], [[[[[7, -0.5, 4.0, 7.5, 8.0], [28, 0.0, -8.5, 3.0, -7.5], [25, -10.0, -2.5, -2.0, -0.5], [3, -2.0, 2.5, 1.0, 6.5], [10, 7.5, -4.5, 10.5, -3.5], [2, -5.0, -8.5, -4.5, -7.5], [11, -0.5, -5.5, 0.0, -0.5]], 2.0, 2], [[2, 0, -3, -5], [3, 1, -1, 0], [7, 1, -1, 1], [10, 1, 1, -2], [11, 1, -1, -2], [25, 1, -3, -1], [28, 1, 0, -3]]], [[[[32, -8.0, -8.0, -7.0, -4.0], [26, -6.0, -4.5, -5.0, 0.5]], 1.0, 2], [[26, 1, -3, -3], [32, 1, -4, -4]]], [[[[19, -9.5, -0.5, -8.5, 0.0], [25, 6.0, -9.0, 7.0, -8.5]], 2.0, 2], [[19, 0, -5, -1], [25, 0, 3, -5]]], [[[[16, -9.5, -7.5, -7.5, -7.0], [29, -0.5, -10.0, 0.0, -8.0]], 2.0, 4], [[16, 0, -5, -4], [29, 0, -1, -5]]], [[[[23, -6.5, 4.5, -4.5, 9.5], [4, 4.0, 8.5, 12.0, 12.5], [5, -6.0, -3.5, 1.0, 1.5], [7, -4.5, -2.0, 11.5, -1.5], [11, -1.0, 0.5, 1.0, 9.5], [15, -1.5, 3.5, 14.5, 5.5], [17, 8.5, -1.0, 11.5, 4.0]], 1.0, 5], [[4, 3, 0, 1], [5, 3, -1, -1], [7, 4, -1, -1], [11, 4, -1, 0], [15, 4, -1, 0], [17, 3, 1, -1], [23, 3, -1, 0]]], [[[[2, 7.5, 5.0, 37.5, 14.0], [1, -9.0, 2.0, -2.0, 6.0], [5, 3.5, 4.0, 10.5, 9.0], [3, -9.5, -1.0, -7.5, 3.0], [16, -9.0, 8.0, -5.0, 12.0]], 1.0, 2], [[1, 1, -5, 1], [2, 1, 3, 2], [3, 1, -5, -1], [5, 1, 1, 2], [16, 1, -5, 4]]], [[[[15, -9.5, 8.5, -9.0, 13.5], [7, -5.0, -7.0, -3.0, -2.0], [16, -3.0, 2.0, 5.0, 2.5]], 1.0, 3], [[7, 2, -2, -2], [15, 2, -3, 2], [16, 2, -1, 0]]], [[[[23, 3.0, 0.5, 5.0, 9.5], [2, -3.5, 9.0, -2.5, 14.0], [13, 0.0, -4.0, 2.0, 5.0], [37, -3.5, 7.5, 12.5, 16.5], [8, 8.0, 7.0, 15.0, 12.0], [7, 8.0, 1.5, 12.0, 6.5], [18, -7.5, 7.0, 8.5, 9.0], [38, 0.5, 4.5, 8.5, 6.5], [17, 6.5, 3.5, 36.5, 4.0]], 1.0, 3], [[2, 2, -1, 2], [7, 2, 2, 0], [8, 2, 2, 1], [13, 2, 0, -1], [17, 2, 1, 0], [18, 2, -2, 1], [23, 2, 0, 0], [37, 2, -1, 1], [38, 2, 0, 1]]]], [[[[[29, -1.5, 5.5, -0.5, 7.5], [23, -3.0, -4.5, 13.0, -3.5], [38, -2.0, -3.5, 2.0, -3.0], [14, 8.0, -8.5, 12.0, -3.5], [37, -2.0, 2.0, 6.0, 4.0], [2, 9.0, 6.0, 10.0, 8.0], [4, -4.5, -4.5, -4.0, -3.5], [10, 3.5, -1.5, 5.5, 0.5], [19, 2.5, 9.5, 9.5, 14.5]], 2.0, 2], [[2, 0, 4, 3], [4, 0, -3, -3], [10, 0, 1, -1], [14, 1, 2, -3], [19, 1, 0, 2], [23, 1, -1, -2], [29, 0, -1, 2], [37, 1, -1, 0], [38, 1, -1, -1]]], [[[[24, -8.5, 1.5, 21.5, 2.5], [29, 5.0, -8.5, 12.0, -6.5], [39, -6.0, 7.5, -2.0, 12.5]], 1.0, 5], [[24, 4, -1, 0], [29, 3, 0, -2], [39, 3, -1, 0]]], [[[[31, -10.0, 1.5, 6.0, 10.5], [28, 3.5, 3.5, 7.5, 8.5], [13, 6.0, 6.0, 8.0, 10.0], [20, 7.0, 3.5, 8.0, 8.5], [19, 7.5, -3.0, 14.5, 6.0], [8, 9.5, 9.0, 12.5, 11.0], [32, 7.0, 9.5, 9.0, 10.0], [9, -4.5, 3.0, -4.0, 8.0], [14, 9.5, -2.0, 10.0, -1.5], [4, 8.0, -2.5, 11.0, -2.0]], 1.0, 5], [[4, 2, 2, -1], [8, 2, 2, 2], [9, 3, -1, 0], [13, 2, 1, 1], [14, 0, 9, -2], [19, 4, 0, -1], [20, 3, 0, 0], [28, 3, 0, 0], [31, 4, -1, 0], [32, 1, 3, 4]]], [[[[39, -4.0, -6.0, 26.0, -5.5], [6, -0.5, -3.0, 7.5, -1.0], [1, -4.5, 1.5, 25.5, 2.0], [8, 1.5, 5.5, 5.5, 10.5], [35, -2.5, -6.5, 13.5, -5.5]], 1.0, 4], [[1, 3, -1, 0], [6, 3, -1, -1], [8, 3, 0, 0], [35, 3, -1, -1], [39, 3, -1, -1]]], [[[[35, -2.0, 4.0, 14.0, 9.0], [16, -1.0, -6.5, 6.0, -1.5], [25, -0.5, -8.0, 0.5, -6.0], [23, 4.5, 6.5, 6.5, 7.5], [33, -6.0, 4.0, -2.0, 4.5], [31, 7.0, 4.5, 7.5, 8.5], [2, -3.5, 8.5, -3.0, 9.5], [3, -1.0, 7.5, 29.0, 11.5]], 2.0, 4], [[2, 0, -2, 4], [3, 3, -1, 0], [16, 2, -1, -1], [23, 0, 2, 3], [25, 0, -1, -4], [31, 1, 1, 1], [33, 1, -2, 1], [35, 3, -1, 0]]], [[[[28, -3.0, 1.5, 1.0, 2.5], [31, 3.5, 7.5, 5.5, 9.5], [1, 1.0, -7.0, 3.0, -6.5], [27, -5.0, 7.0, 3.0, 7.5], [9, 6.0, 10.0, 10.0, 19.0], [32, 6.5, 9.5, 36.5, 10.0], [36, 4.5, 7.0, 5.5, 12.0]], 1.0, 3], [[1, 1, 0, -4], [9, 2, 1, 2], [27, 2, -2, 1], [28, 2, -1, 0], [31, 1, 1, 3], [32, 2, 1, 2], [36, 2, 1, 1]]], [[[[4, -6.0, -6.0, 1.0, 3.0], [2, -6.0, 7.5, 2.0, 9.5], [13, 2.0, 3.0, 32.0, 12.0], [26, 8.5, 9.5, 11.5, 14.5], [38, -7.5, 1.5, 0.5, 5.5], [23, -8.5, 9.0, 7.5, 18.0], [9, 1.0, 2.0, 2.0, 6.0], [12, 3.5, -3.0, 4.0, -2.5], [5, -9.5, -1.5, -5.5, 2.5]], 1.0, 5], [[2, 3, -1, 0], [4, 4, -1, -1], [5, 2, -3, -1], [9, 2, 0, 0], [12, 0, 3, -3], [13, 4, 0, 0], [23, 4, -1, 0], [26, 3, 1, 1], [38, 3, -1, 0]]], [[[[39, 1.0, -1.5, 9.0, -0.5], [35, 9.5, 8.5, 10.0, 9.0], [37, -6.5, -6.0, -2.5, -5.5], [32, -10.0, -3.5, -9.0, 0.5], [34, 1.5, 1.5, 8.5, 5.5], [21, -4.5, 4.5, -4.0, 5.5], [36, -4.5, -5.0, 25.5, 0.0]], 1.0, 2], [[21, 0, -5, 4], [32, 1, -5, -2], [34, 1, 0, 0], [35, 0, 9, 8], [36, 1, -3, -3], [37, 1, -4, -3], [39, 1, 0, -1]]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("case %d" % i, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| case 0 | [[4, 1, 4, 6], [14, 1, 1, -9], [18, 1, 5, 2]] | [[4, 1, 2, 3], [14, 1, 0, -5], [18, 1, 2, 1]] | Failed |
| case 1 | [[5, 1, -8, 4], [15, 1, 4, -2], [17, 1, 1, 2]] | [[5, 1, -4, 2], [15, 1, 2, -1], [17, 1, 0, 1]] | Failed |
| case 2 | [[8, 3, 10, -7], [11, 0, 2, 7], [15, 3, -8, -7], [28, 3, 8, 7], [36, 3, -9, -6]] | [[8, 3, 1, -1], [11, 0, 2, 7], [15, 3, -1, -1], [28, 3, 1, 0], [36, 3, -2, -1]] | Failed |
| case 3 | [[7, 1, -3, 1], [19, 0, -4, 3], [24, 3, -2, -1], [35, 3, 1, -3]] | [[7, 1, -2, 0], [19, 0, -4, 3], [24, 3, -1, -1], [35, 3, 0, -1]] | Failed |
| case 4 | [[4, 0, -1, -4], [22, 2, 2, -3], [26, 2, 0, 0], [33, 3, 4, -4], [34, 3, 0, -5], [37, 2, 1, -1]] | [[4, 0, -1, -4], [22, 2, 0, -1], [26, 2, 0, 0], [33, 3, 0, -1], [34, 3, 0, -1], [37, 2, 0, -1]] | Failed |
| case 5 | [[6, 2, 7, 2], [9, 2, 2, -7]] | [[6, 2, 1, 0], [9, 2, 0, -2]] | Failed |
| case 6 | [[2, 3, 5, -7], [3, 3, -8, 4], [9, 2, -1, -6]] | [[2, 3, 0, -1], [3, 3, -1, 0], [9, 2, -1, -2]] | Failed |
| case 7 | [[1, 3, -4, -5], [15, 2, 0, -4], [17, 1, -4, -2], [26, 2, 3, -5], [28, 1, 1, -2], [32, 1, -1, 4]] | [[1, 3, -1, -1], [15, 2, 0, -1], [17, 1, -2, -1], [26, 2, 0, -2], [28, 1, 0, -1], [32, 1, -1, 2]] | Failed |
SHA-256 / 8f34fe476b354c151dd55da2de9fb451d9d3df47fb196a5fd02b18d6070eb39f
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(objs, base, levels):
out = []
for i, a, b, c, d in objs:
ext = max(c - a, d - b)
lvl = 0
size = base
while size < ext and lvl < levels - 1:
size *= 2
lvl += 1
out.append([i, lvl, math.floor(a / size), math.floor(b / base)])
out.sort()
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[[[4, 4.0, 6.0, 20.0, 6.5], [18, 5.5, 2.5, 21.5, 7.5], [14, 1.5, -8.5, 5.5, 0.5]], 1.0, 2], [[4, 1, 2, 3], [14, 1, 0, -5], [18, 1, 2, 1]]], [[[[17, 1.5, 2.5, 17.5, 4.5], [5, -7.5, 4.5, -6.5, 13.5], [15, 4.0, -1.5, 20.0, -1.0]], 1.0, 2], [[5, 1, -4, 2], [15, 1, 2, -1], [17, 1, 0, 1]]], [[[[36, -9.0, -5.5, -1.0, 3.5], [28, 8.0, 7.5, 10.0, 16.5], [15, -7.5, -6.5, 0.5, -6.0], [11, 2.5, 7.5, 3.0, 8.5], [8, 10.0, -6.5, 18.0, -5.5]], 1.0, 4], [[8, 3, 1, -1], [11, 0, 2, 7], [15, 3, -1, -1], [28, 3, 1, 0], [36, 3, -2, -1]]], [[[[7, -6.0, 3.5, -2.0, 4.0], [19, -7.0, 7.0, -6.0, 7.5], [24, -3.0, -0.5, 13.0, 0.5], [35, 3.5, -6.0, 4.5, 3.0]], 2.0, 4], [[7, 1, -2, 0], [19, 0, -4, 3], [24, 3, -1, -1], [35, 3, 0, -1]]], [[[[34, 1.5, -9.5, 2.0, -0.5], [22, 4.5, -5.0, 8.5, 0.0], [33, 8.0, -7.0, 24.0, -3.0], [26, 1.0, 0.0, 1.5, 5.0], [4, -1.0, -8.0, 0.0, -6.0], [37, 2.0, -1.0, 9.0, 0.0]], 2.0, 4], [[4, 0, -1, -4], [22, 2, 0, -1], [26, 2, 0, 0], [33, 3, 0, -1], [34, 3, 0, -1], [37, 2, 0, -1]]], [[[[6, 7.0, 2.5, 14.0, 11.5], [9, 2.5, -6.5, 5.5, -5.5]], 1.0, 3], [[6, 2, 1, 0], [9, 2, 0, -2]]], [[[[9, -1.0, -6.0, -0.5, -2.0], [2, 5.0, -7.0, 13.0, -6.0], [3, -8.0, 4.5, -6.0, 9.5]], 1.0, 5], [[2, 3, 0, -1], [3, 3, -1, 0], [9, 2, -1, -2]]], [[[[32, -2.0, 8.0, 0.0, 12.0], [17, -6.5, -4.0, -4.5, 0.0], [1, -6.5, -9.0, -3.5, 0.0], [26, 6.5, -10.0, 13.5, -9.5], [28, 3.5, -3.5, 7.5, 0.5], [15, 0.0, -7.5, 8.0, -2.5]], 2.0, 4], [[1, 3, -1, -1], [15, 2, 0, -1], [17, 1, -2, -1], [26, 2, 0, -2], [28, 1, 0, -1], [32, 1, -1, 2]]]], [[[[[3, -6.0, 3.0, -5.5, 7.0], [27, -6.5, -4.5, -5.5, -0.5]], 1.0, 3], [[3, 2, -2, 0], [27, 2, -2, -2]]], [[[[24, -1.0, -6.5, -0.5, -5.5], [19, -1.0, -4.0, 3.0, -3.5], [33, -6.0, -4.0, -5.0, -3.5], [4, -1.5, -2.5, 5.5, 6.5], [37, 7.0, 1.0, 37.0, 3.0], [11, 4.0, 9.0, 5.0, 11.0]], 1.0, 4], [[4, 3, -1, -1], [11, 1, 2, 4], [19, 2, -1, -1], [24, 0, -1, -7], [33, 0, -6, -4], [37, 3, 0, 0]]], [[[[22, -8.5, -4.0, 7.5, 5.0], [16, -5.5, 8.5, 10.5, 10.5]], 2.0, 5], [[16, 3, -1, 0], [22, 3, -1, -1]]], [[[[20, 10.0, 2.5, 17.0, 11.5], [8, -3.5, -6.5, -3.0, -5.5], [39, 1.0, -1.0, 17.0, 4.0], [26, -7.0, 6.5, 23.0, 7.5], [3, 0.5, 5.5, 7.5, 14.5], [29, 6.0, 5.0, 8.0, 10.0], [30, 0.5, 10.0, 16.5, 11.0]], 2.0, 5], [[3, 3, 0, 0], [8, 0, -2, -4], [20, 3, 0, 0], [26, 4, -1, 0], [29, 2, 0, 0], [30, 3, 0, 0], [39, 3, 0, -1]]], [[[[36, -1.5, -4.5, 14.5, -2.5], [25, 4.5, 8.5, 11.5, 10.5], [1, 3.0, -1.0, 10.0, -0.5], [38, 9.5, 1.5, 13.5, 6.5]], 1.0, 4], [[1, 3, 0, -1], [25, 3, 0, 1], [36, 3, -1, -1], [38, 3, 1, 0]]], [[[[30, 7.0, -10.0, 8.0, -8.0], [39, 2.5, -4.0, 18.5, 0.0], [3, -3.5, 7.5, 26.5, 11.5], [36, 3.5, -3.0, 33.5, 6.0], [18, 3.5, -8.5, 6.5, 0.5], [38, 4.5, 6.5, 11.5, 7.0]], 2.0, 4], [[3, 3, -1, 0], [18, 3, 0, -1], [30, 0, 3, -5], [36, 3, 0, -1], [38, 2, 0, 0], [39, 3, 0, -1]]], [[[[7, 8.0, 2.5, 16.0, 4.5], [20, 7.5, 5.5, 11.5, 14.5], [25, -4.0, -10.0, 3.0, -9.0], [1, 0.5, -0.5, 4.5, 0.0]], 2.0, 5], [[1, 1, 0, -1], [7, 2, 1, 0], [20, 3, 0, 0], [25, 2, -1, -2]]], [[[[21, -9.0, -1.0, -2.0, 8.0], [20, -7.5, 2.0, -6.5, 2.5], [36, 6.5, -7.5, 14.5, -7.0], [17, 5.0, 2.0, 6.0, 4.0]], 1.0, 3], [[17, 1, 2, 1], [20, 0, -8, 2], [21, 2, -3, -1], [36, 2, 1, -2]]]], [[[[[38, -3.5, 7.5, 3.5, 16.5], [24, -2.0, 3.0, -1.0, 12.0], [17, 5.5, -9.5, 6.5, -4.5], [13, -3.5, 2.5, -3.0, 3.5], [3, 4.5, -5.0, 8.5, -4.5], [36, 3.5, -4.0, 7.5, 5.0], [20, -0.5, -8.0, 3.5, -6.0]], 2.0, 2], [[3, 1, 1, -2], [13, 0, -2, 1], [17, 1, 1, -3], [20, 1, -1, -2], [24, 1, -1, 0], [36, 1, 0, -1], [38, 1, -1, 1]]], [[[[5, -3.0, 1.5, 1.0, 5.5], [24, -1.5, -10.0, 6.5, -1.0], [19, 1.0, 7.5, 2.0, 11.5], [17, -4.5, 3.5, -4.0, 5.5], [7, 5.5, 10.0, 21.5, 19.0]], 1.0, 2], [[5, 1, -2, 0], [7, 1, 2, 5], [17, 1, -3, 1], [19, 1, 0, 3], [24, 1, -1, -5]]], [[[[17, -8.0, 2.5, 8.0, 6.5], [31, 1.5, 5.5, 9.5, 7.5], [8, 5.0, -2.5, 13.0, -1.5]], 2.0, 3], [[8, 2, 0, -1], [17, 2, -1, 0], [31, 2, 0, 0]]], [[[[5, 4.0, -1.0, 7.0, 8.0], [33, -5.5, -8.0, 10.5, -4.0], [30, -4.0, 5.0, 26.0, 10.0], [18, 7.0, -4.5, 37.0, -3.5], [36, -2.0, 2.0, 28.0, 3.0], [2, 5.0, 10.0, 21.0, 14.0], [22, 1.0, 4.5, 9.0, 5.5]], 1.0, 3], [[2, 2, 1, 2], [5, 2, 1, -1], [18, 2, 1, -2], [22, 2, 0, 1], [30, 2, -1, 1], [33, 2, -2, -2], [36, 2, -1, 0]]], [[[[8, -2.0, -3.5, 0.0, -1.5], [26, 4.0, -8.5, 11.0, 0.5], [22, -4.5, 8.0, -2.5, 10.0], [31, -6.0, 4.5, -5.5, 6.5]], 2.0, 5], [[8, 0, -1, -2], [22, 0, -3, 4], [26, 3, 0, -1], [31, 0, -3, 2]]], [[[[20, -7.0, -9.0, -6.0, -7.0], [26, -5.5, 10.0, 2.5, 19.0]], 2.0, 4], [[20, 0, -4, -5], [26, 3, -1, 0]]], [[[[33, 8.5, 0.5, 38.5, 5.5], [35, -4.0, 4.0, 3.0, 9.0], [10, -5.5, 1.5, -4.5, 3.5], [19, -7.5, -1.5, -0.5, 2.5], [14, 5.5, -10.0, 13.5, -1.0], [30, -4.0, 3.0, 4.0, 4.0], [5, -5.5, 6.0, 10.5, 11.0]], 2.0, 3], [[5, 2, -1, 0], [10, 0, -3, 0], [14, 2, 0, -2], [19, 2, -1, -1], [30, 2, -1, 0], [33, 2, 1, 0], [35, 2, -1, 0]]], [[[[7, -8.0, -9.0, -1.0, -8.5], [10, 3.0, -9.0, 6.0, -5.0], [3, -5.5, -8.0, -2.5, -3.0]], 1.0, 4], [[3, 3, -1, -1], [7, 3, -1, -2], [10, 2, 0, -3]]]], [[[[[7, -0.5, 4.0, 7.5, 8.0], [28, 0.0, -8.5, 3.0, -7.5], [25, -10.0, -2.5, -2.0, -0.5], [3, -2.0, 2.5, 1.0, 6.5], [10, 7.5, -4.5, 10.5, -3.5], [2, -5.0, -8.5, -4.5, -7.5], [11, -0.5, -5.5, 0.0, -0.5]], 2.0, 2], [[2, 0, -3, -5], [3, 1, -1, 0], [7, 1, -1, 1], [10, 1, 1, -2], [11, 1, -1, -2], [25, 1, -3, -1], [28, 1, 0, -3]]], [[[[32, -8.0, -8.0, -7.0, -4.0], [26, -6.0, -4.5, -5.0, 0.5]], 1.0, 2], [[26, 1, -3, -3], [32, 1, -4, -4]]], [[[[19, -9.5, -0.5, -8.5, 0.0], [25, 6.0, -9.0, 7.0, -8.5]], 2.0, 2], [[19, 0, -5, -1], [25, 0, 3, -5]]], [[[[16, -9.5, -7.5, -7.5, -7.0], [29, -0.5, -10.0, 0.0, -8.0]], 2.0, 4], [[16, 0, -5, -4], [29, 0, -1, -5]]], [[[[23, -6.5, 4.5, -4.5, 9.5], [4, 4.0, 8.5, 12.0, 12.5], [5, -6.0, -3.5, 1.0, 1.5], [7, -4.5, -2.0, 11.5, -1.5], [11, -1.0, 0.5, 1.0, 9.5], [15, -1.5, 3.5, 14.5, 5.5], [17, 8.5, -1.0, 11.5, 4.0]], 1.0, 5], [[4, 3, 0, 1], [5, 3, -1, -1], [7, 4, -1, -1], [11, 4, -1, 0], [15, 4, -1, 0], [17, 3, 1, -1], [23, 3, -1, 0]]], [[[[2, 7.5, 5.0, 37.5, 14.0], [1, -9.0, 2.0, -2.0, 6.0], [5, 3.5, 4.0, 10.5, 9.0], [3, -9.5, -1.0, -7.5, 3.0], [16, -9.0, 8.0, -5.0, 12.0]], 1.0, 2], [[1, 1, -5, 1], [2, 1, 3, 2], [3, 1, -5, -1], [5, 1, 1, 2], [16, 1, -5, 4]]], [[[[15, -9.5, 8.5, -9.0, 13.5], [7, -5.0, -7.0, -3.0, -2.0], [16, -3.0, 2.0, 5.0, 2.5]], 1.0, 3], [[7, 2, -2, -2], [15, 2, -3, 2], [16, 2, -1, 0]]], [[[[23, 3.0, 0.5, 5.0, 9.5], [2, -3.5, 9.0, -2.5, 14.0], [13, 0.0, -4.0, 2.0, 5.0], [37, -3.5, 7.5, 12.5, 16.5], [8, 8.0, 7.0, 15.0, 12.0], [7, 8.0, 1.5, 12.0, 6.5], [18, -7.5, 7.0, 8.5, 9.0], [38, 0.5, 4.5, 8.5, 6.5], [17, 6.5, 3.5, 36.5, 4.0]], 1.0, 3], [[2, 2, -1, 2], [7, 2, 2, 0], [8, 2, 2, 1], [13, 2, 0, -1], [17, 2, 1, 0], [18, 2, -2, 1], [23, 2, 0, 0], [37, 2, -1, 1], [38, 2, 0, 1]]]], [[[[[29, -1.5, 5.5, -0.5, 7.5], [23, -3.0, -4.5, 13.0, -3.5], [38, -2.0, -3.5, 2.0, -3.0], [14, 8.0, -8.5, 12.0, -3.5], [37, -2.0, 2.0, 6.0, 4.0], [2, 9.0, 6.0, 10.0, 8.0], [4, -4.5, -4.5, -4.0, -3.5], [10, 3.5, -1.5, 5.5, 0.5], [19, 2.5, 9.5, 9.5, 14.5]], 2.0, 2], [[2, 0, 4, 3], [4, 0, -3, -3], [10, 0, 1, -1], [14, 1, 2, -3], [19, 1, 0, 2], [23, 1, -1, -2], [29, 0, -1, 2], [37, 1, -1, 0], [38, 1, -1, -1]]], [[[[24, -8.5, 1.5, 21.5, 2.5], [29, 5.0, -8.5, 12.0, -6.5], [39, -6.0, 7.5, -2.0, 12.5]], 1.0, 5], [[24, 4, -1, 0], [29, 3, 0, -2], [39, 3, -1, 0]]], [[[[31, -10.0, 1.5, 6.0, 10.5], [28, 3.5, 3.5, 7.5, 8.5], [13, 6.0, 6.0, 8.0, 10.0], [20, 7.0, 3.5, 8.0, 8.5], [19, 7.5, -3.0, 14.5, 6.0], [8, 9.5, 9.0, 12.5, 11.0], [32, 7.0, 9.5, 9.0, 10.0], [9, -4.5, 3.0, -4.0, 8.0], [14, 9.5, -2.0, 10.0, -1.5], [4, 8.0, -2.5, 11.0, -2.0]], 1.0, 5], [[4, 2, 2, -1], [8, 2, 2, 2], [9, 3, -1, 0], [13, 2, 1, 1], [14, 0, 9, -2], [19, 4, 0, -1], [20, 3, 0, 0], [28, 3, 0, 0], [31, 4, -1, 0], [32, 1, 3, 4]]], [[[[39, -4.0, -6.0, 26.0, -5.5], [6, -0.5, -3.0, 7.5, -1.0], [1, -4.5, 1.5, 25.5, 2.0], [8, 1.5, 5.5, 5.5, 10.5], [35, -2.5, -6.5, 13.5, -5.5]], 1.0, 4], [[1, 3, -1, 0], [6, 3, -1, -1], [8, 3, 0, 0], [35, 3, -1, -1], [39, 3, -1, -1]]], [[[[35, -2.0, 4.0, 14.0, 9.0], [16, -1.0, -6.5, 6.0, -1.5], [25, -0.5, -8.0, 0.5, -6.0], [23, 4.5, 6.5, 6.5, 7.5], [33, -6.0, 4.0, -2.0, 4.5], [31, 7.0, 4.5, 7.5, 8.5], [2, -3.5, 8.5, -3.0, 9.5], [3, -1.0, 7.5, 29.0, 11.5]], 2.0, 4], [[2, 0, -2, 4], [3, 3, -1, 0], [16, 2, -1, -1], [23, 0, 2, 3], [25, 0, -1, -4], [31, 1, 1, 1], [33, 1, -2, 1], [35, 3, -1, 0]]], [[[[28, -3.0, 1.5, 1.0, 2.5], [31, 3.5, 7.5, 5.5, 9.5], [1, 1.0, -7.0, 3.0, -6.5], [27, -5.0, 7.0, 3.0, 7.5], [9, 6.0, 10.0, 10.0, 19.0], [32, 6.5, 9.5, 36.5, 10.0], [36, 4.5, 7.0, 5.5, 12.0]], 1.0, 3], [[1, 1, 0, -4], [9, 2, 1, 2], [27, 2, -2, 1], [28, 2, -1, 0], [31, 1, 1, 3], [32, 2, 1, 2], [36, 2, 1, 1]]], [[[[4, -6.0, -6.0, 1.0, 3.0], [2, -6.0, 7.5, 2.0, 9.5], [13, 2.0, 3.0, 32.0, 12.0], [26, 8.5, 9.5, 11.5, 14.5], [38, -7.5, 1.5, 0.5, 5.5], [23, -8.5, 9.0, 7.5, 18.0], [9, 1.0, 2.0, 2.0, 6.0], [12, 3.5, -3.0, 4.0, -2.5], [5, -9.5, -1.5, -5.5, 2.5]], 1.0, 5], [[2, 3, -1, 0], [4, 4, -1, -1], [5, 2, -3, -1], [9, 2, 0, 0], [12, 0, 3, -3], [13, 4, 0, 0], [23, 4, -1, 0], [26, 3, 1, 1], [38, 3, -1, 0]]], [[[[39, 1.0, -1.5, 9.0, -0.5], [35, 9.5, 8.5, 10.0, 9.0], [37, -6.5, -6.0, -2.5, -5.5], [32, -10.0, -3.5, -9.0, 0.5], [34, 1.5, 1.5, 8.5, 5.5], [21, -4.5, 4.5, -4.0, 5.5], [36, -4.5, -5.0, 25.5, 0.0]], 1.0, 2], [[21, 0, -5, 4], [32, 1, -5, -2], [34, 1, 0, 0], [35, 0, 9, 8], [36, 1, -3, -3], [37, 1, -4, -3], [39, 1, 0, -1]]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("case %d" % i, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| case 0 | [[4, 1, 2, 6], [14, 1, 0, -9], [18, 1, 2, 2]] | [[4, 1, 2, 3], [14, 1, 0, -5], [18, 1, 2, 1]] | Failed |
| case 1 | [[5, 1, -4, 4], [15, 1, 2, -2], [17, 1, 0, 2]] | [[5, 1, -4, 2], [15, 1, 2, -1], [17, 1, 0, 1]] | Failed |
| case 2 | [[8, 3, 1, -7], [11, 0, 2, 7], [15, 3, -1, -7], [28, 3, 1, 7], [36, 3, -2, -6]] | [[8, 3, 1, -1], [11, 0, 2, 7], [15, 3, -1, -1], [28, 3, 1, 0], [36, 3, -2, -1]] | Failed |
| case 3 | [[7, 1, -2, 1], [19, 0, -4, 3], [24, 3, -1, -1], [35, 3, 0, -3]] | [[7, 1, -2, 0], [19, 0, -4, 3], [24, 3, -1, -1], [35, 3, 0, -1]] | Failed |
| case 4 | [[4, 0, -1, -4], [22, 2, 0, -3], [26, 2, 0, 0], [33, 3, 0, -4], [34, 3, 0, -5], [37, 2, 0, -1]] | [[4, 0, -1, -4], [22, 2, 0, -1], [26, 2, 0, 0], [33, 3, 0, -1], [34, 3, 0, -1], [37, 2, 0, -1]] | Failed |
| case 5 | [[6, 2, 1, 2], [9, 2, 0, -7]] | [[6, 2, 1, 0], [9, 2, 0, -2]] | Failed |
| case 6 | [[2, 3, 0, -7], [3, 3, -1, 4], [9, 2, -1, -6]] | [[2, 3, 0, -1], [3, 3, -1, 0], [9, 2, -1, -2]] | Failed |
| case 7 | [[1, 3, -1, -5], [15, 2, 0, -4], [17, 1, -2, -2], [26, 2, 0, -5], [28, 1, 0, -2], [32, 1, -1, 4]] | [[1, 3, -1, -1], [15, 2, 0, -1], [17, 1, -2, -1], [26, 2, 0, -2], [28, 1, 0, -1], [32, 1, -1, 2]] | Failed |
SHA-256 / 91e3ea2bc767e5426003a79ef566cf7beba838afe83172705b2ec6d9a1bce6a3
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(objs, base, levels):
out = []
for i, a, b, c, d in objs:
ext = max(c - a, d - b)
lvl = 0
size = base
while size < ext and lvl < levels - 1:
size *= 2
lvl += 1
out.append([i, lvl, math.floor(a / size), math.floor(b / size)])
out.sort()
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[[[4, 4.0, 6.0, 20.0, 6.5], [18, 5.5, 2.5, 21.5, 7.5], [14, 1.5, -8.5, 5.5, 0.5]], 1.0, 2], [[4, 1, 2, 3], [14, 1, 0, -5], [18, 1, 2, 1]]], [[[[17, 1.5, 2.5, 17.5, 4.5], [5, -7.5, 4.5, -6.5, 13.5], [15, 4.0, -1.5, 20.0, -1.0]], 1.0, 2], [[5, 1, -4, 2], [15, 1, 2, -1], [17, 1, 0, 1]]], [[[[36, -9.0, -5.5, -1.0, 3.5], [28, 8.0, 7.5, 10.0, 16.5], [15, -7.5, -6.5, 0.5, -6.0], [11, 2.5, 7.5, 3.0, 8.5], [8, 10.0, -6.5, 18.0, -5.5]], 1.0, 4], [[8, 3, 1, -1], [11, 0, 2, 7], [15, 3, -1, -1], [28, 3, 1, 0], [36, 3, -2, -1]]], [[[[7, -6.0, 3.5, -2.0, 4.0], [19, -7.0, 7.0, -6.0, 7.5], [24, -3.0, -0.5, 13.0, 0.5], [35, 3.5, -6.0, 4.5, 3.0]], 2.0, 4], [[7, 1, -2, 0], [19, 0, -4, 3], [24, 3, -1, -1], [35, 3, 0, -1]]], [[[[34, 1.5, -9.5, 2.0, -0.5], [22, 4.5, -5.0, 8.5, 0.0], [33, 8.0, -7.0, 24.0, -3.0], [26, 1.0, 0.0, 1.5, 5.0], [4, -1.0, -8.0, 0.0, -6.0], [37, 2.0, -1.0, 9.0, 0.0]], 2.0, 4], [[4, 0, -1, -4], [22, 2, 0, -1], [26, 2, 0, 0], [33, 3, 0, -1], [34, 3, 0, -1], [37, 2, 0, -1]]], [[[[6, 7.0, 2.5, 14.0, 11.5], [9, 2.5, -6.5, 5.5, -5.5]], 1.0, 3], [[6, 2, 1, 0], [9, 2, 0, -2]]], [[[[9, -1.0, -6.0, -0.5, -2.0], [2, 5.0, -7.0, 13.0, -6.0], [3, -8.0, 4.5, -6.0, 9.5]], 1.0, 5], [[2, 3, 0, -1], [3, 3, -1, 0], [9, 2, -1, -2]]], [[[[32, -2.0, 8.0, 0.0, 12.0], [17, -6.5, -4.0, -4.5, 0.0], [1, -6.5, -9.0, -3.5, 0.0], [26, 6.5, -10.0, 13.5, -9.5], [28, 3.5, -3.5, 7.5, 0.5], [15, 0.0, -7.5, 8.0, -2.5]], 2.0, 4], [[1, 3, -1, -1], [15, 2, 0, -1], [17, 1, -2, -1], [26, 2, 0, -2], [28, 1, 0, -1], [32, 1, -1, 2]]]], [[[[[3, -6.0, 3.0, -5.5, 7.0], [27, -6.5, -4.5, -5.5, -0.5]], 1.0, 3], [[3, 2, -2, 0], [27, 2, -2, -2]]], [[[[24, -1.0, -6.5, -0.5, -5.5], [19, -1.0, -4.0, 3.0, -3.5], [33, -6.0, -4.0, -5.0, -3.5], [4, -1.5, -2.5, 5.5, 6.5], [37, 7.0, 1.0, 37.0, 3.0], [11, 4.0, 9.0, 5.0, 11.0]], 1.0, 4], [[4, 3, -1, -1], [11, 1, 2, 4], [19, 2, -1, -1], [24, 0, -1, -7], [33, 0, -6, -4], [37, 3, 0, 0]]], [[[[22, -8.5, -4.0, 7.5, 5.0], [16, -5.5, 8.5, 10.5, 10.5]], 2.0, 5], [[16, 3, -1, 0], [22, 3, -1, -1]]], [[[[20, 10.0, 2.5, 17.0, 11.5], [8, -3.5, -6.5, -3.0, -5.5], [39, 1.0, -1.0, 17.0, 4.0], [26, -7.0, 6.5, 23.0, 7.5], [3, 0.5, 5.5, 7.5, 14.5], [29, 6.0, 5.0, 8.0, 10.0], [30, 0.5, 10.0, 16.5, 11.0]], 2.0, 5], [[3, 3, 0, 0], [8, 0, -2, -4], [20, 3, 0, 0], [26, 4, -1, 0], [29, 2, 0, 0], [30, 3, 0, 0], [39, 3, 0, -1]]], [[[[36, -1.5, -4.5, 14.5, -2.5], [25, 4.5, 8.5, 11.5, 10.5], [1, 3.0, -1.0, 10.0, -0.5], [38, 9.5, 1.5, 13.5, 6.5]], 1.0, 4], [[1, 3, 0, -1], [25, 3, 0, 1], [36, 3, -1, -1], [38, 3, 1, 0]]], [[[[30, 7.0, -10.0, 8.0, -8.0], [39, 2.5, -4.0, 18.5, 0.0], [3, -3.5, 7.5, 26.5, 11.5], [36, 3.5, -3.0, 33.5, 6.0], [18, 3.5, -8.5, 6.5, 0.5], [38, 4.5, 6.5, 11.5, 7.0]], 2.0, 4], [[3, 3, -1, 0], [18, 3, 0, -1], [30, 0, 3, -5], [36, 3, 0, -1], [38, 2, 0, 0], [39, 3, 0, -1]]], [[[[7, 8.0, 2.5, 16.0, 4.5], [20, 7.5, 5.5, 11.5, 14.5], [25, -4.0, -10.0, 3.0, -9.0], [1, 0.5, -0.5, 4.5, 0.0]], 2.0, 5], [[1, 1, 0, -1], [7, 2, 1, 0], [20, 3, 0, 0], [25, 2, -1, -2]]], [[[[21, -9.0, -1.0, -2.0, 8.0], [20, -7.5, 2.0, -6.5, 2.5], [36, 6.5, -7.5, 14.5, -7.0], [17, 5.0, 2.0, 6.0, 4.0]], 1.0, 3], [[17, 1, 2, 1], [20, 0, -8, 2], [21, 2, -3, -1], [36, 2, 1, -2]]]], [[[[[38, -3.5, 7.5, 3.5, 16.5], [24, -2.0, 3.0, -1.0, 12.0], [17, 5.5, -9.5, 6.5, -4.5], [13, -3.5, 2.5, -3.0, 3.5], [3, 4.5, -5.0, 8.5, -4.5], [36, 3.5, -4.0, 7.5, 5.0], [20, -0.5, -8.0, 3.5, -6.0]], 2.0, 2], [[3, 1, 1, -2], [13, 0, -2, 1], [17, 1, 1, -3], [20, 1, -1, -2], [24, 1, -1, 0], [36, 1, 0, -1], [38, 1, -1, 1]]], [[[[5, -3.0, 1.5, 1.0, 5.5], [24, -1.5, -10.0, 6.5, -1.0], [19, 1.0, 7.5, 2.0, 11.5], [17, -4.5, 3.5, -4.0, 5.5], [7, 5.5, 10.0, 21.5, 19.0]], 1.0, 2], [[5, 1, -2, 0], [7, 1, 2, 5], [17, 1, -3, 1], [19, 1, 0, 3], [24, 1, -1, -5]]], [[[[17, -8.0, 2.5, 8.0, 6.5], [31, 1.5, 5.5, 9.5, 7.5], [8, 5.0, -2.5, 13.0, -1.5]], 2.0, 3], [[8, 2, 0, -1], [17, 2, -1, 0], [31, 2, 0, 0]]], [[[[5, 4.0, -1.0, 7.0, 8.0], [33, -5.5, -8.0, 10.5, -4.0], [30, -4.0, 5.0, 26.0, 10.0], [18, 7.0, -4.5, 37.0, -3.5], [36, -2.0, 2.0, 28.0, 3.0], [2, 5.0, 10.0, 21.0, 14.0], [22, 1.0, 4.5, 9.0, 5.5]], 1.0, 3], [[2, 2, 1, 2], [5, 2, 1, -1], [18, 2, 1, -2], [22, 2, 0, 1], [30, 2, -1, 1], [33, 2, -2, -2], [36, 2, -1, 0]]], [[[[8, -2.0, -3.5, 0.0, -1.5], [26, 4.0, -8.5, 11.0, 0.5], [22, -4.5, 8.0, -2.5, 10.0], [31, -6.0, 4.5, -5.5, 6.5]], 2.0, 5], [[8, 0, -1, -2], [22, 0, -3, 4], [26, 3, 0, -1], [31, 0, -3, 2]]], [[[[20, -7.0, -9.0, -6.0, -7.0], [26, -5.5, 10.0, 2.5, 19.0]], 2.0, 4], [[20, 0, -4, -5], [26, 3, -1, 0]]], [[[[33, 8.5, 0.5, 38.5, 5.5], [35, -4.0, 4.0, 3.0, 9.0], [10, -5.5, 1.5, -4.5, 3.5], [19, -7.5, -1.5, -0.5, 2.5], [14, 5.5, -10.0, 13.5, -1.0], [30, -4.0, 3.0, 4.0, 4.0], [5, -5.5, 6.0, 10.5, 11.0]], 2.0, 3], [[5, 2, -1, 0], [10, 0, -3, 0], [14, 2, 0, -2], [19, 2, -1, -1], [30, 2, -1, 0], [33, 2, 1, 0], [35, 2, -1, 0]]], [[[[7, -8.0, -9.0, -1.0, -8.5], [10, 3.0, -9.0, 6.0, -5.0], [3, -5.5, -8.0, -2.5, -3.0]], 1.0, 4], [[3, 3, -1, -1], [7, 3, -1, -2], [10, 2, 0, -3]]]], [[[[[7, -0.5, 4.0, 7.5, 8.0], [28, 0.0, -8.5, 3.0, -7.5], [25, -10.0, -2.5, -2.0, -0.5], [3, -2.0, 2.5, 1.0, 6.5], [10, 7.5, -4.5, 10.5, -3.5], [2, -5.0, -8.5, -4.5, -7.5], [11, -0.5, -5.5, 0.0, -0.5]], 2.0, 2], [[2, 0, -3, -5], [3, 1, -1, 0], [7, 1, -1, 1], [10, 1, 1, -2], [11, 1, -1, -2], [25, 1, -3, -1], [28, 1, 0, -3]]], [[[[32, -8.0, -8.0, -7.0, -4.0], [26, -6.0, -4.5, -5.0, 0.5]], 1.0, 2], [[26, 1, -3, -3], [32, 1, -4, -4]]], [[[[19, -9.5, -0.5, -8.5, 0.0], [25, 6.0, -9.0, 7.0, -8.5]], 2.0, 2], [[19, 0, -5, -1], [25, 0, 3, -5]]], [[[[16, -9.5, -7.5, -7.5, -7.0], [29, -0.5, -10.0, 0.0, -8.0]], 2.0, 4], [[16, 0, -5, -4], [29, 0, -1, -5]]], [[[[23, -6.5, 4.5, -4.5, 9.5], [4, 4.0, 8.5, 12.0, 12.5], [5, -6.0, -3.5, 1.0, 1.5], [7, -4.5, -2.0, 11.5, -1.5], [11, -1.0, 0.5, 1.0, 9.5], [15, -1.5, 3.5, 14.5, 5.5], [17, 8.5, -1.0, 11.5, 4.0]], 1.0, 5], [[4, 3, 0, 1], [5, 3, -1, -1], [7, 4, -1, -1], [11, 4, -1, 0], [15, 4, -1, 0], [17, 3, 1, -1], [23, 3, -1, 0]]], [[[[2, 7.5, 5.0, 37.5, 14.0], [1, -9.0, 2.0, -2.0, 6.0], [5, 3.5, 4.0, 10.5, 9.0], [3, -9.5, -1.0, -7.5, 3.0], [16, -9.0, 8.0, -5.0, 12.0]], 1.0, 2], [[1, 1, -5, 1], [2, 1, 3, 2], [3, 1, -5, -1], [5, 1, 1, 2], [16, 1, -5, 4]]], [[[[15, -9.5, 8.5, -9.0, 13.5], [7, -5.0, -7.0, -3.0, -2.0], [16, -3.0, 2.0, 5.0, 2.5]], 1.0, 3], [[7, 2, -2, -2], [15, 2, -3, 2], [16, 2, -1, 0]]], [[[[23, 3.0, 0.5, 5.0, 9.5], [2, -3.5, 9.0, -2.5, 14.0], [13, 0.0, -4.0, 2.0, 5.0], [37, -3.5, 7.5, 12.5, 16.5], [8, 8.0, 7.0, 15.0, 12.0], [7, 8.0, 1.5, 12.0, 6.5], [18, -7.5, 7.0, 8.5, 9.0], [38, 0.5, 4.5, 8.5, 6.5], [17, 6.5, 3.5, 36.5, 4.0]], 1.0, 3], [[2, 2, -1, 2], [7, 2, 2, 0], [8, 2, 2, 1], [13, 2, 0, -1], [17, 2, 1, 0], [18, 2, -2, 1], [23, 2, 0, 0], [37, 2, -1, 1], [38, 2, 0, 1]]]], [[[[[29, -1.5, 5.5, -0.5, 7.5], [23, -3.0, -4.5, 13.0, -3.5], [38, -2.0, -3.5, 2.0, -3.0], [14, 8.0, -8.5, 12.0, -3.5], [37, -2.0, 2.0, 6.0, 4.0], [2, 9.0, 6.0, 10.0, 8.0], [4, -4.5, -4.5, -4.0, -3.5], [10, 3.5, -1.5, 5.5, 0.5], [19, 2.5, 9.5, 9.5, 14.5]], 2.0, 2], [[2, 0, 4, 3], [4, 0, -3, -3], [10, 0, 1, -1], [14, 1, 2, -3], [19, 1, 0, 2], [23, 1, -1, -2], [29, 0, -1, 2], [37, 1, -1, 0], [38, 1, -1, -1]]], [[[[24, -8.5, 1.5, 21.5, 2.5], [29, 5.0, -8.5, 12.0, -6.5], [39, -6.0, 7.5, -2.0, 12.5]], 1.0, 5], [[24, 4, -1, 0], [29, 3, 0, -2], [39, 3, -1, 0]]], [[[[31, -10.0, 1.5, 6.0, 10.5], [28, 3.5, 3.5, 7.5, 8.5], [13, 6.0, 6.0, 8.0, 10.0], [20, 7.0, 3.5, 8.0, 8.5], [19, 7.5, -3.0, 14.5, 6.0], [8, 9.5, 9.0, 12.5, 11.0], [32, 7.0, 9.5, 9.0, 10.0], [9, -4.5, 3.0, -4.0, 8.0], [14, 9.5, -2.0, 10.0, -1.5], [4, 8.0, -2.5, 11.0, -2.0]], 1.0, 5], [[4, 2, 2, -1], [8, 2, 2, 2], [9, 3, -1, 0], [13, 2, 1, 1], [14, 0, 9, -2], [19, 4, 0, -1], [20, 3, 0, 0], [28, 3, 0, 0], [31, 4, -1, 0], [32, 1, 3, 4]]], [[[[39, -4.0, -6.0, 26.0, -5.5], [6, -0.5, -3.0, 7.5, -1.0], [1, -4.5, 1.5, 25.5, 2.0], [8, 1.5, 5.5, 5.5, 10.5], [35, -2.5, -6.5, 13.5, -5.5]], 1.0, 4], [[1, 3, -1, 0], [6, 3, -1, -1], [8, 3, 0, 0], [35, 3, -1, -1], [39, 3, -1, -1]]], [[[[35, -2.0, 4.0, 14.0, 9.0], [16, -1.0, -6.5, 6.0, -1.5], [25, -0.5, -8.0, 0.5, -6.0], [23, 4.5, 6.5, 6.5, 7.5], [33, -6.0, 4.0, -2.0, 4.5], [31, 7.0, 4.5, 7.5, 8.5], [2, -3.5, 8.5, -3.0, 9.5], [3, -1.0, 7.5, 29.0, 11.5]], 2.0, 4], [[2, 0, -2, 4], [3, 3, -1, 0], [16, 2, -1, -1], [23, 0, 2, 3], [25, 0, -1, -4], [31, 1, 1, 1], [33, 1, -2, 1], [35, 3, -1, 0]]], [[[[28, -3.0, 1.5, 1.0, 2.5], [31, 3.5, 7.5, 5.5, 9.5], [1, 1.0, -7.0, 3.0, -6.5], [27, -5.0, 7.0, 3.0, 7.5], [9, 6.0, 10.0, 10.0, 19.0], [32, 6.5, 9.5, 36.5, 10.0], [36, 4.5, 7.0, 5.5, 12.0]], 1.0, 3], [[1, 1, 0, -4], [9, 2, 1, 2], [27, 2, -2, 1], [28, 2, -1, 0], [31, 1, 1, 3], [32, 2, 1, 2], [36, 2, 1, 1]]], [[[[4, -6.0, -6.0, 1.0, 3.0], [2, -6.0, 7.5, 2.0, 9.5], [13, 2.0, 3.0, 32.0, 12.0], [26, 8.5, 9.5, 11.5, 14.5], [38, -7.5, 1.5, 0.5, 5.5], [23, -8.5, 9.0, 7.5, 18.0], [9, 1.0, 2.0, 2.0, 6.0], [12, 3.5, -3.0, 4.0, -2.5], [5, -9.5, -1.5, -5.5, 2.5]], 1.0, 5], [[2, 3, -1, 0], [4, 4, -1, -1], [5, 2, -3, -1], [9, 2, 0, 0], [12, 0, 3, -3], [13, 4, 0, 0], [23, 4, -1, 0], [26, 3, 1, 1], [38, 3, -1, 0]]], [[[[39, 1.0, -1.5, 9.0, -0.5], [35, 9.5, 8.5, 10.0, 9.0], [37, -6.5, -6.0, -2.5, -5.5], [32, -10.0, -3.5, -9.0, 0.5], [34, 1.5, 1.5, 8.5, 5.5], [21, -4.5, 4.5, -4.0, 5.5], [36, -4.5, -5.0, 25.5, 0.0]], 1.0, 2], [[21, 0, -5, 4], [32, 1, -5, -2], [34, 1, 0, 0], [35, 0, 9, 8], [36, 1, -3, -3], [37, 1, -4, -3], [39, 1, 0, -1]]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("case %d" % i, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| case 0 | [[4, 1, 2, 3], [14, 1, 0, -5], [18, 1, 2, 1]] | [[4, 1, 2, 3], [14, 1, 0, -5], [18, 1, 2, 1]] | Passed |
| case 1 | [[5, 1, -4, 2], [15, 1, 2, -1], [17, 1, 0, 1]] | [[5, 1, -4, 2], [15, 1, 2, -1], [17, 1, 0, 1]] | Passed |
| case 2 | [[8, 3, 1, -1], [11, 0, 2, 7], [15, 3, -1, -1], [28, 3, 1, 0], [36, 3, -2, -1]] | [[8, 3, 1, -1], [11, 0, 2, 7], [15, 3, -1, -1], [28, 3, 1, 0], [36, 3, -2, -1]] | Passed |
| case 3 | [[7, 1, -2, 0], [19, 0, -4, 3], [24, 3, -1, -1], [35, 3, 0, -1]] | [[7, 1, -2, 0], [19, 0, -4, 3], [24, 3, -1, -1], [35, 3, 0, -1]] | Passed |
| case 4 | [[4, 0, -1, -4], [22, 2, 0, -1], [26, 2, 0, 0], [33, 3, 0, -1], [34, 3, 0, -1], [37, 2, 0, -1]] | [[4, 0, -1, -4], [22, 2, 0, -1], [26, 2, 0, 0], [33, 3, 0, -1], [34, 3, 0, -1], [37, 2, 0, -1]] | Passed |
| case 5 | [[6, 2, 1, 0], [9, 2, 0, -2]] | [[6, 2, 1, 0], [9, 2, 0, -2]] | Passed |
| case 6 | [[2, 3, 0, -1], [3, 3, -1, 0], [9, 2, -1, -2]] | [[2, 3, 0, -1], [3, 3, -1, 0], [9, 2, -1, -2]] | Passed |
| case 7 | [[1, 3, -1, -1], [15, 2, 0, -1], [17, 1, -2, -1], [26, 2, 0, -2], [28, 1, 0, -1], [32, 1, -1, 2]] | [[1, 3, -1, -1], [15, 2, 0, -1], [17, 1, -2, -1], [26, 2, 0, -2], [28, 1, 0, -1], [32, 1, -1, 2]] | Passed |
SHA-256 / 379ee689d38485bbcf157b544ee02da0373798ee958d8837a713ddb78eb9c0c7
Verification & scope
A deterministic bounded teaching model with stipulated toy conventions; not a production physics engine or spatial index. 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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:51:00.598035+00:00.
Case digest / 46ed72b297d590300cb87cfb02b37b11102bdb9ea345d45c989be5cedc1e957d