{"abstract":"Leftward rays step cells at the wrong times and skip cells.","category":"Collision detection broadphase","checks":8,"contract":"solve(o, d, cs, max_t): Amanatides-Woo traversal of a uniform grid for a ray o+t*d (d not normalized). Start in cell floor(o/cs); step the axis with the smaller next boundary t (x on ties) while that t <= max_t, at most 64 cells. Return the visited cells [[ix,iy],...].","evaluation_group":"w2-collision_detection_broadphase-grid-ray-dda","failed_approach":"Using (ix-1)*cs skips a whole cell before the first step.","family":"w2-collision_detection_broadphase-grid-ray-dda-negative-direction-boundary","id":"FA-87596","implementations":{"attempt":{"sha256":"170d9299ac187e5faf4cc7ffa89a8119d77873d98e84335389dd425448044c54","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(o, d, cs, max_t):\n    ix, iy = math.floor(o[0] / cs), math.floor(o[1] / cs)\n    sx = 1 if d[0] > 0 else (-1 if d[0] < 0 else 0)\n    sy = 1 if d[1] > 0 else (-1 if d[1] < 0 else 0)\n    inf = float('inf')\n    if sx > 0:\n        tmx = ((ix + 1) * cs - o[0]) / d[0]\n    elif sx < 0:\n        tmx = ((ix - 1) * cs - o[0]) / d[0]\n    else:\n        tmx = inf\n    if sy > 0:\n        tmy = ((iy + 1) * cs - o[1]) / d[1]\n    elif sy < 0:\n        tmy = (iy * cs - o[1]) / d[1]\n    else:\n        tmy = inf\n    tdx = cs / abs(d[0]) if sx else inf\n    tdy = cs / abs(d[1]) if sy else inf\n    cells = [[ix, iy]]\n    while len(cells) < 64:\n        if tmx <= tmy:\n            t, ax = tmx, 0\n        else:\n            t, ax = tmy, 1\n        if t > max_t:\n            break\n        if ax == 0:\n            ix += sx\n            tmx += tdx\n        else:\n            iy += sy\n            tmy += tdy\n        cells.append([ix, iy])\n    return cells\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[-0.25, -1.25], [-1, 2], 0.5, 0.5], [[-1, -3], [-1, -2], [-2, -2], [-2, -1]]], [[[-0.75, -0.75], [-1, -2], 2.0, 0.5], [[-1, -1]]], [[[1.75, -1.0], [2, 2], 2.0, 1.0], [[0, -1], [1, -1], [1, 0]]], [[[-1.5, 0.25], [-1, 4], 0.5, 1.0], [[-3, 0], [-4, 0], [-4, 1], [-4, 2], [-4, 3], [-4, 4], [-5, 4], [-5, 5], [-5, 6], [-5, 7], [-5, 8], [-6, 8]]], [[[0.0, -1.5], [-2, -1], 1.0, 0.5], [[0, -2], [-1, -2], [-2, -2], [-2, -3]]], [[[-2.0, -1.5], [-4, 4], 0.5, 0.5], [[-4, -3], [-5, -3], [-6, -3], [-6, -2], [-7, -2], [-7, -1], [-8, -1], [-8, 0], [-9, 0], [-9, 1]]], [[[0.0, -1.5], [4, -2], 1.0, 3.0], [[0, -2], [1, -2], [1, -3], [2, -3], [3, -3], [3, -4], [4, -4], [5, -4], [5, -5], [6, -5], [7, -5], [7, -6], [8, -6], [9, -6], [9, -7], [10, -7], [11, -7], [11, -8], [12, -8]]], [[[-1.25, -1.75], [2, 0], 1.0, 3.0], [[-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2], [3, -2], [4, -2]]]], [[[[1.5, 1.75], [2, 4], 2.0, 1.0], [[0, 0], [0, 1], [1, 1], [1, 2]]], [[[-1.5, 0.5], [-4, 2], 1.0, 1.0], [[-2, 0], [-3, 0], [-3, 1], [-4, 1], [-5, 1], [-5, 2], [-6, 2]]], [[[1.75, -1.0], [-4, -1], 0.5, 3.0], [[3, -2], [3, -3], [2, -3], [1, -3], [0, -3], [-1, -3], [-1, -4], [-2, -4], [-3, -4], [-4, -4], [-5, -4], [-5, -5], [-6, -5], [-7, -5], [-8, -5], [-9, -5], [-9, -6], [-10, -6], [-11, -6], [-12, -6], [-13, -6], [-13, -7], [-14, -7], [-15, -7], [-16, -7], [-17, -7], [-17, -8], [-18, -8], [-19, -8], [-20, -8], [-21, -8], [-21, -9]]], [[[1.75, 1.0], [1, 4], 2.0, 3.0], [[0, 0], [1, 0], [1, 1], [1, 2], [1, 3], [1, 4], [2, 4], [2, 5], [2, 6]]], [[[1.0, 0.0], [-4, 2], 2.0, 1.0], [[0, 0], [-1, 0], [-2, 0], [-2, 1]]], [[[1.0, 0.5], [-2, -2], 0.5, 2.0], [[2, 1], [1, 1], [1, 0], [0, 0], [0, -1], [-1, -1], [-1, -2], [-2, -2], [-2, -3], [-3, -3], [-3, -4], [-4, -4], [-4, -5], [-5, -5], [-5, -6], [-6, -6], [-6, -7], [-7, -7], [-7, -8]]], [[[-1.75, 0.25], [0, 0], 0.5, 0.5], [[-4, 0]]], [[[-0.25, -0.75], [-4, -2], 2.0, 3.0], [[-1, -1], [-2, -1], [-2, -2], [-3, -2], [-4, -2], [-4, -3], [-5, -3], [-6, -3], [-6, -4], [-7, -4]]]], [[[[-0.5, 1.0], [-2, -2], 2.0, 1.0], [[-1, 0], [-1, -1], [-2, -1]]], [[[-2.0, 1.0], [2, 2], 1.0, 0.5], [[-2, 1], [-1, 1], [-1, 2]]], [[[-0.5, 0.0], [2, 0], 0.5, 2.0], [[-1, 0], [0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0]]], [[[1.5, 2.0], [-2, 2], 1.0, 0.5], [[1, 2], [0, 2], [0, 3]]], [[[-0.25, -1.0], [-4, 4], 2.0, 0.5], [[-1, -1], [-1, 0], [-2, 0]]], [[[0.0, 1.0], [1, -2], 2.0, 2.0], [[0, 0], [0, -1], [0, -2], [1, -2]]], [[[-0.25, -1.75], [-2, -1], 1.0, 2.0], [[-1, -2], [-1, -3], [-2, -3], [-3, -3], [-3, -4], [-4, -4], [-5, -4]]], [[[0.25, -1.75], [-2, -2], 2.0, 0.5], [[0, -1], [-1, -1], [-1, -2]]]], [[[[1.0, -1.75], [-1, 1], 1.0, 0.5], [[1, -2], [0, -2]]], [[[1.25, 0.0], [-4, 1], 1.0, 2.0], [[1, 0], [0, 0], [-1, 0], [-2, 0], [-3, 0], [-3, 1], [-4, 1], [-5, 1], [-6, 1], [-7, 1], [-7, 2]]], [[[-2.0, -0.75], [-2, 4], 0.5, 3.0], [[-4, -2], [-5, -2], [-5, -1], [-5, 0], [-6, 0], [-6, 1], [-6, 2], [-7, 2], [-7, 3], [-7, 4], [-8, 4], [-8, 5], [-8, 6], [-9, 6], [-9, 7], [-9, 8], [-10, 8], [-10, 9], [-10, 10], [-11, 10], [-11, 11], [-11, 12], [-12, 12], [-12, 13], [-12, 14], [-13, 14], [-13, 15], [-13, 16], [-14, 16], [-14, 17], [-14, 18], [-15, 18], [-15, 19], [-15, 20], [-16, 20], [-16, 21], [-16, 22], [-17, 22]]], [[[1.25, -2.0], [1, 4], 2.0, 2.0], [[0, -1], [0, 0], [1, 0], [1, 1], [1, 2], [1, 3]]], [[[-0.75, 0.5], [1, 0], 0.5, 2.0], [[-2, 1], [-1, 1], [0, 1], [1, 1], [2, 1]]], [[[-1.75, 0.25], [-1, 4], 1.0, 2.0], [[-2, 0], [-2, 1], [-3, 1], [-3, 2], [-3, 3], [-3, 4], [-3, 5], [-4, 5], [-4, 6], [-4, 7], [-4, 8]]], [[[-0.5, -0.75], [-2, 0], 2.0, 3.0], [[-1, -1], [-2, -1], [-3, -1], [-4, -1]]], [[[1.5, 0.25], [4, 4], 0.5, 3.0], [[3, 0], [3, 1], [4, 1], [4, 2], [5, 2], [5, 3], [6, 3], [6, 4], [7, 4], [7, 5], [8, 5], [8, 6], [9, 6], [9, 7], [10, 7], [10, 8], [11, 8], [11, 9], [12, 9], [12, 10], [13, 10], [13, 11], [14, 11], [14, 12], [15, 12], [15, 13], [16, 13], [16, 14], [17, 14], [17, 15], [18, 15], [18, 16], [19, 16], [19, 17], [20, 17], [20, 18], [21, 18], [21, 19], [22, 19], [22, 20], [23, 20], [23, 21], [24, 21], [24, 22], [25, 22], [25, 23], [26, 23], [26, 24], [27, 24]]]], [[[[-2.0, 1.0], [4, 1], 1.0, 0.5], [[-2, 1], [-1, 1], [0, 1]]], [[[-1.75, 0.25], [4, 0], 2.0, 0.5], [[-1, 0], [0, 0]]], [[[1.0, -2.0], [-2, 0], 2.0, 2.0], [[0, -1], [-1, -1], [-2, -1]]], [[[-0.5, -0.75], [4, 0], 1.0, 0.5], [[-1, -1], [0, -1], [1, -1]]], [[[1.25, 1.75], [-1, -2], 0.5, 2.0], [[2, 3], [2, 2], [1, 2], [1, 1], [1, 0], [0, 0], [0, -1], [0, -2], [-1, -2], [-1, -3], [-1, -4], [-2, -4], [-2, -5]]], [[[-2.0, 2.0], [-2, 2], 1.0, 1.0], [[-2, 2], [-3, 2], [-4, 2], [-4, 3], [-5, 3], [-5, 4]]], [[[2.0, 0.0], [-2, -2], 0.5, 1.0], [[4, 0], [3, 0], [3, -1], [2, -1], [2, -2], [1, -2], [1, -3], [0, -3], [0, -4], [-1, -4], [-1, -5]]], [[[-2.0, -1.75], [-1, 1], 0.5, 3.0], [[-4, -4], [-5, -4], [-5, -3], [-6, -3], [-6, -2], [-7, -2], [-7, -1], [-8, -1], [-8, 0], [-9, 0], [-9, 1], [-10, 1], [-10, 2], [-11, 2]]]]]\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":"6934cff7044f0265c139b489e2625d12308ca33f78de4df8fa23dc63016bc322","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(o, d, cs, max_t):\n    ix, iy = math.floor(o[0] / cs), math.floor(o[1] / cs)\n    sx = 1 if d[0] > 0 else (-1 if d[0] < 0 else 0)\n    sy = 1 if d[1] > 0 else (-1 if d[1] < 0 else 0)\n    inf = float('inf')\n    if sx > 0:\n        tmx = ((ix + 1) * cs - o[0]) / d[0]\n    elif sx < 0:\n        tmx = ((ix + 1) * cs - o[0]) / d[0]\n    else:\n        tmx = inf\n    if sy > 0:\n        tmy = ((iy + 1) * cs - o[1]) / d[1]\n    elif sy < 0:\n        tmy = (iy * cs - o[1]) / d[1]\n    else:\n        tmy = inf\n    tdx = cs / abs(d[0]) if sx else inf\n    tdy = cs / abs(d[1]) if sy else inf\n    cells = [[ix, iy]]\n    while len(cells) < 64:\n        if tmx <= tmy:\n            t, ax = tmx, 0\n        else:\n            t, ax = tmy, 1\n        if t > max_t:\n            break\n        if ax == 0:\n            ix += sx\n            tmx += tdx\n        else:\n            iy += sy\n            tmy += tdy\n        cells.append([ix, iy])\n    return cells\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[-0.25, -1.25], [-1, 2], 0.5, 0.5], [[-1, -3], [-1, -2], [-2, -2], [-2, -1]]], [[[-0.75, -0.75], [-1, -2], 2.0, 0.5], [[-1, -1]]], [[[1.75, -1.0], [2, 2], 2.0, 1.0], [[0, -1], [1, -1], [1, 0]]], [[[-1.5, 0.25], [-1, 4], 0.5, 1.0], [[-3, 0], [-4, 0], [-4, 1], [-4, 2], [-4, 3], [-4, 4], [-5, 4], [-5, 5], [-5, 6], [-5, 7], [-5, 8], [-6, 8]]], [[[0.0, -1.5], [-2, -1], 1.0, 0.5], [[0, -2], [-1, -2], [-2, -2], [-2, -3]]], [[[-2.0, -1.5], [-4, 4], 0.5, 0.5], [[-4, -3], [-5, -3], [-6, -3], [-6, -2], [-7, -2], [-7, -1], [-8, -1], [-8, 0], [-9, 0], [-9, 1]]], [[[0.0, -1.5], [4, -2], 1.0, 3.0], [[0, -2], [1, -2], [1, -3], [2, -3], [3, -3], [3, -4], [4, -4], [5, -4], [5, -5], [6, -5], [7, -5], [7, -6], [8, -6], [9, -6], [9, -7], [10, -7], [11, -7], [11, -8], [12, -8]]], [[[-1.25, -1.75], [2, 0], 1.0, 3.0], [[-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2], [3, -2], [4, -2]]]], [[[[1.5, 1.75], [2, 4], 2.0, 1.0], [[0, 0], [0, 1], [1, 1], [1, 2]]], [[[-1.5, 0.5], [-4, 2], 1.0, 1.0], [[-2, 0], [-3, 0], [-3, 1], [-4, 1], [-5, 1], [-5, 2], [-6, 2]]], [[[1.75, -1.0], [-4, -1], 0.5, 3.0], [[3, -2], [3, -3], [2, -3], [1, -3], [0, -3], [-1, -3], [-1, -4], [-2, -4], [-3, -4], [-4, -4], [-5, -4], [-5, -5], [-6, -5], [-7, -5], [-8, -5], [-9, -5], [-9, -6], [-10, -6], [-11, -6], [-12, -6], [-13, -6], [-13, -7], [-14, -7], [-15, -7], [-16, -7], [-17, -7], [-17, -8], [-18, -8], [-19, -8], [-20, -8], [-21, -8], [-21, -9]]], [[[1.75, 1.0], [1, 4], 2.0, 3.0], [[0, 0], [1, 0], [1, 1], [1, 2], [1, 3], [1, 4], [2, 4], [2, 5], [2, 6]]], [[[1.0, 0.0], [-4, 2], 2.0, 1.0], [[0, 0], [-1, 0], [-2, 0], [-2, 1]]], [[[1.0, 0.5], [-2, -2], 0.5, 2.0], [[2, 1], [1, 1], [1, 0], [0, 0], [0, -1], [-1, -1], [-1, -2], [-2, -2], [-2, -3], [-3, -3], [-3, -4], [-4, -4], [-4, -5], [-5, -5], [-5, -6], [-6, -6], [-6, -7], [-7, -7], [-7, -8]]], [[[-1.75, 0.25], [0, 0], 0.5, 0.5], [[-4, 0]]], [[[-0.25, -0.75], [-4, -2], 2.0, 3.0], [[-1, -1], [-2, -1], [-2, -2], [-3, -2], [-4, -2], [-4, -3], [-5, -3], [-6, -3], [-6, -4], [-7, -4]]]], [[[[-0.5, 1.0], [-2, -2], 2.0, 1.0], [[-1, 0], [-1, -1], [-2, -1]]], [[[-2.0, 1.0], [2, 2], 1.0, 0.5], [[-2, 1], [-1, 1], [-1, 2]]], [[[-0.5, 0.0], [2, 0], 0.5, 2.0], [[-1, 0], [0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0]]], [[[1.5, 2.0], [-2, 2], 1.0, 0.5], [[1, 2], [0, 2], [0, 3]]], [[[-0.25, -1.0], [-4, 4], 2.0, 0.5], [[-1, -1], [-1, 0], [-2, 0]]], [[[0.0, 1.0], [1, -2], 2.0, 2.0], [[0, 0], [0, -1], [0, -2], [1, -2]]], [[[-0.25, -1.75], [-2, -1], 1.0, 2.0], [[-1, -2], [-1, -3], [-2, -3], [-3, -3], [-3, -4], [-4, -4], [-5, -4]]], [[[0.25, -1.75], [-2, -2], 2.0, 0.5], [[0, -1], [-1, -1], [-1, -2]]]], [[[[1.0, -1.75], [-1, 1], 1.0, 0.5], [[1, -2], [0, -2]]], [[[1.25, 0.0], [-4, 1], 1.0, 2.0], [[1, 0], [0, 0], [-1, 0], [-2, 0], [-3, 0], [-3, 1], [-4, 1], [-5, 1], [-6, 1], [-7, 1], [-7, 2]]], [[[-2.0, -0.75], [-2, 4], 0.5, 3.0], [[-4, -2], [-5, -2], [-5, -1], [-5, 0], [-6, 0], [-6, 1], [-6, 2], [-7, 2], [-7, 3], [-7, 4], [-8, 4], [-8, 5], [-8, 6], [-9, 6], [-9, 7], [-9, 8], [-10, 8], [-10, 9], [-10, 10], [-11, 10], [-11, 11], [-11, 12], [-12, 12], [-12, 13], [-12, 14], [-13, 14], [-13, 15], [-13, 16], [-14, 16], [-14, 17], [-14, 18], [-15, 18], [-15, 19], [-15, 20], [-16, 20], [-16, 21], [-16, 22], [-17, 22]]], [[[1.25, -2.0], [1, 4], 2.0, 2.0], [[0, -1], [0, 0], [1, 0], [1, 1], [1, 2], [1, 3]]], [[[-0.75, 0.5], [1, 0], 0.5, 2.0], [[-2, 1], [-1, 1], [0, 1], [1, 1], [2, 1]]], [[[-1.75, 0.25], [-1, 4], 1.0, 2.0], [[-2, 0], [-2, 1], [-3, 1], [-3, 2], [-3, 3], [-3, 4], [-3, 5], [-4, 5], [-4, 6], [-4, 7], [-4, 8]]], [[[-0.5, -0.75], [-2, 0], 2.0, 3.0], [[-1, -1], [-2, -1], [-3, -1], [-4, -1]]], [[[1.5, 0.25], [4, 4], 0.5, 3.0], [[3, 0], [3, 1], [4, 1], [4, 2], [5, 2], [5, 3], [6, 3], [6, 4], [7, 4], [7, 5], [8, 5], [8, 6], [9, 6], [9, 7], [10, 7], [10, 8], [11, 8], [11, 9], [12, 9], [12, 10], [13, 10], [13, 11], [14, 11], [14, 12], [15, 12], [15, 13], [16, 13], [16, 14], [17, 14], [17, 15], [18, 15], [18, 16], [19, 16], [19, 17], [20, 17], [20, 18], [21, 18], [21, 19], [22, 19], [22, 20], [23, 20], [23, 21], [24, 21], [24, 22], [25, 22], [25, 23], [26, 23], [26, 24], [27, 24]]]], [[[[-2.0, 1.0], [4, 1], 1.0, 0.5], [[-2, 1], [-1, 1], [0, 1]]], [[[-1.75, 0.25], [4, 0], 2.0, 0.5], [[-1, 0], [0, 0]]], [[[1.0, -2.0], [-2, 0], 2.0, 2.0], [[0, -1], [-1, -1], [-2, -1]]], [[[-0.5, -0.75], [4, 0], 1.0, 0.5], [[-1, -1], [0, -1], [1, -1]]], [[[1.25, 1.75], [-1, -2], 0.5, 2.0], [[2, 3], [2, 2], [1, 2], [1, 1], [1, 0], [0, 0], [0, -1], [0, -2], [-1, -2], [-1, -3], [-1, -4], [-2, -4], [-2, -5]]], [[[-2.0, 2.0], [-2, 2], 1.0, 1.0], [[-2, 2], [-3, 2], [-4, 2], [-4, 3], [-5, 3], [-5, 4]]], [[[2.0, 0.0], [-2, -2], 0.5, 1.0], [[4, 0], [3, 0], [3, -1], [2, -1], [2, -2], [1, -2], [1, -3], [0, -3], [0, -4], [-1, -4], [-1, -5]]], [[[-2.0, -1.75], [-1, 1], 0.5, 3.0], [[-4, -4], [-5, -4], [-5, -3], [-6, -3], [-6, -2], [-7, -2], [-7, -1], [-8, -1], [-8, 0], [-9, 0], [-9, 1], [-10, 1], [-10, 2], [-11, 2]]]]]\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"},"fixed":{"sha256":"3125ac0dd00d2f5bc06de125de19e921e9abf121a5642bcda10d22c1dea9e205","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(o, d, cs, max_t):\n    ix, iy = math.floor(o[0] / cs), math.floor(o[1] / cs)\n    sx = 1 if d[0] > 0 else (-1 if d[0] < 0 else 0)\n    sy = 1 if d[1] > 0 else (-1 if d[1] < 0 else 0)\n    inf = float('inf')\n    if sx > 0:\n        tmx = ((ix + 1) * cs - o[0]) / d[0]\n    elif sx < 0:\n        tmx = (ix * cs - o[0]) / d[0]\n    else:\n        tmx = inf\n    if sy > 0:\n        tmy = ((iy + 1) * cs - o[1]) / d[1]\n    elif sy < 0:\n        tmy = (iy * cs - o[1]) / d[1]\n    else:\n        tmy = inf\n    tdx = cs / abs(d[0]) if sx else inf\n    tdy = cs / abs(d[1]) if sy else inf\n    cells = [[ix, iy]]\n    while len(cells) < 64:\n        if tmx <= tmy:\n            t, ax = tmx, 0\n        else:\n            t, ax = tmy, 1\n        if t > max_t:\n            break\n        if ax == 0:\n            ix += sx\n            tmx += tdx\n        else:\n            iy += sy\n            tmy += tdy\n        cells.append([ix, iy])\n    return cells\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[-0.25, -1.25], [-1, 2], 0.5, 0.5], [[-1, -3], [-1, -2], [-2, -2], [-2, -1]]], [[[-0.75, -0.75], [-1, -2], 2.0, 0.5], [[-1, -1]]], [[[1.75, -1.0], [2, 2], 2.0, 1.0], [[0, -1], [1, -1], [1, 0]]], [[[-1.5, 0.25], [-1, 4], 0.5, 1.0], [[-3, 0], [-4, 0], [-4, 1], [-4, 2], [-4, 3], [-4, 4], [-5, 4], [-5, 5], [-5, 6], [-5, 7], [-5, 8], [-6, 8]]], [[[0.0, -1.5], [-2, -1], 1.0, 0.5], [[0, -2], [-1, -2], [-2, -2], [-2, -3]]], [[[-2.0, -1.5], [-4, 4], 0.5, 0.5], [[-4, -3], [-5, -3], [-6, -3], [-6, -2], [-7, -2], [-7, -1], [-8, -1], [-8, 0], [-9, 0], [-9, 1]]], [[[0.0, -1.5], [4, -2], 1.0, 3.0], [[0, -2], [1, -2], [1, -3], [2, -3], [3, -3], [3, -4], [4, -4], [5, -4], [5, -5], [6, -5], [7, -5], [7, -6], [8, -6], [9, -6], [9, -7], [10, -7], [11, -7], [11, -8], [12, -8]]], [[[-1.25, -1.75], [2, 0], 1.0, 3.0], [[-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2], [3, -2], [4, -2]]]], [[[[1.5, 1.75], [2, 4], 2.0, 1.0], [[0, 0], [0, 1], [1, 1], [1, 2]]], [[[-1.5, 0.5], [-4, 2], 1.0, 1.0], [[-2, 0], [-3, 0], [-3, 1], [-4, 1], [-5, 1], [-5, 2], [-6, 2]]], [[[1.75, -1.0], [-4, -1], 0.5, 3.0], [[3, -2], [3, -3], [2, -3], [1, -3], [0, -3], [-1, -3], [-1, -4], [-2, -4], [-3, -4], [-4, -4], [-5, -4], [-5, -5], [-6, -5], [-7, -5], [-8, -5], [-9, -5], [-9, -6], [-10, -6], [-11, -6], [-12, -6], [-13, -6], [-13, -7], [-14, -7], [-15, -7], [-16, -7], [-17, -7], [-17, -8], [-18, -8], [-19, -8], [-20, -8], [-21, -8], [-21, -9]]], [[[1.75, 1.0], [1, 4], 2.0, 3.0], [[0, 0], [1, 0], [1, 1], [1, 2], [1, 3], [1, 4], [2, 4], [2, 5], [2, 6]]], [[[1.0, 0.0], [-4, 2], 2.0, 1.0], [[0, 0], [-1, 0], [-2, 0], [-2, 1]]], [[[1.0, 0.5], [-2, -2], 0.5, 2.0], [[2, 1], [1, 1], [1, 0], [0, 0], [0, -1], [-1, -1], [-1, -2], [-2, -2], [-2, -3], [-3, -3], [-3, -4], [-4, -4], [-4, -5], [-5, -5], [-5, -6], [-6, -6], [-6, -7], [-7, -7], [-7, -8]]], [[[-1.75, 0.25], [0, 0], 0.5, 0.5], [[-4, 0]]], [[[-0.25, -0.75], [-4, -2], 2.0, 3.0], [[-1, -1], [-2, -1], [-2, -2], [-3, -2], [-4, -2], [-4, -3], [-5, -3], [-6, -3], [-6, -4], [-7, -4]]]], [[[[-0.5, 1.0], [-2, -2], 2.0, 1.0], [[-1, 0], [-1, -1], [-2, -1]]], [[[-2.0, 1.0], [2, 2], 1.0, 0.5], [[-2, 1], [-1, 1], [-1, 2]]], [[[-0.5, 0.0], [2, 0], 0.5, 2.0], [[-1, 0], [0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0]]], [[[1.5, 2.0], [-2, 2], 1.0, 0.5], [[1, 2], [0, 2], [0, 3]]], [[[-0.25, -1.0], [-4, 4], 2.0, 0.5], [[-1, -1], [-1, 0], [-2, 0]]], [[[0.0, 1.0], [1, -2], 2.0, 2.0], [[0, 0], [0, -1], [0, -2], [1, -2]]], [[[-0.25, -1.75], [-2, -1], 1.0, 2.0], [[-1, -2], [-1, -3], [-2, -3], [-3, -3], [-3, -4], [-4, -4], [-5, -4]]], [[[0.25, -1.75], [-2, -2], 2.0, 0.5], [[0, -1], [-1, -1], [-1, -2]]]], [[[[1.0, -1.75], [-1, 1], 1.0, 0.5], [[1, -2], [0, -2]]], [[[1.25, 0.0], [-4, 1], 1.0, 2.0], [[1, 0], [0, 0], [-1, 0], [-2, 0], [-3, 0], [-3, 1], [-4, 1], [-5, 1], [-6, 1], [-7, 1], [-7, 2]]], [[[-2.0, -0.75], [-2, 4], 0.5, 3.0], [[-4, -2], [-5, -2], [-5, -1], [-5, 0], [-6, 0], [-6, 1], [-6, 2], [-7, 2], [-7, 3], [-7, 4], [-8, 4], [-8, 5], [-8, 6], [-9, 6], [-9, 7], [-9, 8], [-10, 8], [-10, 9], [-10, 10], [-11, 10], [-11, 11], [-11, 12], [-12, 12], [-12, 13], [-12, 14], [-13, 14], [-13, 15], [-13, 16], [-14, 16], [-14, 17], [-14, 18], [-15, 18], [-15, 19], [-15, 20], [-16, 20], [-16, 21], [-16, 22], [-17, 22]]], [[[1.25, -2.0], [1, 4], 2.0, 2.0], [[0, -1], [0, 0], [1, 0], [1, 1], [1, 2], [1, 3]]], [[[-0.75, 0.5], [1, 0], 0.5, 2.0], [[-2, 1], [-1, 1], [0, 1], [1, 1], [2, 1]]], [[[-1.75, 0.25], [-1, 4], 1.0, 2.0], [[-2, 0], [-2, 1], [-3, 1], [-3, 2], [-3, 3], [-3, 4], [-3, 5], [-4, 5], [-4, 6], [-4, 7], [-4, 8]]], [[[-0.5, -0.75], [-2, 0], 2.0, 3.0], [[-1, -1], [-2, -1], [-3, -1], [-4, -1]]], [[[1.5, 0.25], [4, 4], 0.5, 3.0], [[3, 0], [3, 1], [4, 1], [4, 2], [5, 2], [5, 3], [6, 3], [6, 4], [7, 4], [7, 5], [8, 5], [8, 6], [9, 6], [9, 7], [10, 7], [10, 8], [11, 8], [11, 9], [12, 9], [12, 10], [13, 10], [13, 11], [14, 11], [14, 12], [15, 12], [15, 13], [16, 13], [16, 14], [17, 14], [17, 15], [18, 15], [18, 16], [19, 16], [19, 17], [20, 17], [20, 18], [21, 18], [21, 19], [22, 19], [22, 20], [23, 20], [23, 21], [24, 21], [24, 22], [25, 22], [25, 23], [26, 23], [26, 24], [27, 24]]]], [[[[-2.0, 1.0], [4, 1], 1.0, 0.5], [[-2, 1], [-1, 1], [0, 1]]], [[[-1.75, 0.25], [4, 0], 2.0, 0.5], [[-1, 0], [0, 0]]], [[[1.0, -2.0], [-2, 0], 2.0, 2.0], [[0, -1], [-1, -1], [-2, -1]]], [[[-0.5, -0.75], [4, 0], 1.0, 0.5], [[-1, -1], [0, -1], [1, -1]]], [[[1.25, 1.75], [-1, -2], 0.5, 2.0], [[2, 3], [2, 2], [1, 2], [1, 1], [1, 0], [0, 0], [0, -1], [0, -2], [-1, -2], [-1, -3], [-1, -4], [-2, -4], [-2, -5]]], [[[-2.0, 2.0], [-2, 2], 1.0, 1.0], [[-2, 2], [-3, 2], [-4, 2], [-4, 3], [-5, 3], [-5, 4]]], [[[2.0, 0.0], [-2, -2], 0.5, 1.0], [[4, 0], [3, 0], [3, -1], [2, -1], [2, -2], [1, -2], [1, -3], [0, -3], [0, -4], [-1, -4], [-1, -5]]], [[[-2.0, -1.75], [-1, 1], 0.5, 3.0], [[-4, -4], [-5, -4], [-5, -3], [-6, -3], [-6, -2], [-7, -2], [-7, -1], [-8, -1], [-8, 0], [-9, 0], [-9, 1], [-10, 1], [-10, 2], [-11, 2]]]]]\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-grid-ray-dda-negative-direction-boundary","generated_at":"2026-09-29T14:51:00.331694+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.","repair":"Moving in -x the next boundary is ix*cs.","root_cause":"For sx<0 the first x boundary uses (ix+1)*cs.","sha256":"2bbbccc25d04b9bfe1a3f333cd18a2f563b134c0f1578bf7f0206467a79dabf5","title":"Rays travelling in -x measure the first boundary on the far side of the cell · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.007,"exit_code":1,"observations":[{"actual":[[-1,-3],[-1,-2],[-1,-1]],"check":"case 0","expected":[[-1,-3],[-1,-2],[-2,-2],[-2,-1]],"passed":false},{"actual":[[-1,-1]],"check":"case 1","expected":[[-1,-1]],"passed":true},{"actual":[[0,-1],[1,-1],[1,0]],"check":"case 2","expected":[[0,-1],[1,-1],[1,0]],"passed":true},{"actual":[[-3,0],[-3,1],[-3,2],[-3,3],[-3,4],[-4,4],[-4,5],[-4,6],[-4,7],[-4,8],[-5,8]],"check":"case 3","expected":[[-3,0],[-4,0],[-4,1],[-4,2],[-4,3],[-4,4],[-5,4],[-5,5],[-5,6],[-5,7],[-5,8],[-6,8]],"passed":false},{"actual":[[0,-2],[-1,-2],[-1,-3]],"check":"case 4","expected":[[0,-2],[-1,-2],[-2,-2],[-2,-3]],"passed":false},{"actual":[[-4,-3],[-5,-3],[-5,-2],[-6,-2],[-6,-1],[-7,-1],[-7,0],[-8,0],[-8,1]],"check":"case 5","expected":[[-4,-3],[-5,-3],[-6,-3],[-6,-2],[-7,-2],[-7,-1],[-8,-1],[-8,0],[-9,0],[-9,1]],"passed":false},{"actual":[[0,-2],[1,-2],[1,-3],[2,-3],[3,-3],[3,-4],[4,-4],[5,-4],[5,-5],[6,-5],[7,-5],[7,-6],[8,-6],[9,-6],[9,-7],[10,-7],[11,-7],[11,-8],[12,-8]],"check":"case 6","expected":[[0,-2],[1,-2],[1,-3],[2,-3],[3,-3],[3,-4],[4,-4],[5,-4],[5,-5],[6,-5],[7,-5],[7,-6],[8,-6],[9,-6],[9,-7],[10,-7],[11,-7],[11,-8],[12,-8]],"passed":true},{"actual":[[-2,-2],[-1,-2],[0,-2],[1,-2],[2,-2],[3,-2],[4,-2]],"check":"case 7","expected":[[-2,-2],[-1,-2],[0,-2],[1,-2],[2,-2],[3,-2],[4,-2]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [[-1, -3], [-1, -2], [-1, -1]], \"expected\": [[-1, -3], [-1, -2], [-2, -2], [-2, -1]], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [[-1, -1]], \"expected\": [[-1, -1]], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [[0, -1], [1, -1], [1, 0]], \"expected\": [[0, -1], [1, -1], [1, 0]], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [[-3, 0], [-3, 1], [-3, 2], [-3, 3], [-3, 4], [-4, 4], [-4, 5], [-4, 6], [-4, 7], [-4, 8], [-5, 8]], \"expected\": [[-3, 0], [-4, 0], [-4, 1], [-4, 2], [-4, 3], [-4, 4], [-5, 4], [-5, 5], [-5, 6], [-5, 7], [-5, 8], [-6, 8]], \"passed\": false}, {\"check\": \"case 4\", \"actual\": [[0, -2], [-1, -2], [-1, -3]], \"expected\": [[0, -2], [-1, -2], [-2, -2], [-2, -3]], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [[-4, -3], [-5, -3], [-5, -2], [-6, -2], [-6, -1], [-7, -1], [-7, 0], [-8, 0], [-8, 1]], \"expected\": [[-4, -3], [-5, -3], [-6, -3], [-6, -2], [-7, -2], [-7, -1], [-8, -1], [-8, 0], [-9, 0], [-9, 1]], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [[0, -2], [1, -2], [1, -3], [2, -3], [3, -3], [3, -4], [4, -4], [5, -4], [5, -5], [6, -5], [7, -5], [7, -6], [8, -6], [9, -6], [9, -7], [10, -7], [11, -7], [11, -8], [12, -8]], \"expected\": [[0, -2], [1, -2], [1, -3], [2, -3], [3, -3], [3, -4], [4, -4], [5, -4], [5, -5], [6, -5], [7, -5], [7, -6], [8, -6], [9, -6], [9, -7], [10, -7], [11, -7], [11, -8], [12, -8]], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [[-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2], [3, -2], [4, -2]], \"expected\": [[-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2], [3, -2], [4, -2]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":45.481,"exit_code":1,"observations":[{"actual":[[-1,-3],[-2,-3],[-2,-2],[-3,-2],[-3,-1]],"check":"case 0","expected":[[-1,-3],[-1,-2],[-2,-2],[-2,-1]],"passed":false},{"actual":[[-1,-1],[-2,-1]],"check":"case 1","expected":[[-1,-1]],"passed":false},{"actual":[[0,-1],[1,-1],[1,0]],"check":"case 2","expected":[[0,-1],[1,-1],[1,0]],"passed":true},{"actual":[[-3,0],[-4,0],[-5,0],[-5,1],[-5,2],[-5,3],[-5,4],[-6,4],[-6,5],[-6,6],[-6,7],[-6,8],[-7,8]],"check":"case 3","expected":[[-3,0],[-4,0],[-4,1],[-4,2],[-4,3],[-4,4],[-5,4],[-5,5],[-5,6],[-5,7],[-5,8],[-6,8]],"passed":false},{"actual":[[0,-2],[-1,-2],[-2,-2],[-3,-2],[-3,-3]],"check":"case 4","expected":[[0,-2],[-1,-2],[-2,-2],[-2,-3]],"passed":false},{"actual":[[-4,-3],[-5,-3],[-6,-3],[-7,-3],[-7,-2],[-8,-2],[-8,-1],[-9,-1],[-9,0],[-10,0],[-10,1]],"check":"case 5","expected":[[-4,-3],[-5,-3],[-6,-3],[-6,-2],[-7,-2],[-7,-1],[-8,-1],[-8,0],[-9,0],[-9,1]],"passed":false},{"actual":[[0,-2],[1,-2],[1,-3],[2,-3],[3,-3],[3,-4],[4,-4],[5,-4],[5,-5],[6,-5],[7,-5],[7,-6],[8,-6],[9,-6],[9,-7],[10,-7],[11,-7],[11,-8],[12,-8]],"check":"case 6","expected":[[0,-2],[1,-2],[1,-3],[2,-3],[3,-3],[3,-4],[4,-4],[5,-4],[5,-5],[6,-5],[7,-5],[7,-6],[8,-6],[9,-6],[9,-7],[10,-7],[11,-7],[11,-8],[12,-8]],"passed":true},{"actual":[[-2,-2],[-1,-2],[0,-2],[1,-2],[2,-2],[3,-2],[4,-2]],"check":"case 7","expected":[[-2,-2],[-1,-2],[0,-2],[1,-2],[2,-2],[3,-2],[4,-2]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [[-1, -3], [-2, -3], [-2, -2], [-3, -2], [-3, -1]], \"expected\": [[-1, -3], [-1, -2], [-2, -2], [-2, -1]], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [[-1, -1], [-2, -1]], \"expected\": [[-1, -1]], \"passed\": false}, {\"check\": \"case 2\", \"actual\": [[0, -1], [1, -1], [1, 0]], \"expected\": [[0, -1], [1, -1], [1, 0]], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [[-3, 0], [-4, 0], [-5, 0], [-5, 1], [-5, 2], [-5, 3], [-5, 4], [-6, 4], [-6, 5], [-6, 6], [-6, 7], [-6, 8], [-7, 8]], \"expected\": [[-3, 0], [-4, 0], [-4, 1], [-4, 2], [-4, 3], [-4, 4], [-5, 4], [-5, 5], [-5, 6], [-5, 7], [-5, 8], [-6, 8]], \"passed\": false}, {\"check\": \"case 4\", \"actual\": [[0, -2], [-1, -2], [-2, -2], [-3, -2], [-3, -3]], \"expected\": [[0, -2], [-1, -2], [-2, -2], [-2, -3]], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [[-4, -3], [-5, -3], [-6, -3], [-7, -3], [-7, -2], [-8, -2], [-8, -1], [-9, -1], [-9, 0], [-10, 0], [-10, 1]], \"expected\": [[-4, -3], [-5, -3], [-6, -3], [-6, -2], [-7, -2], [-7, -1], [-8, -1], [-8, 0], [-9, 0], [-9, 1]], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [[0, -2], [1, -2], [1, -3], [2, -3], [3, -3], [3, -4], [4, -4], [5, -4], [5, -5], [6, -5], [7, -5], [7, -6], [8, -6], [9, -6], [9, -7], [10, -7], [11, -7], [11, -8], [12, -8]], \"expected\": [[0, -2], [1, -2], [1, -3], [2, -3], [3, -3], [3, -4], [4, -4], [5, -4], [5, -5], [6, -5], [7, -5], [7, -6], [8, -6], [9, -6], [9, -7], [10, -7], [11, -7], [11, -8], [12, -8]], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [[-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2], [3, -2], [4, -2]], \"expected\": [[-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2], [3, -2], [4, -2]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.899,"exit_code":0,"observations":[{"actual":[[-1,-3],[-1,-2],[-2,-2],[-2,-1]],"check":"case 0","expected":[[-1,-3],[-1,-2],[-2,-2],[-2,-1]],"passed":true},{"actual":[[-1,-1]],"check":"case 1","expected":[[-1,-1]],"passed":true},{"actual":[[0,-1],[1,-1],[1,0]],"check":"case 2","expected":[[0,-1],[1,-1],[1,0]],"passed":true},{"actual":[[-3,0],[-4,0],[-4,1],[-4,2],[-4,3],[-4,4],[-5,4],[-5,5],[-5,6],[-5,7],[-5,8],[-6,8]],"check":"case 3","expected":[[-3,0],[-4,0],[-4,1],[-4,2],[-4,3],[-4,4],[-5,4],[-5,5],[-5,6],[-5,7],[-5,8],[-6,8]],"passed":true},{"actual":[[0,-2],[-1,-2],[-2,-2],[-2,-3]],"check":"case 4","expected":[[0,-2],[-1,-2],[-2,-2],[-2,-3]],"passed":true},{"actual":[[-4,-3],[-5,-3],[-6,-3],[-6,-2],[-7,-2],[-7,-1],[-8,-1],[-8,0],[-9,0],[-9,1]],"check":"case 5","expected":[[-4,-3],[-5,-3],[-6,-3],[-6,-2],[-7,-2],[-7,-1],[-8,-1],[-8,0],[-9,0],[-9,1]],"passed":true},{"actual":[[0,-2],[1,-2],[1,-3],[2,-3],[3,-3],[3,-4],[4,-4],[5,-4],[5,-5],[6,-5],[7,-5],[7,-6],[8,-6],[9,-6],[9,-7],[10,-7],[11,-7],[11,-8],[12,-8]],"check":"case 6","expected":[[0,-2],[1,-2],[1,-3],[2,-3],[3,-3],[3,-4],[4,-4],[5,-4],[5,-5],[6,-5],[7,-5],[7,-6],[8,-6],[9,-6],[9,-7],[10,-7],[11,-7],[11,-8],[12,-8]],"passed":true},{"actual":[[-2,-2],[-1,-2],[0,-2],[1,-2],[2,-2],[3,-2],[4,-2]],"check":"case 7","expected":[[-2,-2],[-1,-2],[0,-2],[1,-2],[2,-2],[3,-2],[4,-2]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [[-1, -3], [-1, -2], [-2, -2], [-2, -1]], \"expected\": [[-1, -3], [-1, -2], [-2, -2], [-2, -1]], \"passed\": true}, {\"check\": \"case 1\", \"actual\": [[-1, -1]], \"expected\": [[-1, -1]], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [[0, -1], [1, -1], [1, 0]], \"expected\": [[0, -1], [1, -1], [1, 0]], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [[-3, 0], [-4, 0], [-4, 1], [-4, 2], [-4, 3], [-4, 4], [-5, 4], [-5, 5], [-5, 6], [-5, 7], [-5, 8], [-6, 8]], \"expected\": [[-3, 0], [-4, 0], [-4, 1], [-4, 2], [-4, 3], [-4, 4], [-5, 4], [-5, 5], [-5, 6], [-5, 7], [-5, 8], [-6, 8]], \"passed\": true}, {\"check\": \"case 4\", \"actual\": [[0, -2], [-1, -2], [-2, -2], [-2, -3]], \"expected\": [[0, -2], [-1, -2], [-2, -2], [-2, -3]], \"passed\": true}, {\"check\": \"case 5\", \"actual\": [[-4, -3], [-5, -3], [-6, -3], [-6, -2], [-7, -2], [-7, -1], [-8, -1], [-8, 0], [-9, 0], [-9, 1]], \"expected\": [[-4, -3], [-5, -3], [-6, -3], [-6, -2], [-7, -2], [-7, -1], [-8, -1], [-8, 0], [-9, 0], [-9, 1]], \"passed\": true}, {\"check\": \"case 6\", \"actual\": [[0, -2], [1, -2], [1, -3], [2, -3], [3, -3], [3, -4], [4, -4], [5, -4], [5, -5], [6, -5], [7, -5], [7, -6], [8, -6], [9, -6], [9, -7], [10, -7], [11, -7], [11, -8], [12, -8]], \"expected\": [[0, -2], [1, -2], [1, -3], [2, -3], [3, -3], [3, -4], [4, -4], [5, -4], [5, -5], [6, -5], [7, -5], [7, -6], [8, -6], [9, -6], [9, -7], [10, -7], [11, -7], [11, -8], [12, -8]], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [[-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2], [3, -2], [4, -2]], \"expected\": [[-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2], [3, -2], [4, -2]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}