{"abstract":"Negative cells map to different buckets than the native engine.","category":"Collision detection broadphase","checks":8,"contract":"solve(frames, n): particle hash table of n buckets reused across frames without clearing; a bucket whose stamp is older than the frame is lazily reset on first insert. Cell = floor(x), floor(y); bucket = ((ix*73856093 mod 2^32) xor (iy*19349663 mod 2^32)) mod n. A particle pairs with earlier particles in the same bucket only if they share the exact cell. Per frame return [sorted [min,max] pairs, buckets stamped this frame].","contract_signature":"frames, n","evaluation_group":"w2-collision_detection_broadphase-timestamped-spatial-hash","failed_approach":"abs() of the xor maps negative values differently from unsigned wrap.","family":"w2-collision_detection_broadphase-timestamped-spatial-hash-32-bit-hash-wrap","id":"FA-87746","implementations":{"attempt":{"sha256":"765b14ca33f8f0815b47473d1cd8bcaba2a7599e6533eb67461fe21d5b8c3ee9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(frames, n):\n    table = [[-1, []] for _ in range(n)]\n    result = []\n    for f, pts in enumerate(frames):\n        pairs = []\n        for pid, x, y in pts:\n            ix, iy = math.floor(x), math.floor(y)\n            h = abs((ix * 73856093) ^ (iy * 19349663)) % n\n            slot = table[h]\n            if slot[0] != f:\n                slot[0] = f\n                slot[1] = []\n            for qid, qx, qy in slot[1]:\n                if (qx, qy) == (ix, iy):\n                    pairs.append([min(pid, qid), max(pid, qid)])\n            slot[1].append((pid, ix, iy))\n        result.append([sorted(pairs), sum(1 for s in table if s[0] == f)])\n    return result\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[[[10, 2.5, 2.5], [18, -0.5, -1.0], [19, 2.0, 2.5], [8, 3.0, 2.5]]], 3], [[[[10, 19]], 1]]], [[[[[7, 3.0, -0.5], [4, 0.5, -0.5], [3, -2.0, 2.5], [17, 1.0, 1.5]], [[17, 1.5, -2.0], [4, -1.5, 0.0], [8, 1.0, 1.5]], [[7, 2.0, -2.0], [4, -2.5, 2.0]], [[18, 3.0, -3.0], [13, -1.5, 2.0], [17, 2.0, 2.5], [2, 1.5, 2.5]]], 11], [[[], 4], [[], 2], [[], 2], [[], 2]]], [[[[[3, -1.0, 1.5], [5, 2.0, -1.0]], [[2, 0.0, -2.5], [18, 2.0, -3.0], [6, 2.5, 0.5], [13, 1.5, 2.0], [17, 3.0, 0.0]], [[18, -0.5, 0.5], [16, 0.0, -0.5], [4, -1.5, -2.0], [12, -2.5, -1.0]]], 3], [[[], 2], [[], 2], [[], 2]]], [[[[[17, -1.5, 2.0], [6, 0.5, 1.5], [14, -0.5, 1.5], [2, -2.5, 1.0], [19, -0.5, 1.5]]], 7], [[[[14, 19]], 4]]], [[[[[8, 0.5, -1.0], [17, 1.0, -2.5], [9, 0.0, 0.5], [1, 2.0, -1.5]]], 7], [[[], 2]]], [[[[[5, 2.0, 0.0], [14, 0.5, 0.5], [17, -1.0, 2.5], [4, 0.5, -2.0], [3, 1.5, 1.0]], [[11, -2.5, -0.5], [7, 2.5, 0.0], [16, 1.0, 2.5], [10, 1.0, -1.5]], [[9, -1.0, 2.0], [13, 1.0, 0.0]], [[19, -3.0, 2.0], [4, -3.0, 2.5], [18, 1.0, -3.0], [11, 0.0, 0.5], [9, 3.0, 0.0], [12, -3.0, 2.5]]], 11], [[[], 4], [[], 3], [[], 2], [[[4, 12], [4, 19], [12, 19]], 4]]], [[[[[9, -2.0, -2.5], [1, -1.5, -2.5], [3, 0.0, 3.0], [13, -3.0, 0.0], [14, -3.0, -0.5], [15, 1.0, -2.5]], [[7, 1.0, -1.0], [3, -1.0, -2.0], [17, -3.0, -1.0], [14, 3.0, 2.5], [1, 2.5, 0.0], [2, 1.0, -1.0]], [[19, -2.5, 2.5], [10, 0.5, -0.5], [8, -1.0, -2.0], [17, 2.0, 0.0], [13, 1.0, -1.0], [1, -0.5, 0.5]]], 7], [[[[1, 9]], 3], [[[2, 7]], 4], [[], 4]]], [[[[[7, -1.5, 3.0], [9, 1.0, 0.0], [6, -1.5, -0.5], [15, -2.0, -1.5], [12, 1.0, -0.5]], [[19, 3.0, -3.0], [7, -2.0, 3.0], [9, 1.5, 2.0], [3, 3.0, 2.0]], [[15, 0.0, 3.0], [19, 2.5, -3.0], [2, 1.0, 1.0], [9, -0.5, -0.5], [17, 1.0, 0.5]]], 3], [[[], 2], [[], 3], [[], 3]]]], [[[[[[8, 0.0, 0.0], [10, -2.5, 1.0], [13, 1.5, -1.0], [11, 3.0, -3.0]]], 7], [[[], 3]]], [[[[[10, 3.0, -1.5], [18, 3.0, 1.5], [12, -1.5, -1.5]], [[4, 1.5, -3.0], [13, 2.5, -1.0], [17, 0.5, -2.5]]], 3], [[[], 2], [[], 3]]], [[[[[15, -1.5, 3.0], [18, -2.0, -2.0], [16, -2.5, -1.5], [9, -1.5, -2.5], [14, -1.5, 2.5], [11, -1.0, -2.5]], [[10, -1.0, -2.0], [4, -2.5, -1.0], [6, -2.0, -0.5], [13, 2.5, 0.0], [12, -2.0, 3.0], [16, 1.0, -2.0]], [[11, -0.5, -3.0], [7, 2.0, 2.0]], [[15, 0.0, 0.0], [12, 0.0, -1.5], [16, 3.0, 2.5], [17, -3.0, -0.5]]], 7], [[[], 4], [[], 5], [[], 2], [[], 3]]], [[[[[1, -0.5, -1.0], [8, 1.0, 0.5]], [[7, -1.0, -1.0], [1, 0.0, 2.5]], [[11, 1.0, 3.0], [7, 3.0, 2.5], [5, 1.0, -2.5], [10, 3.0, 0.0], [18, -0.5, -1.0]], [[11, -0.5, 2.5], [4, 0.5, 2.0]]], 5], [[[], 2], [[], 2], [[], 3], [[], 2]]], [[[[[8, 2.5, -2.5], [12, 3.0, 3.0]], [[1, -1.5, 0.0], [6, -1.0, -3.0], [4, 2.5, -1.0], [16, -2.0, -2.0], [15, -2.5, -2.5]], [[17, -2.5, 2.5], [1, -1.5, -3.0], [18, -3.0, -1.5]]], 5], [[[], 2], [[], 4], [[], 2]]], [[[[[16, 0.0, -1.0], [3, 0.0, -3.0]], [[4, 3.0, 1.0], [6, 1.5, 2.0]], [[10, -1.0, 1.5], [4, 0.0, -0.5], [3, 1.0, -3.0], [15, -2.5, -2.5], [12, 2.5, -1.5], [16, -2.0, -2.0]], [[19, -2.0, -0.5], [18, 0.0, -3.0]]], 5], [[[], 2], [[], 2], [[], 4], [[], 2]]], [[[[[6, 3.0, 0.0], [1, 1.0, 1.0]], [[4, 1.5, -1.5], [2, -0.5, -3.0], [1, 0.5, 1.0], [16, 0.5, 2.5], [10, 3.0, 1.5]], [[19, -0.5, 3.0], [4, 0.5, 1.5]]], 11], [[[], 2], [[], 4], [[], 2]]], [[[[[11, -1.0, -1.5], [12, 3.0, 2.5], [19, -2.5, 2.5], [8, 2.5, -0.5]], [[14, -1.0, -0.5], [12, -1.5, -1.0], [7, 0.5, 1.0], [4, 1.5, 2.5], [5, -1.0, 1.5]], [[15, 1.0, 1.0], [18, -2.0, 2.5], [2, -0.5, -3.0], [14, 3.0, 3.0], [19, -2.5, 1.0]]], 5], [[[], 3], [[], 4], [[], 3]]]], [[[[[[19, 1.0, 2.0], [17, 0.0, 1.0]], [[17, 1.0, 0.0], [11, 2.5, 1.5]], [[10, -0.5, 0.5], [9, -3.0, 2.5], [5, 0.5, 0.0], [16, 0.0, 3.0]]], 7], [[[], 2], [[], 1], [[], 3]]], [[[[[11, 2.0, 2.0], [18, 2.5, 1.0], [9, 2.0, 1.5], [5, -1.5, -2.5]], [[18, -3.0, 1.0], [8, -2.5, -1.0], [13, 2.5, -1.5], [7, 1.5, -1.0]], [[11, -3.0, -2.0], [3, -2.0, -2.5]], [[14, -1.0, -1.0], [6, 3.0, -1.5]]], 5], [[[[9, 18]], 2], [[], 2], [[], 1], [[], 1]]], [[[[[14, 1.5, 1.0], [13, -3.0, -0.5], [5, 0.0, 0.5]], [[11, -1.0, 0.0], [4, -0.5, 0.0], [19, 3.0, 2.5], [15, 2.0, -1.0]]], 11], [[[], 2], [[[4, 11]], 3]]], [[[[[10, 0.5, 2.0], [16, -3.0, -3.0]], [[13, -3.0, -1.0], [10, 2.5, 2.5], [7, -1.0, -3.0], [11, 0.5, 0.5], [16, 2.5, 1.5], [15, 2.5, -0.5]], [[7, 2.5, 0.0], [11, 2.5, -1.0]], [[16, -3.0, 1.0], [4, 0.5, -0.5]]], 7], [[[], 2], [[], 5], [[], 2], [[], 1]]], [[[[[6, -3.0, -1.5], [4, 1.0, -2.0], [9, 2.0, -1.5], [13, -1.0, -2.5]], [[12, -2.5, 2.5], [8, 3.0, -2.0], [9, 0.0, 3.0], [2, -1.5, 2.5]], [[11, 0.5, 3.0], [2, 3.0, 0.0], [13, -1.5, 1.0], [3, 1.5, -2.0]], [[3, 1.5, 2.0], [19, 1.0, 1.5], [16, 0.5, -1.5], [4, 0.0, -1.5], [2, 0.5, -3.0], [15, 1.5, 2.5]]], 7], [[[], 4], [[], 4], [[], 4], [[[3, 15], [4, 16]], 3]]], [[[[[7, 1.0, 3.0], [19, -0.5, -1.0], [12, 2.0, -1.5], [4, 1.5, -3.0], [6, 0.0, 2.0], [11, -2.5, 3.0]]], 7], [[[], 4]]], [[[[[14, -0.5, -0.5], [7, 3.0, 1.5], [12, 1.5, -0.5], [2, 1.0, 3.0], [18, -1.5, -2.5], [1, -3.0, -1.5]]], 11], [[[], 5]]], [[[[[16, -3.0, 3.0], [3, 0.5, 3.0], [15, -1.5, -1.5], [7, -2.5, 2.5]]], 7], [[[], 3]]]], [[[[[[12, -0.5, -2.5], [1, -2.5, 1.5], [11, 2.5, 3.0], [5, 0.5, 3.0], [8, -2.0, 3.0], [18, -3.0, -0.5]], [[4, 1.0, -0.5], [17, 1.5, -1.0], [7, -1.5, 2.5], [10, -1.5, 0.5]], [[8, 3.0, 0.5], [5, 2.0, 1.5], [16, -0.5, 2.0]]], 3], [[[], 2], [[[4, 17]], 2], [[], 2]]], [[[[[18, 1.0, -2.5], [8, 2.5, -2.0], [2, 1.5, -2.0]], [[19, 2.0, -2.0], [1, 3.0, -1.5], [10, -2.0, -3.0], [8, -2.5, -0.5]], [[17, 1.0, -1.0], [4, -1.5, -1.5]], [[10, 0.0, 2.0], [2, 2.5, -1.0], [5, 3.0, 3.0], [19, -3.0, 3.0], [3, 1.5, 2.0], [18, -1.5, 0.0]]], 5], [[[], 3], [[], 2], [[], 2], [[], 5]]], [[[[[12, 0.0, 1.5], [7, -2.0, -0.5]], [[1, -1.0, 2.0], [18, 0.5, -1.5], [2, 1.5, -2.5]], [[3, 0.0, -3.0], [2, 0.0, -0.5], [1, 1.5, 1.5]]], 7], [[[], 2], [[], 2], [[], 2]]], [[[[[19, -3.0, 3.0], [17, -2.0, 2.5], [3, 2.0, -2.0]], [[1, 2.5, -1.0], [8, -1.0, 2.0], [13, 2.5, 2.5], [11, 0.0, 3.0], [10, 0.0, 0.0], [19, -0.5, 1.0]], [[12, -1.5, -0.5], [13, -2.5, -2.5], [7, -1.0, 2.0]]], 5], [[[], 2], [[], 3], [[], 2]]], [[[[[2, 0.0, 0.5], [4, -3.0, -2.5], [9, -2.0, 1.5], [1, -3.0, 1.0]], [[3, 0.0, -0.5], [5, 3.0, 1.0]]], 7], [[[], 3], [[], 2]]], [[[[[1, -3.0, -0.5], [15, -2.0, 2.5], [17, -1.0, -2.5], [19, 0.0, -0.5], [10, 0.5, 1.0], [7, 2.5, 2.5]]], 7], [[[], 4]]], [[[[[17, -0.5, 1.5], [13, -3.0, 3.0], [5, -1.0, -1.5], [10, -1.0, -3.0]], [[12, -2.5, -1.0], [2, -1.0, -2.5], [1, 3.0, 2.0], [3, 1.0, 1.5]]], 7], [[[], 3], [[], 4]]], [[[[[17, -0.5, 2.0], [2, 1.0, -3.0]], [[17, -2.0, 2.5], [16, -2.0, -3.0], [9, -0.5, -3.0], [5, 3.0, -3.0]], [[7, -1.5, -2.5], [6, -3.0, -2.0], [2, 0.0, 3.0]], [[17, -2.0, 2.0], [16, -2.5, 0.0], [7, -2.5, 2.0]]], 7], [[[], 1], [[], 3], [[], 2], [[], 2]]]], [[[[[[17, -2.0, 1.5], [11, 0.5, -1.5], [8, -3.0, -3.0], [1, -1.0, 3.0], [10, -2.5, 0.5]], [[11, 0.5, 2.0], [9, 0.0, -0.5], [8, 2.0, -1.5]]], 3], [[[], 3], [[], 3]]], [[[[[4, -3.0, 0.5], [6, 2.0, 3.0], [13, 0.5, -1.5]], [[12, -0.5, 0.0], [13, 2.5, -2.5], [19, 3.0, -2.0], [3, -0.5, 3.0]], [[11, 0.5, -1.5], [6, -1.0, -1.5], [3, -2.0, 2.0], [4, 2.5, 2.5]], [[19, -1.5, 0.5], [9, -1.0, 3.0], [8, 1.5, -3.0], [4, 2.5, -2.5], [12, -1.5, 0.0], [1, -3.0, -1.0]]], 3], [[[], 2], [[], 2], [[], 2], [[[12, 19]], 3]]], [[[[[17, -2.5, 2.0], [2, 0.5, 0.0]], [[1, 3.0, 2.0], [2, -2.5, 0.5], [8, -2.0, 1.0]], [[1, 0.5, -2.5], [18, 3.0, 3.0], [19, 0.0, 1.0], [15, 2.5, -1.0], [16, 2.0, -2.5]], [[9, 3.0, -0.5], [18, 2.5, 1.5]]], 11], [[[], 2], [[], 2], [[], 3], [[], 2]]], [[[[[15, 3.0, 0.5], [17, -1.5, 2.0], [5, 1.0, 1.5], [8, 0.5, -2.5], [10, 0.5, 2.5], [7, -1.0, 1.5]], [[12, -1.5, -2.5], [13, -0.5, -0.5], [1, -2.5, 3.0]], [[9, 3.0, 0.0], [3, 3.0, 1.0], [2, 0.5, 2.5], [11, 0.0, -2.5], [7, 0.5, -0.5]]], 11], [[[], 5], [[], 3], [[], 4]]], [[[[[18, 0.0, 1.5], [6, -1.5, -1.0]], [[13, 2.0, 3.0], [19, 3.0, -1.5], [14, 3.0, 0.0]]], 5], [[[], 2], [[], 1]]], [[[[[8, 0.5, -2.5], [18, 0.5, -2.0], [15, 3.0, -2.0], [12, 0.0, 1.0]]], 3], [[[], 3]]], [[[[[15, 0.0, 1.5], [13, 2.5, 2.0], [10, -3.0, -2.0], [8, -2.5, 2.5], [1, 2.5, 3.0]], [[4, -3.0, 1.5], [8, -1.0, -2.5], [15, 1.0, 0.5]], [[10, 0.0, 2.0], [14, 0.5, 2.0], [12, 2.5, 0.5], [1, -2.5, 3.0], [9, -2.5, -1.0]], [[13, -2.0, -2.0], [10, -2.5, 0.0], [16, 1.0, -1.5], [3, 2.5, -2.0], [1, -2.0, 2.0]]], 3], [[[], 3], [[], 2], [[[10, 14]], 3], [[], 3]]], [[[[[8, -3.0, 0.0], [18, 0.0, -0.5], [7, 0.0, 3.0], [11, 1.5, -1.5]]], 5], [[[], 4]]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"case %d\" % i, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"c912f8bd3d63964b6314f6592383d781f8293cad2adb9448f59fed7a5bf9edd7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(frames, n):\n    table = [[-1, []] for _ in range(n)]\n    result = []\n    for f, pts in enumerate(frames):\n        pairs = []\n        for pid, x, y in pts:\n            ix, iy = math.floor(x), math.floor(y)\n            h = ((ix * 73856093) ^ (iy * 19349663)) % n\n            slot = table[h]\n            if slot[0] != f:\n                slot[0] = f\n                slot[1] = []\n            for qid, qx, qy in slot[1]:\n                if (qx, qy) == (ix, iy):\n                    pairs.append([min(pid, qid), max(pid, qid)])\n            slot[1].append((pid, ix, iy))\n        result.append([sorted(pairs), sum(1 for s in table if s[0] == f)])\n    return result\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[[[10, 2.5, 2.5], [18, -0.5, -1.0], [19, 2.0, 2.5], [8, 3.0, 2.5]]], 3], [[[[10, 19]], 1]]], [[[[[7, 3.0, -0.5], [4, 0.5, -0.5], [3, -2.0, 2.5], [17, 1.0, 1.5]], [[17, 1.5, -2.0], [4, -1.5, 0.0], [8, 1.0, 1.5]], [[7, 2.0, -2.0], [4, -2.5, 2.0]], [[18, 3.0, -3.0], [13, -1.5, 2.0], [17, 2.0, 2.5], [2, 1.5, 2.5]]], 11], [[[], 4], [[], 2], [[], 2], [[], 2]]], [[[[[3, -1.0, 1.5], [5, 2.0, -1.0]], [[2, 0.0, -2.5], [18, 2.0, -3.0], [6, 2.5, 0.5], [13, 1.5, 2.0], [17, 3.0, 0.0]], [[18, -0.5, 0.5], [16, 0.0, -0.5], [4, -1.5, -2.0], [12, -2.5, -1.0]]], 3], [[[], 2], [[], 2], [[], 2]]], [[[[[17, -1.5, 2.0], [6, 0.5, 1.5], [14, -0.5, 1.5], [2, -2.5, 1.0], [19, -0.5, 1.5]]], 7], [[[[14, 19]], 4]]], [[[[[8, 0.5, -1.0], [17, 1.0, -2.5], [9, 0.0, 0.5], [1, 2.0, -1.5]]], 7], [[[], 2]]], [[[[[5, 2.0, 0.0], [14, 0.5, 0.5], [17, -1.0, 2.5], [4, 0.5, -2.0], [3, 1.5, 1.0]], [[11, -2.5, -0.5], [7, 2.5, 0.0], [16, 1.0, 2.5], [10, 1.0, -1.5]], [[9, -1.0, 2.0], [13, 1.0, 0.0]], [[19, -3.0, 2.0], [4, -3.0, 2.5], [18, 1.0, -3.0], [11, 0.0, 0.5], [9, 3.0, 0.0], [12, -3.0, 2.5]]], 11], [[[], 4], [[], 3], [[], 2], [[[4, 12], [4, 19], [12, 19]], 4]]], [[[[[9, -2.0, -2.5], [1, -1.5, -2.5], [3, 0.0, 3.0], [13, -3.0, 0.0], [14, -3.0, -0.5], [15, 1.0, -2.5]], [[7, 1.0, -1.0], [3, -1.0, -2.0], [17, -3.0, -1.0], [14, 3.0, 2.5], [1, 2.5, 0.0], [2, 1.0, -1.0]], [[19, -2.5, 2.5], [10, 0.5, -0.5], [8, -1.0, -2.0], [17, 2.0, 0.0], [13, 1.0, -1.0], [1, -0.5, 0.5]]], 7], [[[[1, 9]], 3], [[[2, 7]], 4], [[], 4]]], [[[[[7, -1.5, 3.0], [9, 1.0, 0.0], [6, -1.5, -0.5], [15, -2.0, -1.5], [12, 1.0, -0.5]], [[19, 3.0, -3.0], [7, -2.0, 3.0], [9, 1.5, 2.0], [3, 3.0, 2.0]], [[15, 0.0, 3.0], [19, 2.5, -3.0], [2, 1.0, 1.0], [9, -0.5, -0.5], [17, 1.0, 0.5]]], 3], [[[], 2], [[], 3], [[], 3]]]], [[[[[[8, 0.0, 0.0], [10, -2.5, 1.0], [13, 1.5, -1.0], [11, 3.0, -3.0]]], 7], [[[], 3]]], [[[[[10, 3.0, -1.5], [18, 3.0, 1.5], [12, -1.5, -1.5]], [[4, 1.5, -3.0], [13, 2.5, -1.0], [17, 0.5, -2.5]]], 3], [[[], 2], [[], 3]]], [[[[[15, -1.5, 3.0], [18, -2.0, -2.0], [16, -2.5, -1.5], [9, -1.5, -2.5], [14, -1.5, 2.5], [11, -1.0, -2.5]], [[10, -1.0, -2.0], [4, -2.5, -1.0], [6, -2.0, -0.5], [13, 2.5, 0.0], [12, -2.0, 3.0], [16, 1.0, -2.0]], [[11, -0.5, -3.0], [7, 2.0, 2.0]], [[15, 0.0, 0.0], [12, 0.0, -1.5], [16, 3.0, 2.5], [17, -3.0, -0.5]]], 7], [[[], 4], [[], 5], [[], 2], [[], 3]]], [[[[[1, -0.5, -1.0], [8, 1.0, 0.5]], [[7, -1.0, -1.0], [1, 0.0, 2.5]], [[11, 1.0, 3.0], [7, 3.0, 2.5], [5, 1.0, -2.5], [10, 3.0, 0.0], [18, -0.5, -1.0]], [[11, -0.5, 2.5], [4, 0.5, 2.0]]], 5], [[[], 2], [[], 2], [[], 3], [[], 2]]], [[[[[8, 2.5, -2.5], [12, 3.0, 3.0]], [[1, -1.5, 0.0], [6, -1.0, -3.0], [4, 2.5, -1.0], [16, -2.0, -2.0], [15, -2.5, -2.5]], [[17, -2.5, 2.5], [1, -1.5, -3.0], [18, -3.0, -1.5]]], 5], [[[], 2], [[], 4], [[], 2]]], [[[[[16, 0.0, -1.0], [3, 0.0, -3.0]], [[4, 3.0, 1.0], [6, 1.5, 2.0]], [[10, -1.0, 1.5], [4, 0.0, -0.5], [3, 1.0, -3.0], [15, -2.5, -2.5], [12, 2.5, -1.5], [16, -2.0, -2.0]], [[19, -2.0, -0.5], [18, 0.0, -3.0]]], 5], [[[], 2], [[], 2], [[], 4], [[], 2]]], [[[[[6, 3.0, 0.0], [1, 1.0, 1.0]], [[4, 1.5, -1.5], [2, -0.5, -3.0], [1, 0.5, 1.0], [16, 0.5, 2.5], [10, 3.0, 1.5]], [[19, -0.5, 3.0], [4, 0.5, 1.5]]], 11], [[[], 2], [[], 4], [[], 2]]], [[[[[11, -1.0, -1.5], [12, 3.0, 2.5], [19, -2.5, 2.5], [8, 2.5, -0.5]], [[14, -1.0, -0.5], [12, -1.5, -1.0], [7, 0.5, 1.0], [4, 1.5, 2.5], [5, -1.0, 1.5]], [[15, 1.0, 1.0], [18, -2.0, 2.5], [2, -0.5, -3.0], [14, 3.0, 3.0], [19, -2.5, 1.0]]], 5], [[[], 3], [[], 4], [[], 3]]]], [[[[[[19, 1.0, 2.0], [17, 0.0, 1.0]], [[17, 1.0, 0.0], [11, 2.5, 1.5]], [[10, -0.5, 0.5], [9, -3.0, 2.5], [5, 0.5, 0.0], [16, 0.0, 3.0]]], 7], [[[], 2], [[], 1], [[], 3]]], [[[[[11, 2.0, 2.0], [18, 2.5, 1.0], [9, 2.0, 1.5], [5, -1.5, -2.5]], [[18, -3.0, 1.0], [8, -2.5, -1.0], [13, 2.5, -1.5], [7, 1.5, -1.0]], [[11, -3.0, -2.0], [3, -2.0, -2.5]], [[14, -1.0, -1.0], [6, 3.0, -1.5]]], 5], [[[[9, 18]], 2], [[], 2], [[], 1], [[], 1]]], [[[[[14, 1.5, 1.0], [13, -3.0, -0.5], [5, 0.0, 0.5]], [[11, -1.0, 0.0], [4, -0.5, 0.0], [19, 3.0, 2.5], [15, 2.0, -1.0]]], 11], [[[], 2], [[[4, 11]], 3]]], [[[[[10, 0.5, 2.0], [16, -3.0, -3.0]], [[13, -3.0, -1.0], [10, 2.5, 2.5], [7, -1.0, -3.0], [11, 0.5, 0.5], [16, 2.5, 1.5], [15, 2.5, -0.5]], [[7, 2.5, 0.0], [11, 2.5, -1.0]], [[16, -3.0, 1.0], [4, 0.5, -0.5]]], 7], [[[], 2], [[], 5], [[], 2], [[], 1]]], [[[[[6, -3.0, -1.5], [4, 1.0, -2.0], [9, 2.0, -1.5], [13, -1.0, -2.5]], [[12, -2.5, 2.5], [8, 3.0, -2.0], [9, 0.0, 3.0], [2, -1.5, 2.5]], [[11, 0.5, 3.0], [2, 3.0, 0.0], [13, -1.5, 1.0], [3, 1.5, -2.0]], [[3, 1.5, 2.0], [19, 1.0, 1.5], [16, 0.5, -1.5], [4, 0.0, -1.5], [2, 0.5, -3.0], [15, 1.5, 2.5]]], 7], [[[], 4], [[], 4], [[], 4], [[[3, 15], [4, 16]], 3]]], [[[[[7, 1.0, 3.0], [19, -0.5, -1.0], [12, 2.0, -1.5], [4, 1.5, -3.0], [6, 0.0, 2.0], [11, -2.5, 3.0]]], 7], [[[], 4]]], [[[[[14, -0.5, -0.5], [7, 3.0, 1.5], [12, 1.5, -0.5], [2, 1.0, 3.0], [18, -1.5, -2.5], [1, -3.0, -1.5]]], 11], [[[], 5]]], [[[[[16, -3.0, 3.0], [3, 0.5, 3.0], [15, -1.5, -1.5], [7, -2.5, 2.5]]], 7], [[[], 3]]]], [[[[[[12, -0.5, -2.5], [1, -2.5, 1.5], [11, 2.5, 3.0], [5, 0.5, 3.0], [8, -2.0, 3.0], [18, -3.0, -0.5]], [[4, 1.0, -0.5], [17, 1.5, -1.0], [7, -1.5, 2.5], [10, -1.5, 0.5]], [[8, 3.0, 0.5], [5, 2.0, 1.5], [16, -0.5, 2.0]]], 3], [[[], 2], [[[4, 17]], 2], [[], 2]]], [[[[[18, 1.0, -2.5], [8, 2.5, -2.0], [2, 1.5, -2.0]], [[19, 2.0, -2.0], [1, 3.0, -1.5], [10, -2.0, -3.0], [8, -2.5, -0.5]], [[17, 1.0, -1.0], [4, -1.5, -1.5]], [[10, 0.0, 2.0], [2, 2.5, -1.0], [5, 3.0, 3.0], [19, -3.0, 3.0], [3, 1.5, 2.0], [18, -1.5, 0.0]]], 5], [[[], 3], [[], 2], [[], 2], [[], 5]]], [[[[[12, 0.0, 1.5], [7, -2.0, -0.5]], [[1, -1.0, 2.0], [18, 0.5, -1.5], [2, 1.5, -2.5]], [[3, 0.0, -3.0], [2, 0.0, -0.5], [1, 1.5, 1.5]]], 7], [[[], 2], [[], 2], [[], 2]]], [[[[[19, -3.0, 3.0], [17, -2.0, 2.5], [3, 2.0, -2.0]], [[1, 2.5, -1.0], [8, -1.0, 2.0], [13, 2.5, 2.5], [11, 0.0, 3.0], [10, 0.0, 0.0], [19, -0.5, 1.0]], [[12, -1.5, -0.5], [13, -2.5, -2.5], [7, -1.0, 2.0]]], 5], [[[], 2], [[], 3], [[], 2]]], [[[[[2, 0.0, 0.5], [4, -3.0, -2.5], [9, -2.0, 1.5], [1, -3.0, 1.0]], [[3, 0.0, -0.5], [5, 3.0, 1.0]]], 7], [[[], 3], [[], 2]]], [[[[[1, -3.0, -0.5], [15, -2.0, 2.5], [17, -1.0, -2.5], [19, 0.0, -0.5], [10, 0.5, 1.0], [7, 2.5, 2.5]]], 7], [[[], 4]]], [[[[[17, -0.5, 1.5], [13, -3.0, 3.0], [5, -1.0, -1.5], [10, -1.0, -3.0]], [[12, -2.5, -1.0], [2, -1.0, -2.5], [1, 3.0, 2.0], [3, 1.0, 1.5]]], 7], [[[], 3], [[], 4]]], [[[[[17, -0.5, 2.0], [2, 1.0, -3.0]], [[17, -2.0, 2.5], [16, -2.0, -3.0], [9, -0.5, -3.0], [5, 3.0, -3.0]], [[7, -1.5, -2.5], [6, -3.0, -2.0], [2, 0.0, 3.0]], [[17, -2.0, 2.0], [16, -2.5, 0.0], [7, -2.5, 2.0]]], 7], [[[], 1], [[], 3], [[], 2], [[], 2]]]], [[[[[[17, -2.0, 1.5], [11, 0.5, -1.5], [8, -3.0, -3.0], [1, -1.0, 3.0], [10, -2.5, 0.5]], [[11, 0.5, 2.0], [9, 0.0, -0.5], [8, 2.0, -1.5]]], 3], [[[], 3], [[], 3]]], [[[[[4, -3.0, 0.5], [6, 2.0, 3.0], [13, 0.5, -1.5]], [[12, -0.5, 0.0], [13, 2.5, -2.5], [19, 3.0, -2.0], [3, -0.5, 3.0]], [[11, 0.5, -1.5], [6, -1.0, -1.5], [3, -2.0, 2.0], [4, 2.5, 2.5]], [[19, -1.5, 0.5], [9, -1.0, 3.0], [8, 1.5, -3.0], [4, 2.5, -2.5], [12, -1.5, 0.0], [1, -3.0, -1.0]]], 3], [[[], 2], [[], 2], [[], 2], [[[12, 19]], 3]]], [[[[[17, -2.5, 2.0], [2, 0.5, 0.0]], [[1, 3.0, 2.0], [2, -2.5, 0.5], [8, -2.0, 1.0]], [[1, 0.5, -2.5], [18, 3.0, 3.0], [19, 0.0, 1.0], [15, 2.5, -1.0], [16, 2.0, -2.5]], [[9, 3.0, -0.5], [18, 2.5, 1.5]]], 11], [[[], 2], [[], 2], [[], 3], [[], 2]]], [[[[[15, 3.0, 0.5], [17, -1.5, 2.0], [5, 1.0, 1.5], [8, 0.5, -2.5], [10, 0.5, 2.5], [7, -1.0, 1.5]], [[12, -1.5, -2.5], [13, -0.5, -0.5], [1, -2.5, 3.0]], [[9, 3.0, 0.0], [3, 3.0, 1.0], [2, 0.5, 2.5], [11, 0.0, -2.5], [7, 0.5, -0.5]]], 11], [[[], 5], [[], 3], [[], 4]]], [[[[[18, 0.0, 1.5], [6, -1.5, -1.0]], [[13, 2.0, 3.0], [19, 3.0, -1.5], [14, 3.0, 0.0]]], 5], [[[], 2], [[], 1]]], [[[[[8, 0.5, -2.5], [18, 0.5, -2.0], [15, 3.0, -2.0], [12, 0.0, 1.0]]], 3], [[[], 3]]], [[[[[15, 0.0, 1.5], [13, 2.5, 2.0], [10, -3.0, -2.0], [8, -2.5, 2.5], [1, 2.5, 3.0]], [[4, -3.0, 1.5], [8, -1.0, -2.5], [15, 1.0, 0.5]], [[10, 0.0, 2.0], [14, 0.5, 2.0], [12, 2.5, 0.5], [1, -2.5, 3.0], [9, -2.5, -1.0]], [[13, -2.0, -2.0], [10, -2.5, 0.0], [16, 1.0, -1.5], [3, 2.5, -2.0], [1, -2.0, 2.0]]], 3], [[[], 3], [[], 2], [[[10, 14]], 3], [[], 3]]], [[[[[8, -3.0, 0.0], [18, 0.0, -0.5], [7, 0.0, 3.0], [11, 1.5, -1.5]]], 5], [[[], 4]]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"case %d\" % i, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"A deterministic 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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-collision_detection_broadphase-timestamped-spatial-hash-32-bit-hash-wrap","generated_at":"2026-09-29T14:51:01.682400+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"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.","root_cause":"The & 0xFFFFFFFF masks are missing.","sha256":"8ef9c3073b564aed8fd98468309df68567cdcba9fbad1f4862ed673b433ebcfc","title":"Hash products are not reduced to 32 bits · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":44.817,"exit_code":1,"observations":[{"actual":[[[[10,19]],1]],"check":"case 0","expected":[[[[10,19]],1]],"passed":true},{"actual":[[[],4],[[],2],[[],2],[[],2]],"check":"case 1","expected":[[[],4],[[],2],[[],2],[[],2]],"passed":true},{"actual":[[[],2],[[],2],[[],2]],"check":"case 2","expected":[[[],2],[[],2],[[],2]],"passed":true},{"actual":[[[[14,19]],3]],"check":"case 3","expected":[[[[14,19]],4]],"passed":false},{"actual":[[[],3]],"check":"case 4","expected":[[[],2]],"passed":false},{"actual":[[[],4],[[],3],[[],2],[[[4,12],[4,19],[12,19]],3]],"check":"case 5","expected":[[[],4],[[],3],[[],2],[[[4,12],[4,19],[12,19]],4]],"passed":false},{"actual":[[[[1,9]],3],[[[2,7]],5],[[],5]],"check":"case 6","expected":[[[[1,9]],3],[[[2,7]],4],[[],4]],"passed":false},{"actual":[[[],3],[[],3],[[],2]],"check":"case 7","expected":[[[],2],[[],3],[[],3]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [[[[10, 19]], 1]], \"expected\": [[[[10, 19]], 1]], \"passed\": true}, {\"check\": \"case 1\", \"actual\": [[[], 4], [[], 2], [[], 2], [[], 2]], \"expected\": [[[], 4], [[], 2], [[], 2], [[], 2]], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [[[], 2], [[], 2], [[], 2]], \"expected\": [[[], 2], [[], 2], [[], 2]], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [[[[14, 19]], 3]], \"expected\": [[[[14, 19]], 4]], \"passed\": false}, {\"check\": \"case 4\", \"actual\": [[[], 3]], \"expected\": [[[], 2]], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [[[], 4], [[], 3], [[], 2], [[[4, 12], [4, 19], [12, 19]], 3]], \"expected\": [[[], 4], [[], 3], [[], 2], [[[4, 12], [4, 19], [12, 19]], 4]], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [[[[1, 9]], 3], [[[2, 7]], 5], [[], 5]], \"expected\": [[[[1, 9]], 3], [[[2, 7]], 4], [[], 4]], \"passed\": false}, {\"check\": \"case 7\", \"actual\": [[[], 3], [[], 3], [[], 2]], \"expected\": [[[], 2], [[], 3], [[], 3]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.583,"exit_code":1,"observations":[{"actual":[[[[10,19]],1]],"check":"case 0","expected":[[[[10,19]],1]],"passed":true},{"actual":[[[],4],[[],3],[[],2],[[],2]],"check":"case 1","expected":[[[],4],[[],2],[[],2],[[],2]],"passed":false},{"actual":[[[],2],[[],2],[[],2]],"check":"case 2","expected":[[[],2],[[],2],[[],2]],"passed":true},{"actual":[[[[14,19]],4]],"check":"case 3","expected":[[[[14,19]],4]],"passed":true},{"actual":[[[],3]],"check":"case 4","expected":[[[],2]],"passed":false},{"actual":[[[],5],[[],4],[[],2],[[[4,12],[4,19],[12,19]],3]],"check":"case 5","expected":[[[],4],[[],3],[[],2],[[[4,12],[4,19],[12,19]],4]],"passed":false},{"actual":[[[[1,9]],3],[[[2,7]],4],[[],4]],"check":"case 6","expected":[[[[1,9]],3],[[[2,7]],4],[[],4]],"passed":true},{"actual":[[[],3],[[],3],[[],2]],"check":"case 7","expected":[[[],2],[[],3],[[],3]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [[[[10, 19]], 1]], \"expected\": [[[[10, 19]], 1]], \"passed\": true}, {\"check\": \"case 1\", \"actual\": [[[], 4], [[], 3], [[], 2], [[], 2]], \"expected\": [[[], 4], [[], 2], [[], 2], [[], 2]], \"passed\": false}, {\"check\": \"case 2\", \"actual\": [[[], 2], [[], 2], [[], 2]], \"expected\": [[[], 2], [[], 2], [[], 2]], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [[[[14, 19]], 4]], \"expected\": [[[[14, 19]], 4]], \"passed\": true}, {\"check\": \"case 4\", \"actual\": [[[], 3]], \"expected\": [[[], 2]], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [[[], 5], [[], 4], [[], 2], [[[4, 12], [4, 19], [12, 19]], 3]], \"expected\": [[[], 4], [[], 3], [[], 2], [[[4, 12], [4, 19], [12, 19]], 4]], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [[[[1, 9]], 3], [[[2, 7]], 4], [[], 4]], \"expected\": [[[[1, 9]], 3], [[[2, 7]], 4], [[], 4]], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [[[], 3], [[], 3], [[], 2]], \"expected\": [[[], 2], [[], 3], [[], 3]], \"passed\": false}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}