FA-87666 / Collision detection broadphase / Open access
Centre uses the neighbouring axis maximum · case 01
Axis variances mix two axes.
ROOT CAUSE
Maximum is read from column 3+ax.
VERIFIED REPAIR
Max coordinates live at columns 4..6.
Unsuccessful approach: Reading the min from column ax shifts the other endpoint.
Case contract
solve(boxes): 3D sweep-and-prune axis selection. Boxes [id,minx,miny,minz,maxx,maxy,maxz]. Pick the axis with the largest population variance of box centres (first axis on ties), then order ids by (min on that axis, id). Return [axis, variance rounded to 6, ordered ids].
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(boxes):
n = len(boxes)
best_axis, best_var = 0, -1.0
for ax in (0, 1, 2):
cs_ = [(b[1 + ax] + b[3 + ax]) / 2 for b in boxes]
mean = sum(cs_) / n
var = sum((c - mean) ** 2 for c in cs_) / n
if var > best_var:
best_axis, best_var = ax, var
order = [b[0] for b in sorted(boxes, key=lambda b: (b[1 + best_axis], b[0]))]
return [best_axis, round(best_var, 6), order]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[[[23, 2, 9, 0, 11, 12, 8], [35, 2, 3, 7, 2, 13, 17]]], [2, 16.0, [23, 35]]], [[[[28, 12, 13, 1, 14, 25, 5], [36, 10, 28, 0, 10, 32, 6], [17, 4, 16, 0, 7, 28, 9], [26, 2, 16, 0, 14, 27, 3], [20, 6, 12, 2, 14, 19, 13], [38, 17, 9, 0, 22, 18, 3]]], [1, 28.229167, [38, 20, 28, 17, 26, 36]]], [[[[14, 20, 2, 14, 32, 6, 19], [37, 15, 1, 14, 19, 11, 15]]], [0, 20.25, [37, 14]]], [[[[4, 10, 8, 4, 10, 11, 10], [38, 4, 4, 4, 13, 8, 16], [9, 0, 0, 7, 4, 7, 18], [22, 8, 1, 7, 8, 10, 11], [35, 9, 0, 7, 15, 8, 15], [26, 1, 8, 1, 11, 16, 1]]], [2, 13.868056, [26, 4, 38, 9, 22, 35]]], [[[[30, 4, 2, 4, 14, 14, 12], [2, 2, 2, 0, 8, 10, 6], [36, 1, 8, 1, 2, 14, 8]]], [0, 9.388889, [36, 2, 30]]], [[[[8, 0, 22, 17, 8, 31, 23], [14, 1, 2, 25, 1, 9, 25], [38, 0, 25, 6, 7, 35, 17], [36, 1, 11, 9, 11, 19, 12]]], [1, 93.8125, [14, 36, 8, 38]]], [[[[6, 4, 13, 9, 14, 22, 21], [7, 0, 28, 11, 5, 33, 18], [22, 7, 2, 27, 19, 9, 28], [12, 2, 9, 17, 13, 16, 25], [29, 3, 10, 19, 4, 19, 25]]], [1, 67.44, [22, 12, 29, 6, 7]]], [[[[16, 1, 9, 7, 12, 21, 15], [5, 1, 25, 0, 1, 33, 10], [7, 1, 5, 0, 7, 15, 7], [22, 1, 12, 9, 5, 23, 15]]], [1, 48.546875, [7, 16, 22, 5]]]], [[[[[8, 6, 2, 5, 8, 3, 7], [13, 21, 2, 10, 31, 12, 17], [39, 11, 1, 8, 20, 10, 19], [37, 10, 2, 4, 11, 8, 13], [1, 17, 1, 6, 24, 6, 16], [21, 26, 0, 2, 34, 11, 8]]], [0, 66.229167, [8, 37, 39, 1, 13, 21]]], [[[[30, 0, 0, 7, 1, 4, 12], [7, 1, 0, 8, 8, 0, 11], [2, 2, 2, 4, 8, 11, 7], [35, 0, 0, 9, 3, 7, 19], [22, 0, 1, 8, 2, 6, 8], [3, 1, 1, 2, 9, 13, 14], [29, 1, 2, 4, 5, 3, 14]]], [2, 5.673469, [3, 2, 29, 30, 7, 22, 35]]], [[[[1, 16, 8, 28, 23, 17, 35], [27, 29, 9, 19, 35, 20, 19], [32, 11, 1, 3, 21, 2, 6], [33, 20, 7, 3, 26, 13, 12], [20, 21, 7, 20, 29, 8, 31], [15, 28, 3, 17, 34, 9, 19], [11, 16, 4, 29, 18, 7, 31]]], [2, 94.530612, [32, 33, 15, 27, 20, 1, 11]]], [[[[22, 2, 5, 2, 5, 17, 10], [8, 0, 7, 2, 5, 8, 7], [36, 2, 3, 2, 9, 14, 13], [15, 1, 10, 0, 9, 10, 2], [29, 0, 10, 2, 7, 10, 9], [26, 0, 4, 2, 12, 10, 4], [10, 0, 10, 0, 2, 19, 0]]], [2, 6.387755, [10, 15, 8, 22, 26, 29, 36]]], [[[[26, 15, 2, 3, 27, 8, 8], [14, 15, 2, 4, 16, 14, 4], [18, 6, 0, 5, 9, 7, 17], [22, 0, 0, 5, 10, 10, 10], [33, 5, 1, 0, 13, 4, 12]]], [0, 34.14, [22, 33, 18, 14, 26]]], [[[[3, 27, 2, 2, 37, 6, 5], [35, 0, 10, 1, 10, 13, 13]]], [0, 182.25, [35, 3]]], [[[[26, 6, 1, 2, 14, 9, 9], [3, 2, 1, 0, 5, 7, 1], [1, 0, 0, 2, 7, 9, 9], [28, 6, 1, 0, 9, 4, 6], [31, 10, 1, 2, 17, 13, 9], [24, 9, 0, 0, 15, 11, 9], [2, 3, 0, 2, 9, 4, 7]]], [0, 13.571429, [1, 3, 2, 26, 28, 24, 31]]], [[[[15, 1, 2, 1, 13, 9, 2], [20, 9, 0, 2, 19, 12, 7], [24, 5, 2, 0, 15, 8, 8], [9, 7, 2, 2, 9, 7, 8]]], [0, 7.1875, [15, 24, 9, 20]]]], [[[[[1, 27, 25, 1, 39, 34, 10], [35, 21, 20, 2, 32, 29, 5], [22, 6, 14, 1, 10, 16, 12], [13, 3, 27, 2, 4, 34, 7], [8, 19, 15, 1, 26, 25, 12], [39, 0, 16, 0, 6, 22, 12]]], [0, 138.451389, [39, 13, 22, 8, 35, 1]]], [[[[32, 2, 9, 3, 5, 18, 5], [12, 1, 10, 7, 4, 20, 14], [21, 0, 5, 3, 7, 16, 8]]], [2, 7.722222, [21, 32, 12]]], [[[[8, 4, 1, 1, 13, 8, 11], [15, 29, 0, 2, 32, 12, 4], [39, 30, 2, 0, 42, 12, 7], [24, 22, 2, 0, 30, 11, 1]]], [0, 106.0625, [8, 24, 15, 39]]], [[[[37, 8, 1, 0, 14, 5, 1], [38, 0, 2, 22, 7, 5, 25], [10, 3, 5, 29, 7, 12, 38], [35, 6, 7, 7, 6, 19, 16]]], [2, 154.1875, [37, 35, 38, 10]]], [[[[34, 5, 5, 1, 16, 5, 10], [1, 0, 5, 2, 8, 13, 8], [19, 9, 0, 2, 10, 3, 10], [3, 4, 1, 0, 5, 7, 3], [2, 4, 8, 2, 14, 16, 4], [29, 10, 5, 0, 10, 14, 12]]], [1, 13.055556, [19, 3, 1, 29, 34, 2]]], [[[[24, 5, 4, 4, 5, 5, 4], [17, 8, 8, 6, 8, 9, 10], [6, 7, 1, 10, 15, 11, 16]]], [2, 13.555556, [24, 17, 6]]], [[[[22, 2, 1, 7, 8, 10, 10], [30, 0, 7, 6, 2, 7, 7], [29, 2, 8, 7, 12, 8, 14], [24, 1, 5, 10, 7, 9, 13], [4, 0, 4, 3, 1, 4, 12], [33, 2, 4, 10, 12, 5, 11], [20, 2, 9, 4, 5, 12, 11]]], [0, 5.785714, [4, 30, 24, 20, 22, 29, 33]]], [[[[21, 2, 22, 9, 4, 29, 14], [16, 0, 26, 9, 4, 29, 13]]], [1, 1.0, [21, 16]]]], [[[[[2, 10, 25, 2, 11, 27, 7], [19, 2, 27, 0, 7, 29, 8], [22, 29, 24, 0, 40, 28, 7], [17, 22, 8, 2, 25, 20, 12], [24, 25, 13, 0, 29, 24, 11], [36, 16, 26, 0, 24, 38, 5], [35, 20, 1, 1, 28, 11, 12], [27, 2, 15, 2, 4, 27, 8]]], [0, 110.734375, [19, 27, 2, 36, 35, 17, 24, 22]]], [[[[22, 2, 2, 2, 7, 13, 8], [23, 0, 1, 0, 4, 8, 12], [1, 0, 1, 2, 3, 13, 4], [34, 2, 1, 2, 14, 6, 5]]], [0, 6.625, [1, 23, 22, 34]]], [[[[3, 4, 1, 1, 9, 9, 12], [13, 10, 1, 0, 22, 10, 1], [25, 2, 7, 1, 11, 17, 6], [23, 2, 8, 0, 10, 17, 5], [24, 2, 6, 2, 5, 10, 11]]], [0, 18.46, [23, 24, 25, 3, 13]]], [[[[39, 9, 10, 0, 20, 17, 8], [9, 5, 9, 16, 10, 20, 24], [4, 3, 10, 6, 12, 18, 14]]], [2, 43.555556, [39, 4, 9]]], [[[[26, 18, 1, 0, 28, 11, 1], [7, 10, 1, 1, 22, 4, 2], [35, 11, 1, 2, 21, 4, 4], [6, 11, 1, 1, 15, 4, 11], [27, 22, 1, 2, 22, 5, 7], [22, 22, 2, 1, 33, 10, 7], [28, 26, 0, 2, 34, 9, 2], [1, 28, 0, 1, 34, 11, 1], [18, 5, 1, 1, 16, 10, 6]]], [0, 50.277778, [18, 7, 6, 35, 26, 22, 27, 28, 1]]], [[[[8, 19, 5, 28, 31, 9, 34], [14, 11, 4, 20, 22, 5, 30], [11, 17, 3, 30, 17, 6, 34], [3, 10, 0, 2, 16, 10, 12], [4, 10, 10, 19, 18, 11, 25], [29, 19, 1, 25, 21, 8, 29], [32, 30, 0, 6, 37, 9, 16], [10, 15, 6, 24, 21, 11, 29]]], [2, 72.183594, [3, 32, 4, 14, 10, 29, 8, 11]]], [[[[8, 4, 10, 6, 5, 15, 9], [35, 3, 29, 6, 4, 29, 10], [38, 9, 28, 0, 20, 31, 11], [15, 3, 21, 6, 13, 30, 8], [6, 2, 2, 2, 7, 5, 13], [19, 7, 5, 3, 7, 5, 5]]], [1, 119.583333, [6, 19, 8, 15, 38, 35]]], [[[[17, 3, 2, 3, 6, 11, 6], [22, 0, 7, 22, 0, 12, 33], [29, 9, 3, 5, 15, 5, 12]]], [2, 100.666667, [17, 29, 22]]]], [[[[[23, 23, 14, 0, 35, 18, 11], [31, 23, 5, 16, 26, 8, 19], [2, 0, 10, 28, 10, 21, 29], [18, 7, 19, 0, 17, 20, 5], [12, 7, 19, 14, 7, 25, 26], [36, 17, 1, 23, 18, 13, 29]]], [2, 94.055556, [18, 23, 12, 31, 36, 2]]], [[[[7, 2, 3, 2, 8, 11, 13], [2, 2, 18, 1, 12, 25, 11], [35, 1, 8, 0, 3, 17, 6], [10, 1, 23, 0, 11, 30, 6]]], [1, 57.671875, [7, 35, 2, 10]]], [[[[3, 1, 20, 6, 7, 32, 16], [5, 0, 18, 5, 4, 27, 14], [6, 0, 3, 5, 9, 15, 11], [21, 2, 9, 9, 6, 11, 20], [4, 0, 8, 4, 9, 18, 9], [13, 0, 14, 2, 12, 25, 8], [14, 1, 21, 2, 10, 33, 13]]], [1, 48.193878, [6, 4, 21, 13, 5, 3, 14]]], [[[[18, 10, 21, 1, 14, 27, 2], [16, 20, 5, 1, 26, 8, 11], [1, 6, 4, 2, 9, 7, 11]]], [1, 72.166667, [1, 16, 18]]], [[[[17, 0, 18, 1, 12, 30, 10], [21, 0, 17, 2, 8, 29, 12], [13, 0, 28, 1, 12, 36, 9], [11, 2, 28, 2, 3, 31, 9], [10, 2, 16, 0, 8, 28, 6], [22, 1, 8, 0, 10, 8, 11], [6, 1, 20, 0, 7, 31, 7], [33, 1, 9, 1, 11, 17, 11]]], [1, 56.296875, [22, 33, 10, 21, 17, 6, 11, 13]]], [[[[13, 5, 25, 23, 5, 26, 29], [19, 24, 6, 27, 32, 14, 33], [17, 1, 2, 17, 11, 9, 22], [4, 21, 25, 22, 27, 30, 24], [27, 29, 26, 1, 38, 30, 9], [30, 11, 22, 2, 13, 32, 7]]], [0, 120.868056, [17, 13, 30, 4, 19, 27]]], [[[[5, 2, 1, 0, 3, 8, 1], [28, 2, 1, 0, 5, 13, 12]]], [2, 7.5625, [5, 28]]], [[[[28, 1, 20, 1, 3, 26, 5], [7, 2, 12, 2, 8, 24, 5], [3, 0, 2, 1, 7, 9, 5]]], [1, 54.166667, [3, 7, 28]]]]]
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 | [1, 14.0625, [35, 23]] | [2, 16.0, [23, 35]] | Failed |
| case 1 | [0, 6.5, [26, 17, 20, 36, 28, 38]] | [1, 28.229167, [38, 20, 28, 17, 26, 36]] | Failed |
| case 2 | [1, 12.25, [37, 14]] | [0, 20.25, [37, 14]] | Failed |
| case 3 | [1, 7.305556, [9, 35, 22, 38, 4, 26]] | [2, 13.868056, [26, 4, 38, 9, 22, 35]] | Failed |
| case 4 | [2, 2.722222, [2, 36, 30]] | [0, 9.388889, [36, 2, 30]] | Failed |
| case 5 | [1, 32.796875, [14, 36, 8, 38]] | [1, 93.8125, [14, 36, 8, 38]] | Failed |
| case 6 | [0, 16.54, [7, 12, 29, 6, 22]] | [1, 67.44, [22, 12, 29, 6, 7]] | Failed |
| case 7 | [2, 12.875, [5, 7, 16, 22]] | [1, 48.546875, [7, 16, 22, 5]] | Failed |
SHA-256 / e00529c0d660d51600b084be2ab7af164f68b1ca13ba5221fe75fb383a71da6e
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(boxes):
n = len(boxes)
best_axis, best_var = 0, -1.0
for ax in (0, 1, 2):
cs_ = [(b[ax] + b[4 + ax]) / 2 for b in boxes]
mean = sum(cs_) / n
var = sum((c - mean) ** 2 for c in cs_) / n
if var > best_var:
best_axis, best_var = ax, var
order = [b[0] for b in sorted(boxes, key=lambda b: (b[1 + best_axis], b[0]))]
return [best_axis, round(best_var, 6), order]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[[[23, 2, 9, 0, 11, 12, 8], [35, 2, 3, 7, 2, 13, 17]]], [2, 16.0, [23, 35]]], [[[[28, 12, 13, 1, 14, 25, 5], [36, 10, 28, 0, 10, 32, 6], [17, 4, 16, 0, 7, 28, 9], [26, 2, 16, 0, 14, 27, 3], [20, 6, 12, 2, 14, 19, 13], [38, 17, 9, 0, 22, 18, 3]]], [1, 28.229167, [38, 20, 28, 17, 26, 36]]], [[[[14, 20, 2, 14, 32, 6, 19], [37, 15, 1, 14, 19, 11, 15]]], [0, 20.25, [37, 14]]], [[[[4, 10, 8, 4, 10, 11, 10], [38, 4, 4, 4, 13, 8, 16], [9, 0, 0, 7, 4, 7, 18], [22, 8, 1, 7, 8, 10, 11], [35, 9, 0, 7, 15, 8, 15], [26, 1, 8, 1, 11, 16, 1]]], [2, 13.868056, [26, 4, 38, 9, 22, 35]]], [[[[30, 4, 2, 4, 14, 14, 12], [2, 2, 2, 0, 8, 10, 6], [36, 1, 8, 1, 2, 14, 8]]], [0, 9.388889, [36, 2, 30]]], [[[[8, 0, 22, 17, 8, 31, 23], [14, 1, 2, 25, 1, 9, 25], [38, 0, 25, 6, 7, 35, 17], [36, 1, 11, 9, 11, 19, 12]]], [1, 93.8125, [14, 36, 8, 38]]], [[[[6, 4, 13, 9, 14, 22, 21], [7, 0, 28, 11, 5, 33, 18], [22, 7, 2, 27, 19, 9, 28], [12, 2, 9, 17, 13, 16, 25], [29, 3, 10, 19, 4, 19, 25]]], [1, 67.44, [22, 12, 29, 6, 7]]], [[[[16, 1, 9, 7, 12, 21, 15], [5, 1, 25, 0, 1, 33, 10], [7, 1, 5, 0, 7, 15, 7], [22, 1, 12, 9, 5, 23, 15]]], [1, 48.546875, [7, 16, 22, 5]]]], [[[[[8, 6, 2, 5, 8, 3, 7], [13, 21, 2, 10, 31, 12, 17], [39, 11, 1, 8, 20, 10, 19], [37, 10, 2, 4, 11, 8, 13], [1, 17, 1, 6, 24, 6, 16], [21, 26, 0, 2, 34, 11, 8]]], [0, 66.229167, [8, 37, 39, 1, 13, 21]]], [[[[30, 0, 0, 7, 1, 4, 12], [7, 1, 0, 8, 8, 0, 11], [2, 2, 2, 4, 8, 11, 7], [35, 0, 0, 9, 3, 7, 19], [22, 0, 1, 8, 2, 6, 8], [3, 1, 1, 2, 9, 13, 14], [29, 1, 2, 4, 5, 3, 14]]], [2, 5.673469, [3, 2, 29, 30, 7, 22, 35]]], [[[[1, 16, 8, 28, 23, 17, 35], [27, 29, 9, 19, 35, 20, 19], [32, 11, 1, 3, 21, 2, 6], [33, 20, 7, 3, 26, 13, 12], [20, 21, 7, 20, 29, 8, 31], [15, 28, 3, 17, 34, 9, 19], [11, 16, 4, 29, 18, 7, 31]]], [2, 94.530612, [32, 33, 15, 27, 20, 1, 11]]], [[[[22, 2, 5, 2, 5, 17, 10], [8, 0, 7, 2, 5, 8, 7], [36, 2, 3, 2, 9, 14, 13], [15, 1, 10, 0, 9, 10, 2], [29, 0, 10, 2, 7, 10, 9], [26, 0, 4, 2, 12, 10, 4], [10, 0, 10, 0, 2, 19, 0]]], [2, 6.387755, [10, 15, 8, 22, 26, 29, 36]]], [[[[26, 15, 2, 3, 27, 8, 8], [14, 15, 2, 4, 16, 14, 4], [18, 6, 0, 5, 9, 7, 17], [22, 0, 0, 5, 10, 10, 10], [33, 5, 1, 0, 13, 4, 12]]], [0, 34.14, [22, 33, 18, 14, 26]]], [[[[3, 27, 2, 2, 37, 6, 5], [35, 0, 10, 1, 10, 13, 13]]], [0, 182.25, [35, 3]]], [[[[26, 6, 1, 2, 14, 9, 9], [3, 2, 1, 0, 5, 7, 1], [1, 0, 0, 2, 7, 9, 9], [28, 6, 1, 0, 9, 4, 6], [31, 10, 1, 2, 17, 13, 9], [24, 9, 0, 0, 15, 11, 9], [2, 3, 0, 2, 9, 4, 7]]], [0, 13.571429, [1, 3, 2, 26, 28, 24, 31]]], [[[[15, 1, 2, 1, 13, 9, 2], [20, 9, 0, 2, 19, 12, 7], [24, 5, 2, 0, 15, 8, 8], [9, 7, 2, 2, 9, 7, 8]]], [0, 7.1875, [15, 24, 9, 20]]]], [[[[[1, 27, 25, 1, 39, 34, 10], [35, 21, 20, 2, 32, 29, 5], [22, 6, 14, 1, 10, 16, 12], [13, 3, 27, 2, 4, 34, 7], [8, 19, 15, 1, 26, 25, 12], [39, 0, 16, 0, 6, 22, 12]]], [0, 138.451389, [39, 13, 22, 8, 35, 1]]], [[[[32, 2, 9, 3, 5, 18, 5], [12, 1, 10, 7, 4, 20, 14], [21, 0, 5, 3, 7, 16, 8]]], [2, 7.722222, [21, 32, 12]]], [[[[8, 4, 1, 1, 13, 8, 11], [15, 29, 0, 2, 32, 12, 4], [39, 30, 2, 0, 42, 12, 7], [24, 22, 2, 0, 30, 11, 1]]], [0, 106.0625, [8, 24, 15, 39]]], [[[[37, 8, 1, 0, 14, 5, 1], [38, 0, 2, 22, 7, 5, 25], [10, 3, 5, 29, 7, 12, 38], [35, 6, 7, 7, 6, 19, 16]]], [2, 154.1875, [37, 35, 38, 10]]], [[[[34, 5, 5, 1, 16, 5, 10], [1, 0, 5, 2, 8, 13, 8], [19, 9, 0, 2, 10, 3, 10], [3, 4, 1, 0, 5, 7, 3], [2, 4, 8, 2, 14, 16, 4], [29, 10, 5, 0, 10, 14, 12]]], [1, 13.055556, [19, 3, 1, 29, 34, 2]]], [[[[24, 5, 4, 4, 5, 5, 4], [17, 8, 8, 6, 8, 9, 10], [6, 7, 1, 10, 15, 11, 16]]], [2, 13.555556, [24, 17, 6]]], [[[[22, 2, 1, 7, 8, 10, 10], [30, 0, 7, 6, 2, 7, 7], [29, 2, 8, 7, 12, 8, 14], [24, 1, 5, 10, 7, 9, 13], [4, 0, 4, 3, 1, 4, 12], [33, 2, 4, 10, 12, 5, 11], [20, 2, 9, 4, 5, 12, 11]]], [0, 5.785714, [4, 30, 24, 20, 22, 29, 33]]], [[[[21, 2, 22, 9, 4, 29, 14], [16, 0, 26, 9, 4, 29, 13]]], [1, 1.0, [21, 16]]]], [[[[[2, 10, 25, 2, 11, 27, 7], [19, 2, 27, 0, 7, 29, 8], [22, 29, 24, 0, 40, 28, 7], [17, 22, 8, 2, 25, 20, 12], [24, 25, 13, 0, 29, 24, 11], [36, 16, 26, 0, 24, 38, 5], [35, 20, 1, 1, 28, 11, 12], [27, 2, 15, 2, 4, 27, 8]]], [0, 110.734375, [19, 27, 2, 36, 35, 17, 24, 22]]], [[[[22, 2, 2, 2, 7, 13, 8], [23, 0, 1, 0, 4, 8, 12], [1, 0, 1, 2, 3, 13, 4], [34, 2, 1, 2, 14, 6, 5]]], [0, 6.625, [1, 23, 22, 34]]], [[[[3, 4, 1, 1, 9, 9, 12], [13, 10, 1, 0, 22, 10, 1], [25, 2, 7, 1, 11, 17, 6], [23, 2, 8, 0, 10, 17, 5], [24, 2, 6, 2, 5, 10, 11]]], [0, 18.46, [23, 24, 25, 3, 13]]], [[[[39, 9, 10, 0, 20, 17, 8], [9, 5, 9, 16, 10, 20, 24], [4, 3, 10, 6, 12, 18, 14]]], [2, 43.555556, [39, 4, 9]]], [[[[26, 18, 1, 0, 28, 11, 1], [7, 10, 1, 1, 22, 4, 2], [35, 11, 1, 2, 21, 4, 4], [6, 11, 1, 1, 15, 4, 11], [27, 22, 1, 2, 22, 5, 7], [22, 22, 2, 1, 33, 10, 7], [28, 26, 0, 2, 34, 9, 2], [1, 28, 0, 1, 34, 11, 1], [18, 5, 1, 1, 16, 10, 6]]], [0, 50.277778, [18, 7, 6, 35, 26, 22, 27, 28, 1]]], [[[[8, 19, 5, 28, 31, 9, 34], [14, 11, 4, 20, 22, 5, 30], [11, 17, 3, 30, 17, 6, 34], [3, 10, 0, 2, 16, 10, 12], [4, 10, 10, 19, 18, 11, 25], [29, 19, 1, 25, 21, 8, 29], [32, 30, 0, 6, 37, 9, 16], [10, 15, 6, 24, 21, 11, 29]]], [2, 72.183594, [3, 32, 4, 14, 10, 29, 8, 11]]], [[[[8, 4, 10, 6, 5, 15, 9], [35, 3, 29, 6, 4, 29, 10], [38, 9, 28, 0, 20, 31, 11], [15, 3, 21, 6, 13, 30, 8], [6, 2, 2, 2, 7, 5, 13], [19, 7, 5, 3, 7, 5, 5]]], [1, 119.583333, [6, 19, 8, 15, 38, 35]]], [[[[17, 3, 2, 3, 6, 11, 6], [22, 0, 7, 22, 0, 12, 33], [29, 9, 3, 5, 15, 5, 12]]], [2, 100.666667, [17, 29, 22]]]], [[[[[23, 23, 14, 0, 35, 18, 11], [31, 23, 5, 16, 26, 8, 19], [2, 0, 10, 28, 10, 21, 29], [18, 7, 19, 0, 17, 20, 5], [12, 7, 19, 14, 7, 25, 26], [36, 17, 1, 23, 18, 13, 29]]], [2, 94.055556, [18, 23, 12, 31, 36, 2]]], [[[[7, 2, 3, 2, 8, 11, 13], [2, 2, 18, 1, 12, 25, 11], [35, 1, 8, 0, 3, 17, 6], [10, 1, 23, 0, 11, 30, 6]]], [1, 57.671875, [7, 35, 2, 10]]], [[[[3, 1, 20, 6, 7, 32, 16], [5, 0, 18, 5, 4, 27, 14], [6, 0, 3, 5, 9, 15, 11], [21, 2, 9, 9, 6, 11, 20], [4, 0, 8, 4, 9, 18, 9], [13, 0, 14, 2, 12, 25, 8], [14, 1, 21, 2, 10, 33, 13]]], [1, 48.193878, [6, 4, 21, 13, 5, 3, 14]]], [[[[18, 10, 21, 1, 14, 27, 2], [16, 20, 5, 1, 26, 8, 11], [1, 6, 4, 2, 9, 7, 11]]], [1, 72.166667, [1, 16, 18]]], [[[[17, 0, 18, 1, 12, 30, 10], [21, 0, 17, 2, 8, 29, 12], [13, 0, 28, 1, 12, 36, 9], [11, 2, 28, 2, 3, 31, 9], [10, 2, 16, 0, 8, 28, 6], [22, 1, 8, 0, 10, 8, 11], [6, 1, 20, 0, 7, 31, 7], [33, 1, 9, 1, 11, 17, 11]]], [1, 56.296875, [22, 33, 10, 21, 17, 6, 11, 13]]], [[[[13, 5, 25, 23, 5, 26, 29], [19, 24, 6, 27, 32, 14, 33], [17, 1, 2, 17, 11, 9, 22], [4, 21, 25, 22, 27, 30, 24], [27, 29, 26, 1, 38, 30, 9], [30, 11, 22, 2, 13, 32, 7]]], [0, 120.868056, [17, 13, 30, 4, 19, 27]]], [[[[5, 2, 1, 0, 3, 8, 1], [28, 2, 1, 0, 5, 13, 12]]], [2, 7.5625, [5, 28]]], [[[[28, 1, 20, 1, 3, 26, 5], [7, 2, 12, 2, 8, 24, 5], [3, 0, 2, 1, 7, 9, 5]]], [1, 54.166667, [3, 7, 28]]]]]
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 | [0, 0.5625, [23, 35]] | [2, 16.0, [23, 35]] | Failed |
| case 1 | [0, 30.25, [26, 17, 20, 36, 28, 38]] | [1, 28.229167, [38, 20, 28, 17, 26, 36]] | Failed |
| case 2 | [0, 6.25, [37, 14]] | [0, 20.25, [37, 14]] | Failed |
| case 3 | [0, 58.229167, [9, 26, 38, 22, 35, 4]] | [2, 13.868056, [26, 4, 38, 9, 22, 35]] | Failed |
| case 4 | [0, 54.888889, [36, 2, 30]] | [0, 9.388889, [36, 2, 30]] | Failed |
| case 5 | [0, 58.296875, [8, 38, 14, 36]] | [1, 93.8125, [14, 36, 8, 38]] | Failed |
| case 6 | [0, 25.34, [7, 12, 29, 6, 22]] | [1, 67.44, [22, 12, 29, 6, 7]] | Failed |
| case 7 | [0, 21.171875, [5, 7, 16, 22]] | [1, 48.546875, [7, 16, 22, 5]] | Failed |
SHA-256 / 19ffcd2eab1a0c8150bb179893d9b2e40df3e84b2eef03a4f4781063078e6bbc
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(boxes):
n = len(boxes)
best_axis, best_var = 0, -1.0
for ax in (0, 1, 2):
cs_ = [(b[1 + ax] + b[4 + ax]) / 2 for b in boxes]
mean = sum(cs_) / n
var = sum((c - mean) ** 2 for c in cs_) / n
if var > best_var:
best_axis, best_var = ax, var
order = [b[0] for b in sorted(boxes, key=lambda b: (b[1 + best_axis], b[0]))]
return [best_axis, round(best_var, 6), order]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[[[23, 2, 9, 0, 11, 12, 8], [35, 2, 3, 7, 2, 13, 17]]], [2, 16.0, [23, 35]]], [[[[28, 12, 13, 1, 14, 25, 5], [36, 10, 28, 0, 10, 32, 6], [17, 4, 16, 0, 7, 28, 9], [26, 2, 16, 0, 14, 27, 3], [20, 6, 12, 2, 14, 19, 13], [38, 17, 9, 0, 22, 18, 3]]], [1, 28.229167, [38, 20, 28, 17, 26, 36]]], [[[[14, 20, 2, 14, 32, 6, 19], [37, 15, 1, 14, 19, 11, 15]]], [0, 20.25, [37, 14]]], [[[[4, 10, 8, 4, 10, 11, 10], [38, 4, 4, 4, 13, 8, 16], [9, 0, 0, 7, 4, 7, 18], [22, 8, 1, 7, 8, 10, 11], [35, 9, 0, 7, 15, 8, 15], [26, 1, 8, 1, 11, 16, 1]]], [2, 13.868056, [26, 4, 38, 9, 22, 35]]], [[[[30, 4, 2, 4, 14, 14, 12], [2, 2, 2, 0, 8, 10, 6], [36, 1, 8, 1, 2, 14, 8]]], [0, 9.388889, [36, 2, 30]]], [[[[8, 0, 22, 17, 8, 31, 23], [14, 1, 2, 25, 1, 9, 25], [38, 0, 25, 6, 7, 35, 17], [36, 1, 11, 9, 11, 19, 12]]], [1, 93.8125, [14, 36, 8, 38]]], [[[[6, 4, 13, 9, 14, 22, 21], [7, 0, 28, 11, 5, 33, 18], [22, 7, 2, 27, 19, 9, 28], [12, 2, 9, 17, 13, 16, 25], [29, 3, 10, 19, 4, 19, 25]]], [1, 67.44, [22, 12, 29, 6, 7]]], [[[[16, 1, 9, 7, 12, 21, 15], [5, 1, 25, 0, 1, 33, 10], [7, 1, 5, 0, 7, 15, 7], [22, 1, 12, 9, 5, 23, 15]]], [1, 48.546875, [7, 16, 22, 5]]]], [[[[[8, 6, 2, 5, 8, 3, 7], [13, 21, 2, 10, 31, 12, 17], [39, 11, 1, 8, 20, 10, 19], [37, 10, 2, 4, 11, 8, 13], [1, 17, 1, 6, 24, 6, 16], [21, 26, 0, 2, 34, 11, 8]]], [0, 66.229167, [8, 37, 39, 1, 13, 21]]], [[[[30, 0, 0, 7, 1, 4, 12], [7, 1, 0, 8, 8, 0, 11], [2, 2, 2, 4, 8, 11, 7], [35, 0, 0, 9, 3, 7, 19], [22, 0, 1, 8, 2, 6, 8], [3, 1, 1, 2, 9, 13, 14], [29, 1, 2, 4, 5, 3, 14]]], [2, 5.673469, [3, 2, 29, 30, 7, 22, 35]]], [[[[1, 16, 8, 28, 23, 17, 35], [27, 29, 9, 19, 35, 20, 19], [32, 11, 1, 3, 21, 2, 6], [33, 20, 7, 3, 26, 13, 12], [20, 21, 7, 20, 29, 8, 31], [15, 28, 3, 17, 34, 9, 19], [11, 16, 4, 29, 18, 7, 31]]], [2, 94.530612, [32, 33, 15, 27, 20, 1, 11]]], [[[[22, 2, 5, 2, 5, 17, 10], [8, 0, 7, 2, 5, 8, 7], [36, 2, 3, 2, 9, 14, 13], [15, 1, 10, 0, 9, 10, 2], [29, 0, 10, 2, 7, 10, 9], [26, 0, 4, 2, 12, 10, 4], [10, 0, 10, 0, 2, 19, 0]]], [2, 6.387755, [10, 15, 8, 22, 26, 29, 36]]], [[[[26, 15, 2, 3, 27, 8, 8], [14, 15, 2, 4, 16, 14, 4], [18, 6, 0, 5, 9, 7, 17], [22, 0, 0, 5, 10, 10, 10], [33, 5, 1, 0, 13, 4, 12]]], [0, 34.14, [22, 33, 18, 14, 26]]], [[[[3, 27, 2, 2, 37, 6, 5], [35, 0, 10, 1, 10, 13, 13]]], [0, 182.25, [35, 3]]], [[[[26, 6, 1, 2, 14, 9, 9], [3, 2, 1, 0, 5, 7, 1], [1, 0, 0, 2, 7, 9, 9], [28, 6, 1, 0, 9, 4, 6], [31, 10, 1, 2, 17, 13, 9], [24, 9, 0, 0, 15, 11, 9], [2, 3, 0, 2, 9, 4, 7]]], [0, 13.571429, [1, 3, 2, 26, 28, 24, 31]]], [[[[15, 1, 2, 1, 13, 9, 2], [20, 9, 0, 2, 19, 12, 7], [24, 5, 2, 0, 15, 8, 8], [9, 7, 2, 2, 9, 7, 8]]], [0, 7.1875, [15, 24, 9, 20]]]], [[[[[1, 27, 25, 1, 39, 34, 10], [35, 21, 20, 2, 32, 29, 5], [22, 6, 14, 1, 10, 16, 12], [13, 3, 27, 2, 4, 34, 7], [8, 19, 15, 1, 26, 25, 12], [39, 0, 16, 0, 6, 22, 12]]], [0, 138.451389, [39, 13, 22, 8, 35, 1]]], [[[[32, 2, 9, 3, 5, 18, 5], [12, 1, 10, 7, 4, 20, 14], [21, 0, 5, 3, 7, 16, 8]]], [2, 7.722222, [21, 32, 12]]], [[[[8, 4, 1, 1, 13, 8, 11], [15, 29, 0, 2, 32, 12, 4], [39, 30, 2, 0, 42, 12, 7], [24, 22, 2, 0, 30, 11, 1]]], [0, 106.0625, [8, 24, 15, 39]]], [[[[37, 8, 1, 0, 14, 5, 1], [38, 0, 2, 22, 7, 5, 25], [10, 3, 5, 29, 7, 12, 38], [35, 6, 7, 7, 6, 19, 16]]], [2, 154.1875, [37, 35, 38, 10]]], [[[[34, 5, 5, 1, 16, 5, 10], [1, 0, 5, 2, 8, 13, 8], [19, 9, 0, 2, 10, 3, 10], [3, 4, 1, 0, 5, 7, 3], [2, 4, 8, 2, 14, 16, 4], [29, 10, 5, 0, 10, 14, 12]]], [1, 13.055556, [19, 3, 1, 29, 34, 2]]], [[[[24, 5, 4, 4, 5, 5, 4], [17, 8, 8, 6, 8, 9, 10], [6, 7, 1, 10, 15, 11, 16]]], [2, 13.555556, [24, 17, 6]]], [[[[22, 2, 1, 7, 8, 10, 10], [30, 0, 7, 6, 2, 7, 7], [29, 2, 8, 7, 12, 8, 14], [24, 1, 5, 10, 7, 9, 13], [4, 0, 4, 3, 1, 4, 12], [33, 2, 4, 10, 12, 5, 11], [20, 2, 9, 4, 5, 12, 11]]], [0, 5.785714, [4, 30, 24, 20, 22, 29, 33]]], [[[[21, 2, 22, 9, 4, 29, 14], [16, 0, 26, 9, 4, 29, 13]]], [1, 1.0, [21, 16]]]], [[[[[2, 10, 25, 2, 11, 27, 7], [19, 2, 27, 0, 7, 29, 8], [22, 29, 24, 0, 40, 28, 7], [17, 22, 8, 2, 25, 20, 12], [24, 25, 13, 0, 29, 24, 11], [36, 16, 26, 0, 24, 38, 5], [35, 20, 1, 1, 28, 11, 12], [27, 2, 15, 2, 4, 27, 8]]], [0, 110.734375, [19, 27, 2, 36, 35, 17, 24, 22]]], [[[[22, 2, 2, 2, 7, 13, 8], [23, 0, 1, 0, 4, 8, 12], [1, 0, 1, 2, 3, 13, 4], [34, 2, 1, 2, 14, 6, 5]]], [0, 6.625, [1, 23, 22, 34]]], [[[[3, 4, 1, 1, 9, 9, 12], [13, 10, 1, 0, 22, 10, 1], [25, 2, 7, 1, 11, 17, 6], [23, 2, 8, 0, 10, 17, 5], [24, 2, 6, 2, 5, 10, 11]]], [0, 18.46, [23, 24, 25, 3, 13]]], [[[[39, 9, 10, 0, 20, 17, 8], [9, 5, 9, 16, 10, 20, 24], [4, 3, 10, 6, 12, 18, 14]]], [2, 43.555556, [39, 4, 9]]], [[[[26, 18, 1, 0, 28, 11, 1], [7, 10, 1, 1, 22, 4, 2], [35, 11, 1, 2, 21, 4, 4], [6, 11, 1, 1, 15, 4, 11], [27, 22, 1, 2, 22, 5, 7], [22, 22, 2, 1, 33, 10, 7], [28, 26, 0, 2, 34, 9, 2], [1, 28, 0, 1, 34, 11, 1], [18, 5, 1, 1, 16, 10, 6]]], [0, 50.277778, [18, 7, 6, 35, 26, 22, 27, 28, 1]]], [[[[8, 19, 5, 28, 31, 9, 34], [14, 11, 4, 20, 22, 5, 30], [11, 17, 3, 30, 17, 6, 34], [3, 10, 0, 2, 16, 10, 12], [4, 10, 10, 19, 18, 11, 25], [29, 19, 1, 25, 21, 8, 29], [32, 30, 0, 6, 37, 9, 16], [10, 15, 6, 24, 21, 11, 29]]], [2, 72.183594, [3, 32, 4, 14, 10, 29, 8, 11]]], [[[[8, 4, 10, 6, 5, 15, 9], [35, 3, 29, 6, 4, 29, 10], [38, 9, 28, 0, 20, 31, 11], [15, 3, 21, 6, 13, 30, 8], [6, 2, 2, 2, 7, 5, 13], [19, 7, 5, 3, 7, 5, 5]]], [1, 119.583333, [6, 19, 8, 15, 38, 35]]], [[[[17, 3, 2, 3, 6, 11, 6], [22, 0, 7, 22, 0, 12, 33], [29, 9, 3, 5, 15, 5, 12]]], [2, 100.666667, [17, 29, 22]]]], [[[[[23, 23, 14, 0, 35, 18, 11], [31, 23, 5, 16, 26, 8, 19], [2, 0, 10, 28, 10, 21, 29], [18, 7, 19, 0, 17, 20, 5], [12, 7, 19, 14, 7, 25, 26], [36, 17, 1, 23, 18, 13, 29]]], [2, 94.055556, [18, 23, 12, 31, 36, 2]]], [[[[7, 2, 3, 2, 8, 11, 13], [2, 2, 18, 1, 12, 25, 11], [35, 1, 8, 0, 3, 17, 6], [10, 1, 23, 0, 11, 30, 6]]], [1, 57.671875, [7, 35, 2, 10]]], [[[[3, 1, 20, 6, 7, 32, 16], [5, 0, 18, 5, 4, 27, 14], [6, 0, 3, 5, 9, 15, 11], [21, 2, 9, 9, 6, 11, 20], [4, 0, 8, 4, 9, 18, 9], [13, 0, 14, 2, 12, 25, 8], [14, 1, 21, 2, 10, 33, 13]]], [1, 48.193878, [6, 4, 21, 13, 5, 3, 14]]], [[[[18, 10, 21, 1, 14, 27, 2], [16, 20, 5, 1, 26, 8, 11], [1, 6, 4, 2, 9, 7, 11]]], [1, 72.166667, [1, 16, 18]]], [[[[17, 0, 18, 1, 12, 30, 10], [21, 0, 17, 2, 8, 29, 12], [13, 0, 28, 1, 12, 36, 9], [11, 2, 28, 2, 3, 31, 9], [10, 2, 16, 0, 8, 28, 6], [22, 1, 8, 0, 10, 8, 11], [6, 1, 20, 0, 7, 31, 7], [33, 1, 9, 1, 11, 17, 11]]], [1, 56.296875, [22, 33, 10, 21, 17, 6, 11, 13]]], [[[[13, 5, 25, 23, 5, 26, 29], [19, 24, 6, 27, 32, 14, 33], [17, 1, 2, 17, 11, 9, 22], [4, 21, 25, 22, 27, 30, 24], [27, 29, 26, 1, 38, 30, 9], [30, 11, 22, 2, 13, 32, 7]]], [0, 120.868056, [17, 13, 30, 4, 19, 27]]], [[[[5, 2, 1, 0, 3, 8, 1], [28, 2, 1, 0, 5, 13, 12]]], [2, 7.5625, [5, 28]]], [[[[28, 1, 20, 1, 3, 26, 5], [7, 2, 12, 2, 8, 24, 5], [3, 0, 2, 1, 7, 9, 5]]], [1, 54.166667, [3, 7, 28]]]]]
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 | [2, 16.0, [23, 35]] | [2, 16.0, [23, 35]] | Passed |
| case 1 | [1, 28.229167, [38, 20, 28, 17, 26, 36]] | [1, 28.229167, [38, 20, 28, 17, 26, 36]] | Passed |
| case 2 | [0, 20.25, [37, 14]] | [0, 20.25, [37, 14]] | Passed |
| case 3 | [2, 13.868056, [26, 4, 38, 9, 22, 35]] | [2, 13.868056, [26, 4, 38, 9, 22, 35]] | Passed |
| case 4 | [0, 9.388889, [36, 2, 30]] | [0, 9.388889, [36, 2, 30]] | Passed |
| case 5 | [1, 93.8125, [14, 36, 8, 38]] | [1, 93.8125, [14, 36, 8, 38]] | Passed |
| case 6 | [1, 67.44, [22, 12, 29, 6, 7]] | [1, 67.44, [22, 12, 29, 6, 7]] | Passed |
| case 7 | [1, 48.546875, [7, 16, 22, 5]] | [1, 48.546875, [7, 16, 22, 5]] | Passed |
SHA-256 / 0bd94a9c9d465de0e18df9487862eb6bee32827cfc9780b0e938b2b5021d66f7
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.977835+00:00.
Case digest / 5dcb9864d144e36b77e4f400fb128736b05877a614b6b976e984684e24416be4