FAILURE MAP
← Case archive

FA-87631 / Collision detection broadphase / Open access

Level search can run past the last grid level · case 01

Huge objects are assigned to a level that does not exist.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The cap is lvl < levels.

VERIFIED REPAIR

Cap at levels-1.

Unsuccessful approach: Capping at levels-2 wastes the top level.

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:
            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 = [[[[[[6, 8.5, 1.0, 11.5, 2.0], [10, -8.0, 1.5, -7.0, 3.5]], 1.0, 2], [[6, 1, 4, 0], [10, 1, -4, 0]]], [[[[38, 3.5, 1.0, 10.5, 5.0], [14, -1.5, -1.5, 14.5, 2.5], [37, -6.5, -6.0, -6.0, -2.0], [9, 8.5, 4.0, 16.5, 6.0], [28, -3.5, 1.5, 0.5, 2.0]], 2.0, 4], [[9, 2, 1, 0], [14, 3, -1, -1], [28, 1, -1, 0], [37, 1, -2, -2], [38, 2, 0, 0]]], [[[[38, 1.5, 7.5, 8.5, 9.5], [22, -10.0, 6.5, 20.0, 7.0], [36, -5.5, 2.0, 10.5, 2.5], [34, 1.0, 0.0, 4.0, 4.0], [35, 4.0, 1.0, 11.0, 2.0], [12, -8.5, -4.5, -7.5, -0.5]], 2.0, 5], [[12, 1, -3, -2], [22, 4, -1, 0], [34, 1, 0, 0], [35, 2, 0, 0], [36, 3, -1, 0], [38, 2, 0, 0]]], [[[[36, 4.5, -6.0, 20.5, -1.0], [27, 1.0, -7.5, 4.0, -3.5], [2, 4.0, 1.5, 7.0, 5.5], [1, 7.0, 0.5, 11.0, 9.5], [38, -9.5, -5.0, 20.5, -1.0]], 1.0, 4], [[1, 3, 0, 0], [2, 2, 1, 0], [27, 2, 0, -2], [36, 3, 0, -1], [38, 3, -2, -1]]], [[[[9, -8.0, 7.5, -6.0, 11.5], [38, 9.0, 6.0, 12.0, 11.0], [5, 1.5, 4.0, 2.0, 5.0], [13, -5.0, 8.5, 25.0, 17.5], [18, -3.5, 1.0, 0.5, 1.5], [34, -10.0, -0.5, -2.0, 8.5]], 2.0, 4], [[5, 0, 0, 2], [9, 1, -2, 1], [13, 3, -1, 0], [18, 1, -1, 0], [34, 3, -1, -1], [38, 2, 1, 0]]], [[[[29, -5.5, 8.5, -3.5, 9.0], [8, 1.0, -4.5, 17.0, -0.5], [39, -2.0, 7.0, 0.0, 12.0], [11, 2.0, 8.0, 6.0, 13.0], [4, 1.5, -3.0, 31.5, -2.5]], 2.0, 4], [[4, 3, 0, -1], [8, 3, 0, -1], [11, 2, 0, 1], [29, 0, -3, 4], [39, 2, -1, 0]]], [[[[34, 4.0, 2.0, 7.0, 4.0], [10, 8.0, 8.0, 24.0, 9.0], [39, 10.0, -1.5, 14.0, 7.5], [9, 8.0, -9.5, 11.0, -4.5], [24, -5.0, 6.0, -3.0, 6.5], [21, -2.5, 1.0, 1.5, 6.0]], 2.0, 4], [[9, 2, 1, -2], [10, 3, 0, 0], [21, 2, -1, 0], [24, 0, -3, 3], [34, 1, 1, 0], [39, 3, 0, -1]]], [[[[7, 1.5, -8.5, 3.5, -6.5], [16, 1.5, -6.5, 17.5, -2.5], [27, 3.5, 5.0, 4.0, 5.5], [36, 3.0, 8.5, 3.5, 10.5]], 2.0, 5], [[7, 0, 0, -5], [16, 3, 0, -1], [27, 0, 1, 2], [36, 0, 1, 4]]]], [[[[[34, 1.5, 7.5, 4.5, 16.5], [3, -1.5, -10.0, 0.5, -1.0], [11, 3.0, -2.0, 7.0, -1.5]], 2.0, 3], [[3, 2, -1, -2], [11, 1, 0, -1], [34, 2, 0, 0]]], [[[[8, 6.5, -4.5, 14.5, -0.5], [9, -4.0, 4.5, 3.0, 5.0]], 1.0, 3], [[8, 2, 1, -2], [9, 2, -1, 1]]], [[[[10, -2.5, 7.5, -2.0, 8.5], [25, 10.0, 2.0, 40.0, 6.0], [11, -5.5, 7.5, -1.5, 8.0]], 2.0, 2], [[10, 0, -2, 3], [11, 1, -2, 1], [25, 1, 2, 0]]], [[[[19, 10.0, -8.5, 13.0, -4.5], [4, 8.5, 10.0, 10.5, 14.0], [23, -9.0, 4.5, -7.0, 9.5], [14, -3.5, 5.5, 3.5, 6.5], [2, 3.0, -8.0, 11.0, -4.0], [11, -4.0, 3.5, 4.0, 4.5]], 2.0, 3], [[2, 2, 0, -1], [4, 1, 2, 2], [11, 2, -1, 0], [14, 2, -1, 0], [19, 1, 2, -3], [23, 2, -2, 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]]], [[[[8, 9.5, 0.5, 13.5, 1.5], [12, 8.5, 9.0, 12.5, 14.0], [20, -9.0, 9.0, -8.5, 14.0], [7, 2.5, 4.0, 32.5, 4.5], [38, -0.5, -6.0, 15.5, -4.0]], 1.0, 4], [[7, 3, 0, 0], [8, 2, 2, 0], [12, 3, 1, 1], [20, 3, -2, 1], [38, 3, -1, -1]]], [[[[29, -2.0, -7.5, -1.0, -2.5], [36, 3.5, -10.0, 6.5, -5.0], [30, 9.5, 5.5, 25.5, 7.5], [23, 5.5, 1.0, 35.5, 6.0]], 2.0, 5], [[23, 4, 0, 0], [29, 2, -1, -1], [30, 3, 0, 0], [36, 2, 0, -2]]], [[[[1, -8.0, -4.0, 0.0, 0.0], [28, 4.0, -5.5, 12.0, -0.5], [15, 2.0, 3.0, 2.5, 3.5], [23, -4.5, -7.5, 3.5, -2.5]], 2.0, 5], [[1, 2, -1, -1], [15, 0, 1, 1], [23, 2, -1, -1], [28, 2, 0, -1]]]], [[[[[38, -1.0, -6.5, 6.0, -6.0], [3, -2.0, 10.0, 2.0, 19.0], [25, 0.0, 1.5, 3.0, 3.5], [11, 0.0, -5.0, 8.0, 0.0], [33, -8.5, -7.5, -8.0, 1.5], [14, -8.0, 3.0, -6.0, 4.0]], 1.0, 5], [[3, 4, -1, 0], [11, 3, 0, -1], [14, 1, -4, 1], [25, 2, 0, 0], [33, 4, -1, -1], [38, 3, -1, -1]]], [[[[31, 4.0, 6.0, 5.0, 11.0], [33, -7.0, 6.5, 1.0, 7.5], [19, 7.5, 6.5, 10.5, 10.5], [15, -4.5, 4.5, 11.5, 9.5], [1, 8.5, -3.5, 15.5, -3.0], [18, -9.5, -8.5, -2.5, -7.5]], 2.0, 4], [[1, 2, 1, -1], [15, 3, -1, 0], [18, 2, -2, -2], [19, 1, 1, 1], [31, 2, 0, 0], [33, 2, -1, 0]]], [[[[12, -5.0, -5.0, -2.0, -4.0], [15, -1.5, -1.0, 14.5, 3.0], [20, -9.5, -8.5, -1.5, -3.5], [25, -8.5, 9.5, -8.0, 18.5], [37, 9.0, -6.0, 13.0, -5.0], [24, 6.0, -7.5, 14.0, -7.0], [14, -4.0, -8.0, -3.5, 1.0], [6, -2.5, 3.5, 1.5, 8.5]], 1.0, 4], [[6, 3, -1, 0], [12, 2, -2, -2], [14, 3, -1, -1], [15, 3, -1, -1], [20, 3, -2, -2], [24, 3, 0, -1], [25, 3, -2, 1], [37, 2, 2, -2]]], [[[[36, 1.5, -7.0, 2.0, -2.0], [30, -2.5, 1.0, 27.5, 5.0], [21, 9.0, 8.5, 11.0, 17.5]], 2.0, 3], [[21, 2, 1, 1], [30, 2, -1, 0], [36, 2, 0, -1]]], [[[[4, -4.5, -5.5, 2.5, -0.5], [30, -3.5, -5.5, -2.5, 3.5], [39, -7.5, -1.0, -6.5, -0.5], [25, -2.5, 5.5, 0.5, 6.5], [11, 8.0, 1.0, 11.0, 6.0]], 1.0, 2], [[4, 1, -3, -3], [11, 1, 4, 0], [25, 1, -2, 2], [30, 1, -2, -3], [39, 0, -8, -1]]], [[[[37, 5.0, -2.0, 21.0, -1.5], [32, 8.5, 1.5, 38.5, 6.5], [10, -3.0, -2.5, 13.0, -1.5], [17, 3.0, -7.5, 4.0, -6.5]], 2.0, 3], [[10, 2, -1, -1], [17, 0, 1, -4], [32, 2, 1, 0], [37, 2, 0, -1]]], [[[[8, 2.0, -2.5, 5.0, -1.5], [27, -1.0, 2.5, 15.0, 7.5], [35, 5.0, -1.5, 21.0, 2.5], [39, 8.0, 9.5, 38.0, 10.5], [5, 7.0, -8.0, 14.0, -4.0], [21, -8.0, 6.5, -7.0, 7.0]], 2.0, 5], [[5, 2, 0, -1], [8, 1, 0, -1], [21, 0, -4, 3], [27, 3, -1, 0], [35, 3, 0, -1], [39, 4, 0, 0]]], [[[[34, 4.5, -1.0, 20.5, 3.0], [8, -1.5, 2.5, 1.5, 7.5], [31, 8.5, -5.0, 11.5, 0.0], [25, 8.5, 10.0, 24.5, 12.0], [7, -1.0, -4.5, -0.5, -0.5], [1, 6.5, 4.0, 13.5, 9.0]], 2.0, 5], [[1, 2, 0, 0], [7, 1, -1, -2], [8, 2, -1, 0], [25, 3, 0, 0], [31, 2, 1, -1], [34, 3, 0, -1]]]], [[[[[24, -6.5, 6.5, -6.0, 7.0], [28, -5.0, -2.0, -2.0, 0.0], [5, -0.5, 5.5, 0.0, 6.5], [11, 5.0, -4.0, 6.0, 1.0], [6, -1.0, 3.5, 2.0, 7.5], [2, -6.0, 5.0, -4.0, 14.0], [8, -7.5, 8.5, -4.5, 10.5], [14, -7.0, -9.0, -6.5, -8.5]], 1.0, 2], [[2, 1, -3, 2], [5, 0, -1, 5], [6, 1, -1, 1], [8, 1, -4, 4], [11, 1, 2, -2], [14, 0, -7, -9], [24, 0, -7, 6], [28, 1, -3, -1]]], [[[[24, -5.5, -2.0, -1.5, -1.5], [19, -4.5, 5.5, -2.5, 9.5], [6, -7.0, 6.0, -6.5, 11.0]], 2.0, 5], [[6, 2, -1, 0], [19, 1, -2, 1], [24, 1, -2, -1]]], [[[[31, 7.5, -4.0, 23.5, -3.0], [34, 8.5, -4.0, 15.5, 5.0], [21, 4.5, 10.0, 6.5, 14.0], [6, -2.5, 9.5, 5.5, 10.0]], 1.0, 5], [[6, 3, -1, 1], [21, 2, 1, 2], [31, 4, 0, -1], [34, 4, 0, -1]]], [[[[6, 3.5, 9.5, 4.0, 10.5], [5, 9.0, -5.0, 9.5, -3.0], [22, -5.5, -8.5, -2.5, -8.0], [25, -3.5, 0.5, 0.5, 9.5], [18, 10.0, -8.5, 17.0, -4.5]], 1.0, 4], [[5, 1, 4, -3], [6, 0, 3, 9], [18, 3, 1, -2], [22, 2, -2, -3], [25, 3, -1, 0]]], [[[[20, -9.5, 10.0, -7.5, 19.0], [2, -2.5, -0.5, 5.5, 3.5], [13, -10.0, -2.5, -3.0, -0.5], [24, 2.0, -0.5, 9.0, 1.5], [23, 1.5, 1.0, 5.5, 2.0], [17, -10.0, -8.5, 6.0, -3.5], [1, 2.5, -0.5, 10.5, 0.5], [8, 9.5, 4.0, 13.5, 6.0]], 2.0, 2], [[1, 1, 0, -1], [2, 1, -1, -1], [8, 1, 2, 1], [13, 1, -3, -1], [17, 1, -3, -3], [20, 1, -3, 2], [23, 1, 0, 0], [24, 1, 0, -1]]], [[[[1, 2.0, -5.0, 9.0, 0.0], [4, 4.0, -9.0, 4.5, -7.0], [32, 9.0, -6.5, 10.0, -1.5], [11, 6.0, -9.0, 36.0, -8.0], [10, 4.5, -6.0, 34.5, -5.0], [29, -2.0, -10.0, 6.0, -6.0]], 2.0, 4], [[1, 2, 0, -1], [4, 0, 2, -5], [10, 3, 0, -1], [11, 3, 0, -1], [29, 2, -1, -2], [32, 2, 1, -1]]], [[[[38, 1.5, -3.5, 2.5, -1.5], [34, -7.5, 5.0, -5.5, 9.0], [32, 0.5, -9.5, 8.5, -8.5]], 1.0, 5], [[32, 3, 0, -2], [34, 2, -2, 1], [38, 1, 0, -2]]], [[[[14, -0.5, 3.0, 0.5, 7.0], [3, 9.0, 1.0, 9.5, 2.0], [39, 8.0, -7.0, 11.0, -2.0], [1, -6.0, -3.5, -5.5, -3.0], [21, -7.0, 7.5, -6.0, 8.5]], 1.0, 2], [[1, 0, -6, -4], [3, 0, 9, 1], [14, 1, -1, 1], [21, 0, -7, 7], [39, 1, 4, -4]]]], [[[[[27, -7.0, 0.5, -3.0, 4.5], [22, -1.5, -7.5, 28.5, -2.5], [13, -4.5, 3.0, -1.5, 5.0], [20, 6.0, -6.0, 36.0, -5.0], [32, -5.5, 0.0, -3.5, 5.0], [34, -8.0, -4.5, -7.5, 4.5], [2, -1.0, -5.0, 7.0, -4.0]], 2.0, 4], [[2, 2, -1, -1], [13, 1, -2, 0], [20, 3, 0, -1], [22, 3, -1, -1], [27, 1, -2, 0], [32, 2, -1, 0], [34, 3, -1, -1]]], [[[[27, -4.0, 1.5, 4.0, 2.0], [32, -8.0, -2.0, -6.0, 7.0], [20, -1.0, -5.5, 15.0, -3.5], [23, -6.5, -3.0, -3.5, 2.0], [1, 9.0, 7.5, 17.0, 9.5], [19, -7.5, 7.0, -5.5, 11.0], [3, 2.5, -6.5, 10.5, -5.5], [28, -0.5, 5.0, 3.5, 5.5], [13, 10.0, -3.5, 40.0, 1.5], [4, -7.0, 9.5, -4.0, 13.5]], 1.0, 5], [[1, 3, 1, 0], [3, 3, 0, -1], [4, 2, -2, 2], [13, 4, 0, -1], [19, 2, -2, 1], [20, 4, -1, -1], [23, 3, -1, -1], [27, 3, -1, 0], [28, 2, -1, 1], [32, 4, -1, -1]]], [[[[7, -0.5, 6.5, 29.5, 7.0], [32, -10.0, 7.5, 6.0, 8.0], [37, -1.0, 4.0, 3.0, 6.0], [18, 1.0, -4.0, 1.5, -2.0], [6, 4.0, 1.5, 20.0, 5.5], [15, 10.0, 2.0, 14.0, 2.5], [11, -4.0, 0.0, 0.0, 5.0], [22, -9.5, -4.0, 6.5, 0.0]], 2.0, 5], [[6, 3, 0, 0], [7, 4, -1, 0], [11, 2, -1, 0], [15, 1, 2, 0], [18, 0, 0, -2], [22, 3, -1, -1], [32, 3, -1, 0], [37, 1, -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]]], [[[[16, -5.5, 2.5, 1.5, 3.5], [20, -6.0, -6.5, 10.0, -5.5], [22, -1.0, -6.5, 2.0, -2.5], [10, 3.0, 1.5, 10.0, 2.5], [4, -10.0, 1.0, -9.5, 5.0]], 1.0, 3], [[4, 2, -3, 0], [10, 2, 0, 0], [16, 2, -2, 0], [20, 2, -2, -2], [22, 2, -1, -2]]], [[[[24, 10.0, 2.5, 26.0, 11.5], [1, -7.5, -10.0, 0.5, -9.0], [4, 0.0, 6.0, 4.0, 8.0], [17, -0.5, 5.0, 7.5, 14.0], [32, 3.5, -1.5, 19.5, -0.5]], 2.0, 4], [[1, 2, -1, -2], [4, 1, 0, 1], [17, 3, -1, 0], [24, 3, 0, 0], [32, 3, 0, -1]]], [[[[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]]], [[[[7, 7.0, 0.5, 10.0, 1.0], [31, 7.5, 10.0, 23.5, 14.0], [11, -6.5, 9.0, -5.5, 14.0], [17, 8.0, -7.0, 8.5, -2.0], [22, 1.0, 3.0, 2.0, 5.0], [30, -2.0, -7.0, 1.0, -3.0]], 2.0, 5], [[7, 1, 1, 0], [11, 2, -1, 1], [17, 2, 1, -1], [22, 0, 0, 1], [30, 1, -1, -2], [31, 3, 0, 0]]]]]
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 fixtureActualExpectedOutcome
case 0[[6, 2, 2, 0], [10, 1, -4, 0]][[6, 1, 4, 0], [10, 1, -4, 0]]Failed
case 1[[9, 2, 1, 0], [14, 3, -1, -1], [28, 1, -1, 0], [37, 1, -2, -2], [38, 2, 0, 0]][[9, 2, 1, 0], [14, 3, -1, -1], [28, 1, -1, 0], [37, 1, -2, -2], [38, 2, 0, 0]]Passed
case 2[[12, 1, -3, -2], [22, 4, -1, 0], [34, 1, 0, 0], [35, 2, 0, 0], [36, 3, -1, 0], [38, 2, 0, 0]][[12, 1, -3, -2], [22, 4, -1, 0], [34, 1, 0, 0], [35, 2, 0, 0], [36, 3, -1, 0], [38, 2, 0, 0]]Passed
case 3[[1, 4, 0, 0], [2, 2, 1, 0], [27, 2, 0, -2], [36, 4, 0, -1], [38, 4, -1, -1]][[1, 3, 0, 0], [2, 2, 1, 0], [27, 2, 0, -2], [36, 3, 0, -1], [38, 3, -2, -1]]Failed
case 4[[5, 0, 0, 2], [9, 1, -2, 1], [13, 4, -1, 0], [18, 1, -1, 0], [34, 3, -1, -1], [38, 2, 1, 0]][[5, 0, 0, 2], [9, 1, -2, 1], [13, 3, -1, 0], [18, 1, -1, 0], [34, 3, -1, -1], [38, 2, 1, 0]]Failed
case 5[[4, 4, 0, -1], [8, 3, 0, -1], [11, 2, 0, 1], [29, 0, -3, 4], [39, 2, -1, 0]][[4, 3, 0, -1], [8, 3, 0, -1], [11, 2, 0, 1], [29, 0, -3, 4], [39, 2, -1, 0]]Failed
case 6[[9, 2, 1, -2], [10, 3, 0, 0], [21, 2, -1, 0], [24, 0, -3, 3], [34, 1, 1, 0], [39, 3, 0, -1]][[9, 2, 1, -2], [10, 3, 0, 0], [21, 2, -1, 0], [24, 0, -3, 3], [34, 1, 1, 0], [39, 3, 0, -1]]Passed
case 7[[7, 0, 0, -5], [16, 3, 0, -1], [27, 0, 1, 2], [36, 0, 1, 4]][[7, 0, 0, -5], [16, 3, 0, -1], [27, 0, 1, 2], [36, 0, 1, 4]]Passed

SHA-256 / d38d1aa919ad985f236c757c764ca10ab83ffb97c8c2bb6c46f4fc60ae8a797f

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 - 2:
            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 = [[[[[[6, 8.5, 1.0, 11.5, 2.0], [10, -8.0, 1.5, -7.0, 3.5]], 1.0, 2], [[6, 1, 4, 0], [10, 1, -4, 0]]], [[[[38, 3.5, 1.0, 10.5, 5.0], [14, -1.5, -1.5, 14.5, 2.5], [37, -6.5, -6.0, -6.0, -2.0], [9, 8.5, 4.0, 16.5, 6.0], [28, -3.5, 1.5, 0.5, 2.0]], 2.0, 4], [[9, 2, 1, 0], [14, 3, -1, -1], [28, 1, -1, 0], [37, 1, -2, -2], [38, 2, 0, 0]]], [[[[38, 1.5, 7.5, 8.5, 9.5], [22, -10.0, 6.5, 20.0, 7.0], [36, -5.5, 2.0, 10.5, 2.5], [34, 1.0, 0.0, 4.0, 4.0], [35, 4.0, 1.0, 11.0, 2.0], [12, -8.5, -4.5, -7.5, -0.5]], 2.0, 5], [[12, 1, -3, -2], [22, 4, -1, 0], [34, 1, 0, 0], [35, 2, 0, 0], [36, 3, -1, 0], [38, 2, 0, 0]]], [[[[36, 4.5, -6.0, 20.5, -1.0], [27, 1.0, -7.5, 4.0, -3.5], [2, 4.0, 1.5, 7.0, 5.5], [1, 7.0, 0.5, 11.0, 9.5], [38, -9.5, -5.0, 20.5, -1.0]], 1.0, 4], [[1, 3, 0, 0], [2, 2, 1, 0], [27, 2, 0, -2], [36, 3, 0, -1], [38, 3, -2, -1]]], [[[[9, -8.0, 7.5, -6.0, 11.5], [38, 9.0, 6.0, 12.0, 11.0], [5, 1.5, 4.0, 2.0, 5.0], [13, -5.0, 8.5, 25.0, 17.5], [18, -3.5, 1.0, 0.5, 1.5], [34, -10.0, -0.5, -2.0, 8.5]], 2.0, 4], [[5, 0, 0, 2], [9, 1, -2, 1], [13, 3, -1, 0], [18, 1, -1, 0], [34, 3, -1, -1], [38, 2, 1, 0]]], [[[[29, -5.5, 8.5, -3.5, 9.0], [8, 1.0, -4.5, 17.0, -0.5], [39, -2.0, 7.0, 0.0, 12.0], [11, 2.0, 8.0, 6.0, 13.0], [4, 1.5, -3.0, 31.5, -2.5]], 2.0, 4], [[4, 3, 0, -1], [8, 3, 0, -1], [11, 2, 0, 1], [29, 0, -3, 4], [39, 2, -1, 0]]], [[[[34, 4.0, 2.0, 7.0, 4.0], [10, 8.0, 8.0, 24.0, 9.0], [39, 10.0, -1.5, 14.0, 7.5], [9, 8.0, -9.5, 11.0, -4.5], [24, -5.0, 6.0, -3.0, 6.5], [21, -2.5, 1.0, 1.5, 6.0]], 2.0, 4], [[9, 2, 1, -2], [10, 3, 0, 0], [21, 2, -1, 0], [24, 0, -3, 3], [34, 1, 1, 0], [39, 3, 0, -1]]], [[[[7, 1.5, -8.5, 3.5, -6.5], [16, 1.5, -6.5, 17.5, -2.5], [27, 3.5, 5.0, 4.0, 5.5], [36, 3.0, 8.5, 3.5, 10.5]], 2.0, 5], [[7, 0, 0, -5], [16, 3, 0, -1], [27, 0, 1, 2], [36, 0, 1, 4]]]], [[[[[34, 1.5, 7.5, 4.5, 16.5], [3, -1.5, -10.0, 0.5, -1.0], [11, 3.0, -2.0, 7.0, -1.5]], 2.0, 3], [[3, 2, -1, -2], [11, 1, 0, -1], [34, 2, 0, 0]]], [[[[8, 6.5, -4.5, 14.5, -0.5], [9, -4.0, 4.5, 3.0, 5.0]], 1.0, 3], [[8, 2, 1, -2], [9, 2, -1, 1]]], [[[[10, -2.5, 7.5, -2.0, 8.5], [25, 10.0, 2.0, 40.0, 6.0], [11, -5.5, 7.5, -1.5, 8.0]], 2.0, 2], [[10, 0, -2, 3], [11, 1, -2, 1], [25, 1, 2, 0]]], [[[[19, 10.0, -8.5, 13.0, -4.5], [4, 8.5, 10.0, 10.5, 14.0], [23, -9.0, 4.5, -7.0, 9.5], [14, -3.5, 5.5, 3.5, 6.5], [2, 3.0, -8.0, 11.0, -4.0], [11, -4.0, 3.5, 4.0, 4.5]], 2.0, 3], [[2, 2, 0, -1], [4, 1, 2, 2], [11, 2, -1, 0], [14, 2, -1, 0], [19, 1, 2, -3], [23, 2, -2, 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]]], [[[[8, 9.5, 0.5, 13.5, 1.5], [12, 8.5, 9.0, 12.5, 14.0], [20, -9.0, 9.0, -8.5, 14.0], [7, 2.5, 4.0, 32.5, 4.5], [38, -0.5, -6.0, 15.5, -4.0]], 1.0, 4], [[7, 3, 0, 0], [8, 2, 2, 0], [12, 3, 1, 1], [20, 3, -2, 1], [38, 3, -1, -1]]], [[[[29, -2.0, -7.5, -1.0, -2.5], [36, 3.5, -10.0, 6.5, -5.0], [30, 9.5, 5.5, 25.5, 7.5], [23, 5.5, 1.0, 35.5, 6.0]], 2.0, 5], [[23, 4, 0, 0], [29, 2, -1, -1], [30, 3, 0, 0], [36, 2, 0, -2]]], [[[[1, -8.0, -4.0, 0.0, 0.0], [28, 4.0, -5.5, 12.0, -0.5], [15, 2.0, 3.0, 2.5, 3.5], [23, -4.5, -7.5, 3.5, -2.5]], 2.0, 5], [[1, 2, -1, -1], [15, 0, 1, 1], [23, 2, -1, -1], [28, 2, 0, -1]]]], [[[[[38, -1.0, -6.5, 6.0, -6.0], [3, -2.0, 10.0, 2.0, 19.0], [25, 0.0, 1.5, 3.0, 3.5], [11, 0.0, -5.0, 8.0, 0.0], [33, -8.5, -7.5, -8.0, 1.5], [14, -8.0, 3.0, -6.0, 4.0]], 1.0, 5], [[3, 4, -1, 0], [11, 3, 0, -1], [14, 1, -4, 1], [25, 2, 0, 0], [33, 4, -1, -1], [38, 3, -1, -1]]], [[[[31, 4.0, 6.0, 5.0, 11.0], [33, -7.0, 6.5, 1.0, 7.5], [19, 7.5, 6.5, 10.5, 10.5], [15, -4.5, 4.5, 11.5, 9.5], [1, 8.5, -3.5, 15.5, -3.0], [18, -9.5, -8.5, -2.5, -7.5]], 2.0, 4], [[1, 2, 1, -1], [15, 3, -1, 0], [18, 2, -2, -2], [19, 1, 1, 1], [31, 2, 0, 0], [33, 2, -1, 0]]], [[[[12, -5.0, -5.0, -2.0, -4.0], [15, -1.5, -1.0, 14.5, 3.0], [20, -9.5, -8.5, -1.5, -3.5], [25, -8.5, 9.5, -8.0, 18.5], [37, 9.0, -6.0, 13.0, -5.0], [24, 6.0, -7.5, 14.0, -7.0], [14, -4.0, -8.0, -3.5, 1.0], [6, -2.5, 3.5, 1.5, 8.5]], 1.0, 4], [[6, 3, -1, 0], [12, 2, -2, -2], [14, 3, -1, -1], [15, 3, -1, -1], [20, 3, -2, -2], [24, 3, 0, -1], [25, 3, -2, 1], [37, 2, 2, -2]]], [[[[36, 1.5, -7.0, 2.0, -2.0], [30, -2.5, 1.0, 27.5, 5.0], [21, 9.0, 8.5, 11.0, 17.5]], 2.0, 3], [[21, 2, 1, 1], [30, 2, -1, 0], [36, 2, 0, -1]]], [[[[4, -4.5, -5.5, 2.5, -0.5], [30, -3.5, -5.5, -2.5, 3.5], [39, -7.5, -1.0, -6.5, -0.5], [25, -2.5, 5.5, 0.5, 6.5], [11, 8.0, 1.0, 11.0, 6.0]], 1.0, 2], [[4, 1, -3, -3], [11, 1, 4, 0], [25, 1, -2, 2], [30, 1, -2, -3], [39, 0, -8, -1]]], [[[[37, 5.0, -2.0, 21.0, -1.5], [32, 8.5, 1.5, 38.5, 6.5], [10, -3.0, -2.5, 13.0, -1.5], [17, 3.0, -7.5, 4.0, -6.5]], 2.0, 3], [[10, 2, -1, -1], [17, 0, 1, -4], [32, 2, 1, 0], [37, 2, 0, -1]]], [[[[8, 2.0, -2.5, 5.0, -1.5], [27, -1.0, 2.5, 15.0, 7.5], [35, 5.0, -1.5, 21.0, 2.5], [39, 8.0, 9.5, 38.0, 10.5], [5, 7.0, -8.0, 14.0, -4.0], [21, -8.0, 6.5, -7.0, 7.0]], 2.0, 5], [[5, 2, 0, -1], [8, 1, 0, -1], [21, 0, -4, 3], [27, 3, -1, 0], [35, 3, 0, -1], [39, 4, 0, 0]]], [[[[34, 4.5, -1.0, 20.5, 3.0], [8, -1.5, 2.5, 1.5, 7.5], [31, 8.5, -5.0, 11.5, 0.0], [25, 8.5, 10.0, 24.5, 12.0], [7, -1.0, -4.5, -0.5, -0.5], [1, 6.5, 4.0, 13.5, 9.0]], 2.0, 5], [[1, 2, 0, 0], [7, 1, -1, -2], [8, 2, -1, 0], [25, 3, 0, 0], [31, 2, 1, -1], [34, 3, 0, -1]]]], [[[[[24, -6.5, 6.5, -6.0, 7.0], [28, -5.0, -2.0, -2.0, 0.0], [5, -0.5, 5.5, 0.0, 6.5], [11, 5.0, -4.0, 6.0, 1.0], [6, -1.0, 3.5, 2.0, 7.5], [2, -6.0, 5.0, -4.0, 14.0], [8, -7.5, 8.5, -4.5, 10.5], [14, -7.0, -9.0, -6.5, -8.5]], 1.0, 2], [[2, 1, -3, 2], [5, 0, -1, 5], [6, 1, -1, 1], [8, 1, -4, 4], [11, 1, 2, -2], [14, 0, -7, -9], [24, 0, -7, 6], [28, 1, -3, -1]]], [[[[24, -5.5, -2.0, -1.5, -1.5], [19, -4.5, 5.5, -2.5, 9.5], [6, -7.0, 6.0, -6.5, 11.0]], 2.0, 5], [[6, 2, -1, 0], [19, 1, -2, 1], [24, 1, -2, -1]]], [[[[31, 7.5, -4.0, 23.5, -3.0], [34, 8.5, -4.0, 15.5, 5.0], [21, 4.5, 10.0, 6.5, 14.0], [6, -2.5, 9.5, 5.5, 10.0]], 1.0, 5], [[6, 3, -1, 1], [21, 2, 1, 2], [31, 4, 0, -1], [34, 4, 0, -1]]], [[[[6, 3.5, 9.5, 4.0, 10.5], [5, 9.0, -5.0, 9.5, -3.0], [22, -5.5, -8.5, -2.5, -8.0], [25, -3.5, 0.5, 0.5, 9.5], [18, 10.0, -8.5, 17.0, -4.5]], 1.0, 4], [[5, 1, 4, -3], [6, 0, 3, 9], [18, 3, 1, -2], [22, 2, -2, -3], [25, 3, -1, 0]]], [[[[20, -9.5, 10.0, -7.5, 19.0], [2, -2.5, -0.5, 5.5, 3.5], [13, -10.0, -2.5, -3.0, -0.5], [24, 2.0, -0.5, 9.0, 1.5], [23, 1.5, 1.0, 5.5, 2.0], [17, -10.0, -8.5, 6.0, -3.5], [1, 2.5, -0.5, 10.5, 0.5], [8, 9.5, 4.0, 13.5, 6.0]], 2.0, 2], [[1, 1, 0, -1], [2, 1, -1, -1], [8, 1, 2, 1], [13, 1, -3, -1], [17, 1, -3, -3], [20, 1, -3, 2], [23, 1, 0, 0], [24, 1, 0, -1]]], [[[[1, 2.0, -5.0, 9.0, 0.0], [4, 4.0, -9.0, 4.5, -7.0], [32, 9.0, -6.5, 10.0, -1.5], [11, 6.0, -9.0, 36.0, -8.0], [10, 4.5, -6.0, 34.5, -5.0], [29, -2.0, -10.0, 6.0, -6.0]], 2.0, 4], [[1, 2, 0, -1], [4, 0, 2, -5], [10, 3, 0, -1], [11, 3, 0, -1], [29, 2, -1, -2], [32, 2, 1, -1]]], [[[[38, 1.5, -3.5, 2.5, -1.5], [34, -7.5, 5.0, -5.5, 9.0], [32, 0.5, -9.5, 8.5, -8.5]], 1.0, 5], [[32, 3, 0, -2], [34, 2, -2, 1], [38, 1, 0, -2]]], [[[[14, -0.5, 3.0, 0.5, 7.0], [3, 9.0, 1.0, 9.5, 2.0], [39, 8.0, -7.0, 11.0, -2.0], [1, -6.0, -3.5, -5.5, -3.0], [21, -7.0, 7.5, -6.0, 8.5]], 1.0, 2], [[1, 0, -6, -4], [3, 0, 9, 1], [14, 1, -1, 1], [21, 0, -7, 7], [39, 1, 4, -4]]]], [[[[[27, -7.0, 0.5, -3.0, 4.5], [22, -1.5, -7.5, 28.5, -2.5], [13, -4.5, 3.0, -1.5, 5.0], [20, 6.0, -6.0, 36.0, -5.0], [32, -5.5, 0.0, -3.5, 5.0], [34, -8.0, -4.5, -7.5, 4.5], [2, -1.0, -5.0, 7.0, -4.0]], 2.0, 4], [[2, 2, -1, -1], [13, 1, -2, 0], [20, 3, 0, -1], [22, 3, -1, -1], [27, 1, -2, 0], [32, 2, -1, 0], [34, 3, -1, -1]]], [[[[27, -4.0, 1.5, 4.0, 2.0], [32, -8.0, -2.0, -6.0, 7.0], [20, -1.0, -5.5, 15.0, -3.5], [23, -6.5, -3.0, -3.5, 2.0], [1, 9.0, 7.5, 17.0, 9.5], [19, -7.5, 7.0, -5.5, 11.0], [3, 2.5, -6.5, 10.5, -5.5], [28, -0.5, 5.0, 3.5, 5.5], [13, 10.0, -3.5, 40.0, 1.5], [4, -7.0, 9.5, -4.0, 13.5]], 1.0, 5], [[1, 3, 1, 0], [3, 3, 0, -1], [4, 2, -2, 2], [13, 4, 0, -1], [19, 2, -2, 1], [20, 4, -1, -1], [23, 3, -1, -1], [27, 3, -1, 0], [28, 2, -1, 1], [32, 4, -1, -1]]], [[[[7, -0.5, 6.5, 29.5, 7.0], [32, -10.0, 7.5, 6.0, 8.0], [37, -1.0, 4.0, 3.0, 6.0], [18, 1.0, -4.0, 1.5, -2.0], [6, 4.0, 1.5, 20.0, 5.5], [15, 10.0, 2.0, 14.0, 2.5], [11, -4.0, 0.0, 0.0, 5.0], [22, -9.5, -4.0, 6.5, 0.0]], 2.0, 5], [[6, 3, 0, 0], [7, 4, -1, 0], [11, 2, -1, 0], [15, 1, 2, 0], [18, 0, 0, -2], [22, 3, -1, -1], [32, 3, -1, 0], [37, 1, -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]]], [[[[16, -5.5, 2.5, 1.5, 3.5], [20, -6.0, -6.5, 10.0, -5.5], [22, -1.0, -6.5, 2.0, -2.5], [10, 3.0, 1.5, 10.0, 2.5], [4, -10.0, 1.0, -9.5, 5.0]], 1.0, 3], [[4, 2, -3, 0], [10, 2, 0, 0], [16, 2, -2, 0], [20, 2, -2, -2], [22, 2, -1, -2]]], [[[[24, 10.0, 2.5, 26.0, 11.5], [1, -7.5, -10.0, 0.5, -9.0], [4, 0.0, 6.0, 4.0, 8.0], [17, -0.5, 5.0, 7.5, 14.0], [32, 3.5, -1.5, 19.5, -0.5]], 2.0, 4], [[1, 2, -1, -2], [4, 1, 0, 1], [17, 3, -1, 0], [24, 3, 0, 0], [32, 3, 0, -1]]], [[[[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]]], [[[[7, 7.0, 0.5, 10.0, 1.0], [31, 7.5, 10.0, 23.5, 14.0], [11, -6.5, 9.0, -5.5, 14.0], [17, 8.0, -7.0, 8.5, -2.0], [22, 1.0, 3.0, 2.0, 5.0], [30, -2.0, -7.0, 1.0, -3.0]], 2.0, 5], [[7, 1, 1, 0], [11, 2, -1, 1], [17, 2, 1, -1], [22, 0, 0, 1], [30, 1, -1, -2], [31, 3, 0, 0]]]]]
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 fixtureActualExpectedOutcome
case 0[[6, 0, 8, 1], [10, 0, -8, 1]][[6, 1, 4, 0], [10, 1, -4, 0]]Failed
case 1[[9, 2, 1, 0], [14, 2, -1, -1], [28, 1, -1, 0], [37, 1, -2, -2], [38, 2, 0, 0]][[9, 2, 1, 0], [14, 3, -1, -1], [28, 1, -1, 0], [37, 1, -2, -2], [38, 2, 0, 0]]Failed
case 2[[12, 1, -3, -2], [22, 3, -1, 0], [34, 1, 0, 0], [35, 2, 0, 0], [36, 3, -1, 0], [38, 2, 0, 0]][[12, 1, -3, -2], [22, 4, -1, 0], [34, 1, 0, 0], [35, 2, 0, 0], [36, 3, -1, 0], [38, 2, 0, 0]]Failed
case 3[[1, 2, 1, 0], [2, 2, 1, 0], [27, 2, 0, -2], [36, 2, 1, -2], [38, 2, -3, -2]][[1, 3, 0, 0], [2, 2, 1, 0], [27, 2, 0, -2], [36, 3, 0, -1], [38, 3, -2, -1]]Failed
case 4[[5, 0, 0, 2], [9, 1, -2, 1], [13, 2, -1, 1], [18, 1, -1, 0], [34, 2, -2, -1], [38, 2, 1, 0]][[5, 0, 0, 2], [9, 1, -2, 1], [13, 3, -1, 0], [18, 1, -1, 0], [34, 3, -1, -1], [38, 2, 1, 0]]Failed
case 5[[4, 2, 0, -1], [8, 2, 0, -1], [11, 2, 0, 1], [29, 0, -3, 4], [39, 2, -1, 0]][[4, 3, 0, -1], [8, 3, 0, -1], [11, 2, 0, 1], [29, 0, -3, 4], [39, 2, -1, 0]]Failed
case 6[[9, 2, 1, -2], [10, 2, 1, 1], [21, 2, -1, 0], [24, 0, -3, 3], [34, 1, 1, 0], [39, 2, 1, -1]][[9, 2, 1, -2], [10, 3, 0, 0], [21, 2, -1, 0], [24, 0, -3, 3], [34, 1, 1, 0], [39, 3, 0, -1]]Failed
case 7[[7, 0, 0, -5], [16, 3, 0, -1], [27, 0, 1, 2], [36, 0, 1, 4]][[7, 0, 0, -5], [16, 3, 0, -1], [27, 0, 1, 2], [36, 0, 1, 4]]Passed

SHA-256 / 030566b04ceca2660fd4ca573ae2e1e17be8b56bf7ae6d1c6440ec9aa38664e1

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 = [[[[[[6, 8.5, 1.0, 11.5, 2.0], [10, -8.0, 1.5, -7.0, 3.5]], 1.0, 2], [[6, 1, 4, 0], [10, 1, -4, 0]]], [[[[38, 3.5, 1.0, 10.5, 5.0], [14, -1.5, -1.5, 14.5, 2.5], [37, -6.5, -6.0, -6.0, -2.0], [9, 8.5, 4.0, 16.5, 6.0], [28, -3.5, 1.5, 0.5, 2.0]], 2.0, 4], [[9, 2, 1, 0], [14, 3, -1, -1], [28, 1, -1, 0], [37, 1, -2, -2], [38, 2, 0, 0]]], [[[[38, 1.5, 7.5, 8.5, 9.5], [22, -10.0, 6.5, 20.0, 7.0], [36, -5.5, 2.0, 10.5, 2.5], [34, 1.0, 0.0, 4.0, 4.0], [35, 4.0, 1.0, 11.0, 2.0], [12, -8.5, -4.5, -7.5, -0.5]], 2.0, 5], [[12, 1, -3, -2], [22, 4, -1, 0], [34, 1, 0, 0], [35, 2, 0, 0], [36, 3, -1, 0], [38, 2, 0, 0]]], [[[[36, 4.5, -6.0, 20.5, -1.0], [27, 1.0, -7.5, 4.0, -3.5], [2, 4.0, 1.5, 7.0, 5.5], [1, 7.0, 0.5, 11.0, 9.5], [38, -9.5, -5.0, 20.5, -1.0]], 1.0, 4], [[1, 3, 0, 0], [2, 2, 1, 0], [27, 2, 0, -2], [36, 3, 0, -1], [38, 3, -2, -1]]], [[[[9, -8.0, 7.5, -6.0, 11.5], [38, 9.0, 6.0, 12.0, 11.0], [5, 1.5, 4.0, 2.0, 5.0], [13, -5.0, 8.5, 25.0, 17.5], [18, -3.5, 1.0, 0.5, 1.5], [34, -10.0, -0.5, -2.0, 8.5]], 2.0, 4], [[5, 0, 0, 2], [9, 1, -2, 1], [13, 3, -1, 0], [18, 1, -1, 0], [34, 3, -1, -1], [38, 2, 1, 0]]], [[[[29, -5.5, 8.5, -3.5, 9.0], [8, 1.0, -4.5, 17.0, -0.5], [39, -2.0, 7.0, 0.0, 12.0], [11, 2.0, 8.0, 6.0, 13.0], [4, 1.5, -3.0, 31.5, -2.5]], 2.0, 4], [[4, 3, 0, -1], [8, 3, 0, -1], [11, 2, 0, 1], [29, 0, -3, 4], [39, 2, -1, 0]]], [[[[34, 4.0, 2.0, 7.0, 4.0], [10, 8.0, 8.0, 24.0, 9.0], [39, 10.0, -1.5, 14.0, 7.5], [9, 8.0, -9.5, 11.0, -4.5], [24, -5.0, 6.0, -3.0, 6.5], [21, -2.5, 1.0, 1.5, 6.0]], 2.0, 4], [[9, 2, 1, -2], [10, 3, 0, 0], [21, 2, -1, 0], [24, 0, -3, 3], [34, 1, 1, 0], [39, 3, 0, -1]]], [[[[7, 1.5, -8.5, 3.5, -6.5], [16, 1.5, -6.5, 17.5, -2.5], [27, 3.5, 5.0, 4.0, 5.5], [36, 3.0, 8.5, 3.5, 10.5]], 2.0, 5], [[7, 0, 0, -5], [16, 3, 0, -1], [27, 0, 1, 2], [36, 0, 1, 4]]]], [[[[[34, 1.5, 7.5, 4.5, 16.5], [3, -1.5, -10.0, 0.5, -1.0], [11, 3.0, -2.0, 7.0, -1.5]], 2.0, 3], [[3, 2, -1, -2], [11, 1, 0, -1], [34, 2, 0, 0]]], [[[[8, 6.5, -4.5, 14.5, -0.5], [9, -4.0, 4.5, 3.0, 5.0]], 1.0, 3], [[8, 2, 1, -2], [9, 2, -1, 1]]], [[[[10, -2.5, 7.5, -2.0, 8.5], [25, 10.0, 2.0, 40.0, 6.0], [11, -5.5, 7.5, -1.5, 8.0]], 2.0, 2], [[10, 0, -2, 3], [11, 1, -2, 1], [25, 1, 2, 0]]], [[[[19, 10.0, -8.5, 13.0, -4.5], [4, 8.5, 10.0, 10.5, 14.0], [23, -9.0, 4.5, -7.0, 9.5], [14, -3.5, 5.5, 3.5, 6.5], [2, 3.0, -8.0, 11.0, -4.0], [11, -4.0, 3.5, 4.0, 4.5]], 2.0, 3], [[2, 2, 0, -1], [4, 1, 2, 2], [11, 2, -1, 0], [14, 2, -1, 0], [19, 1, 2, -3], [23, 2, -2, 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]]], [[[[8, 9.5, 0.5, 13.5, 1.5], [12, 8.5, 9.0, 12.5, 14.0], [20, -9.0, 9.0, -8.5, 14.0], [7, 2.5, 4.0, 32.5, 4.5], [38, -0.5, -6.0, 15.5, -4.0]], 1.0, 4], [[7, 3, 0, 0], [8, 2, 2, 0], [12, 3, 1, 1], [20, 3, -2, 1], [38, 3, -1, -1]]], [[[[29, -2.0, -7.5, -1.0, -2.5], [36, 3.5, -10.0, 6.5, -5.0], [30, 9.5, 5.5, 25.5, 7.5], [23, 5.5, 1.0, 35.5, 6.0]], 2.0, 5], [[23, 4, 0, 0], [29, 2, -1, -1], [30, 3, 0, 0], [36, 2, 0, -2]]], [[[[1, -8.0, -4.0, 0.0, 0.0], [28, 4.0, -5.5, 12.0, -0.5], [15, 2.0, 3.0, 2.5, 3.5], [23, -4.5, -7.5, 3.5, -2.5]], 2.0, 5], [[1, 2, -1, -1], [15, 0, 1, 1], [23, 2, -1, -1], [28, 2, 0, -1]]]], [[[[[38, -1.0, -6.5, 6.0, -6.0], [3, -2.0, 10.0, 2.0, 19.0], [25, 0.0, 1.5, 3.0, 3.5], [11, 0.0, -5.0, 8.0, 0.0], [33, -8.5, -7.5, -8.0, 1.5], [14, -8.0, 3.0, -6.0, 4.0]], 1.0, 5], [[3, 4, -1, 0], [11, 3, 0, -1], [14, 1, -4, 1], [25, 2, 0, 0], [33, 4, -1, -1], [38, 3, -1, -1]]], [[[[31, 4.0, 6.0, 5.0, 11.0], [33, -7.0, 6.5, 1.0, 7.5], [19, 7.5, 6.5, 10.5, 10.5], [15, -4.5, 4.5, 11.5, 9.5], [1, 8.5, -3.5, 15.5, -3.0], [18, -9.5, -8.5, -2.5, -7.5]], 2.0, 4], [[1, 2, 1, -1], [15, 3, -1, 0], [18, 2, -2, -2], [19, 1, 1, 1], [31, 2, 0, 0], [33, 2, -1, 0]]], [[[[12, -5.0, -5.0, -2.0, -4.0], [15, -1.5, -1.0, 14.5, 3.0], [20, -9.5, -8.5, -1.5, -3.5], [25, -8.5, 9.5, -8.0, 18.5], [37, 9.0, -6.0, 13.0, -5.0], [24, 6.0, -7.5, 14.0, -7.0], [14, -4.0, -8.0, -3.5, 1.0], [6, -2.5, 3.5, 1.5, 8.5]], 1.0, 4], [[6, 3, -1, 0], [12, 2, -2, -2], [14, 3, -1, -1], [15, 3, -1, -1], [20, 3, -2, -2], [24, 3, 0, -1], [25, 3, -2, 1], [37, 2, 2, -2]]], [[[[36, 1.5, -7.0, 2.0, -2.0], [30, -2.5, 1.0, 27.5, 5.0], [21, 9.0, 8.5, 11.0, 17.5]], 2.0, 3], [[21, 2, 1, 1], [30, 2, -1, 0], [36, 2, 0, -1]]], [[[[4, -4.5, -5.5, 2.5, -0.5], [30, -3.5, -5.5, -2.5, 3.5], [39, -7.5, -1.0, -6.5, -0.5], [25, -2.5, 5.5, 0.5, 6.5], [11, 8.0, 1.0, 11.0, 6.0]], 1.0, 2], [[4, 1, -3, -3], [11, 1, 4, 0], [25, 1, -2, 2], [30, 1, -2, -3], [39, 0, -8, -1]]], [[[[37, 5.0, -2.0, 21.0, -1.5], [32, 8.5, 1.5, 38.5, 6.5], [10, -3.0, -2.5, 13.0, -1.5], [17, 3.0, -7.5, 4.0, -6.5]], 2.0, 3], [[10, 2, -1, -1], [17, 0, 1, -4], [32, 2, 1, 0], [37, 2, 0, -1]]], [[[[8, 2.0, -2.5, 5.0, -1.5], [27, -1.0, 2.5, 15.0, 7.5], [35, 5.0, -1.5, 21.0, 2.5], [39, 8.0, 9.5, 38.0, 10.5], [5, 7.0, -8.0, 14.0, -4.0], [21, -8.0, 6.5, -7.0, 7.0]], 2.0, 5], [[5, 2, 0, -1], [8, 1, 0, -1], [21, 0, -4, 3], [27, 3, -1, 0], [35, 3, 0, -1], [39, 4, 0, 0]]], [[[[34, 4.5, -1.0, 20.5, 3.0], [8, -1.5, 2.5, 1.5, 7.5], [31, 8.5, -5.0, 11.5, 0.0], [25, 8.5, 10.0, 24.5, 12.0], [7, -1.0, -4.5, -0.5, -0.5], [1, 6.5, 4.0, 13.5, 9.0]], 2.0, 5], [[1, 2, 0, 0], [7, 1, -1, -2], [8, 2, -1, 0], [25, 3, 0, 0], [31, 2, 1, -1], [34, 3, 0, -1]]]], [[[[[24, -6.5, 6.5, -6.0, 7.0], [28, -5.0, -2.0, -2.0, 0.0], [5, -0.5, 5.5, 0.0, 6.5], [11, 5.0, -4.0, 6.0, 1.0], [6, -1.0, 3.5, 2.0, 7.5], [2, -6.0, 5.0, -4.0, 14.0], [8, -7.5, 8.5, -4.5, 10.5], [14, -7.0, -9.0, -6.5, -8.5]], 1.0, 2], [[2, 1, -3, 2], [5, 0, -1, 5], [6, 1, -1, 1], [8, 1, -4, 4], [11, 1, 2, -2], [14, 0, -7, -9], [24, 0, -7, 6], [28, 1, -3, -1]]], [[[[24, -5.5, -2.0, -1.5, -1.5], [19, -4.5, 5.5, -2.5, 9.5], [6, -7.0, 6.0, -6.5, 11.0]], 2.0, 5], [[6, 2, -1, 0], [19, 1, -2, 1], [24, 1, -2, -1]]], [[[[31, 7.5, -4.0, 23.5, -3.0], [34, 8.5, -4.0, 15.5, 5.0], [21, 4.5, 10.0, 6.5, 14.0], [6, -2.5, 9.5, 5.5, 10.0]], 1.0, 5], [[6, 3, -1, 1], [21, 2, 1, 2], [31, 4, 0, -1], [34, 4, 0, -1]]], [[[[6, 3.5, 9.5, 4.0, 10.5], [5, 9.0, -5.0, 9.5, -3.0], [22, -5.5, -8.5, -2.5, -8.0], [25, -3.5, 0.5, 0.5, 9.5], [18, 10.0, -8.5, 17.0, -4.5]], 1.0, 4], [[5, 1, 4, -3], [6, 0, 3, 9], [18, 3, 1, -2], [22, 2, -2, -3], [25, 3, -1, 0]]], [[[[20, -9.5, 10.0, -7.5, 19.0], [2, -2.5, -0.5, 5.5, 3.5], [13, -10.0, -2.5, -3.0, -0.5], [24, 2.0, -0.5, 9.0, 1.5], [23, 1.5, 1.0, 5.5, 2.0], [17, -10.0, -8.5, 6.0, -3.5], [1, 2.5, -0.5, 10.5, 0.5], [8, 9.5, 4.0, 13.5, 6.0]], 2.0, 2], [[1, 1, 0, -1], [2, 1, -1, -1], [8, 1, 2, 1], [13, 1, -3, -1], [17, 1, -3, -3], [20, 1, -3, 2], [23, 1, 0, 0], [24, 1, 0, -1]]], [[[[1, 2.0, -5.0, 9.0, 0.0], [4, 4.0, -9.0, 4.5, -7.0], [32, 9.0, -6.5, 10.0, -1.5], [11, 6.0, -9.0, 36.0, -8.0], [10, 4.5, -6.0, 34.5, -5.0], [29, -2.0, -10.0, 6.0, -6.0]], 2.0, 4], [[1, 2, 0, -1], [4, 0, 2, -5], [10, 3, 0, -1], [11, 3, 0, -1], [29, 2, -1, -2], [32, 2, 1, -1]]], [[[[38, 1.5, -3.5, 2.5, -1.5], [34, -7.5, 5.0, -5.5, 9.0], [32, 0.5, -9.5, 8.5, -8.5]], 1.0, 5], [[32, 3, 0, -2], [34, 2, -2, 1], [38, 1, 0, -2]]], [[[[14, -0.5, 3.0, 0.5, 7.0], [3, 9.0, 1.0, 9.5, 2.0], [39, 8.0, -7.0, 11.0, -2.0], [1, -6.0, -3.5, -5.5, -3.0], [21, -7.0, 7.5, -6.0, 8.5]], 1.0, 2], [[1, 0, -6, -4], [3, 0, 9, 1], [14, 1, -1, 1], [21, 0, -7, 7], [39, 1, 4, -4]]]], [[[[[27, -7.0, 0.5, -3.0, 4.5], [22, -1.5, -7.5, 28.5, -2.5], [13, -4.5, 3.0, -1.5, 5.0], [20, 6.0, -6.0, 36.0, -5.0], [32, -5.5, 0.0, -3.5, 5.0], [34, -8.0, -4.5, -7.5, 4.5], [2, -1.0, -5.0, 7.0, -4.0]], 2.0, 4], [[2, 2, -1, -1], [13, 1, -2, 0], [20, 3, 0, -1], [22, 3, -1, -1], [27, 1, -2, 0], [32, 2, -1, 0], [34, 3, -1, -1]]], [[[[27, -4.0, 1.5, 4.0, 2.0], [32, -8.0, -2.0, -6.0, 7.0], [20, -1.0, -5.5, 15.0, -3.5], [23, -6.5, -3.0, -3.5, 2.0], [1, 9.0, 7.5, 17.0, 9.5], [19, -7.5, 7.0, -5.5, 11.0], [3, 2.5, -6.5, 10.5, -5.5], [28, -0.5, 5.0, 3.5, 5.5], [13, 10.0, -3.5, 40.0, 1.5], [4, -7.0, 9.5, -4.0, 13.5]], 1.0, 5], [[1, 3, 1, 0], [3, 3, 0, -1], [4, 2, -2, 2], [13, 4, 0, -1], [19, 2, -2, 1], [20, 4, -1, -1], [23, 3, -1, -1], [27, 3, -1, 0], [28, 2, -1, 1], [32, 4, -1, -1]]], [[[[7, -0.5, 6.5, 29.5, 7.0], [32, -10.0, 7.5, 6.0, 8.0], [37, -1.0, 4.0, 3.0, 6.0], [18, 1.0, -4.0, 1.5, -2.0], [6, 4.0, 1.5, 20.0, 5.5], [15, 10.0, 2.0, 14.0, 2.5], [11, -4.0, 0.0, 0.0, 5.0], [22, -9.5, -4.0, 6.5, 0.0]], 2.0, 5], [[6, 3, 0, 0], [7, 4, -1, 0], [11, 2, -1, 0], [15, 1, 2, 0], [18, 0, 0, -2], [22, 3, -1, -1], [32, 3, -1, 0], [37, 1, -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]]], [[[[16, -5.5, 2.5, 1.5, 3.5], [20, -6.0, -6.5, 10.0, -5.5], [22, -1.0, -6.5, 2.0, -2.5], [10, 3.0, 1.5, 10.0, 2.5], [4, -10.0, 1.0, -9.5, 5.0]], 1.0, 3], [[4, 2, -3, 0], [10, 2, 0, 0], [16, 2, -2, 0], [20, 2, -2, -2], [22, 2, -1, -2]]], [[[[24, 10.0, 2.5, 26.0, 11.5], [1, -7.5, -10.0, 0.5, -9.0], [4, 0.0, 6.0, 4.0, 8.0], [17, -0.5, 5.0, 7.5, 14.0], [32, 3.5, -1.5, 19.5, -0.5]], 2.0, 4], [[1, 2, -1, -2], [4, 1, 0, 1], [17, 3, -1, 0], [24, 3, 0, 0], [32, 3, 0, -1]]], [[[[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]]], [[[[7, 7.0, 0.5, 10.0, 1.0], [31, 7.5, 10.0, 23.5, 14.0], [11, -6.5, 9.0, -5.5, 14.0], [17, 8.0, -7.0, 8.5, -2.0], [22, 1.0, 3.0, 2.0, 5.0], [30, -2.0, -7.0, 1.0, -3.0]], 2.0, 5], [[7, 1, 1, 0], [11, 2, -1, 1], [17, 2, 1, -1], [22, 0, 0, 1], [30, 1, -1, -2], [31, 3, 0, 0]]]]]
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 fixtureActualExpectedOutcome
case 0[[6, 1, 4, 0], [10, 1, -4, 0]][[6, 1, 4, 0], [10, 1, -4, 0]]Passed
case 1[[9, 2, 1, 0], [14, 3, -1, -1], [28, 1, -1, 0], [37, 1, -2, -2], [38, 2, 0, 0]][[9, 2, 1, 0], [14, 3, -1, -1], [28, 1, -1, 0], [37, 1, -2, -2], [38, 2, 0, 0]]Passed
case 2[[12, 1, -3, -2], [22, 4, -1, 0], [34, 1, 0, 0], [35, 2, 0, 0], [36, 3, -1, 0], [38, 2, 0, 0]][[12, 1, -3, -2], [22, 4, -1, 0], [34, 1, 0, 0], [35, 2, 0, 0], [36, 3, -1, 0], [38, 2, 0, 0]]Passed
case 3[[1, 3, 0, 0], [2, 2, 1, 0], [27, 2, 0, -2], [36, 3, 0, -1], [38, 3, -2, -1]][[1, 3, 0, 0], [2, 2, 1, 0], [27, 2, 0, -2], [36, 3, 0, -1], [38, 3, -2, -1]]Passed
case 4[[5, 0, 0, 2], [9, 1, -2, 1], [13, 3, -1, 0], [18, 1, -1, 0], [34, 3, -1, -1], [38, 2, 1, 0]][[5, 0, 0, 2], [9, 1, -2, 1], [13, 3, -1, 0], [18, 1, -1, 0], [34, 3, -1, -1], [38, 2, 1, 0]]Passed
case 5[[4, 3, 0, -1], [8, 3, 0, -1], [11, 2, 0, 1], [29, 0, -3, 4], [39, 2, -1, 0]][[4, 3, 0, -1], [8, 3, 0, -1], [11, 2, 0, 1], [29, 0, -3, 4], [39, 2, -1, 0]]Passed
case 6[[9, 2, 1, -2], [10, 3, 0, 0], [21, 2, -1, 0], [24, 0, -3, 3], [34, 1, 1, 0], [39, 3, 0, -1]][[9, 2, 1, -2], [10, 3, 0, 0], [21, 2, -1, 0], [24, 0, -3, 3], [34, 1, 1, 0], [39, 3, 0, -1]]Passed
case 7[[7, 0, 0, -5], [16, 3, 0, -1], [27, 0, 1, 2], [36, 0, 1, 4]][[7, 0, 0, -5], [16, 3, 0, -1], [27, 0, 1, 2], [36, 0, 1, 4]]Passed

SHA-256 / c521c5f4b25739cf2db97ea2806738571aa1ca9064e4955155d1cf470bdbbca3

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.599647+00:00.

Case digest / 960b7b38e16c0b4ab941d7e9e7e8a346a7c14ac78fce77ec3c4c7573f414b81a