{"abstract":"BSP layouts are biased to vertical slices.","category":"Procedural level generation constraints","checks":8,"contract":"Recursively split the rectangle while depth remains. An axis can be split when that side is >= 2*min_size; if neither can, it is a leaf. Split vertically when w > h, or when w == h at even remaining depth; if the chosen axis cannot be split use the other. The first child gets floor(side/2). Returns leaves [x, y, w, h] in left/top-first order.","contract_signature":"x, y, w, h, min_size, depth","evaluation_group":"w2-procedural-level-generation-constraints-bsp-split","failed_approach":"Flipping the parity alternates in the wrong phase.","family":"w2-procedural-level-generation-constraints-bsp-split-orientation-choice","id":"FA-86531","implementations":{"attempt":{"sha256":"69da4917356635f2aa43dcb29caf6b39ede5c353233c860d2e9c9dba6d6af71f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x, y, w, h, min_size, depth):\n    out = []\n    def split(x, y, w, h, d):\n        can_v = w >= 2 * min_size\n        can_h = h >= 2 * min_size\n        if d == 0 or not (can_v or can_h):\n            out.append([x, y, w, h])\n            return\n        vertical = w > h or (w == h and d % 2 == 1)\n        if vertical and not can_v:\n            vertical = False\n        elif not vertical and not can_h:\n            vertical = True\n        if vertical:\n            half = w // 2\n            split(x, y, half, h, d - 1)\n            split(x + half, y, w - half, h, d - 1)\n        else:\n            half = h // 2\n            split(x, y, w, half, d - 1)\n            split(x, y + half, w, h - half, d - 1)\n    split(x, y, w, h, depth)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('square at even depth #1', [0, 0, 10, 10, 2, 2], [[0, 0, 5, 5], [0, 5, 5, 5], [5, 0, 5, 5], [5, 5, 5, 5]]),\n  ('regression orientation choice #1',\n   [0, 5, 7, 25, 3, 3],\n   [[0, 5, 3, 6],\n    [3, 5, 4, 6],\n    [0, 11, 3, 6],\n    [3, 11, 4, 6],\n    [0, 17, 3, 6],\n    [3, 17, 4, 6],\n    [0, 23, 7, 3],\n    [0, 26, 7, 4]]),\n  ('regression orientation choice #2',\n   [0, 3, 15, 30, 3, 4],\n   [[0, 3, 7, 3],\n    [0, 6, 7, 4],\n    [7, 3, 4, 7],\n    [11, 3, 4, 7],\n    [0, 10, 7, 4],\n    [0, 14, 7, 4],\n    [7, 10, 8, 4],\n    [7, 14, 8, 4],\n    [0, 18, 7, 3],\n    [0, 21, 7, 4],\n    [7, 18, 4, 7],\n    [11, 18, 4, 7],\n    [0, 25, 7, 4],\n    [0, 29, 7, 4],\n    [7, 25, 8, 4],\n    [7, 29, 8, 4]]),\n  ('partial repair boundary #1',\n   [3, 0, 25, 12, 2, 3],\n   [[3, 0, 6, 6],\n    [3, 6, 6, 6],\n    [9, 0, 6, 6],\n    [9, 6, 6, 6],\n    [15, 0, 6, 6],\n    [15, 6, 6, 6],\n    [21, 0, 7, 6],\n    [21, 6, 7, 6]]),\n  ('partial repair boundary #2',\n   [1, 0, 6, 24, 3, 4],\n   [[1, 0, 3, 3],\n    [1, 3, 3, 3],\n    [4, 0, 3, 3],\n    [4, 3, 3, 3],\n    [1, 6, 3, 3],\n    [1, 9, 3, 3],\n    [4, 6, 3, 3],\n    [4, 9, 3, 3],\n    [1, 12, 3, 3],\n    [1, 15, 3, 3],\n    [4, 12, 3, 3],\n    [4, 15, 3, 3],\n    [1, 18, 3, 3],\n    [1, 21, 3, 3],\n    [4, 18, 3, 3],\n    [4, 21, 3, 3]]),\n  ('exactly splittable #1', [0, 0, 8, 3, 4, 1], [[0, 0, 4, 3], [4, 0, 4, 3]]),\n  ('odd width #1', [1, 1, 9, 4, 2, 1], [[1, 1, 4, 4], [5, 1, 5, 4]]),\n  ('control #1', [2, 3, 16, 10, 5, 1], [[2, 3, 8, 10], [10, 3, 8, 10]])],\n [('square at even depth #1', [0, 0, 10, 10, 2, 2], [[0, 0, 5, 5], [0, 5, 5, 5], [5, 0, 5, 5], [5, 5, 5, 5]]),\n  ('regression orientation choice #1',\n   [5, 0, 25, 13, 4, 4],\n   [[5, 0, 6, 6],\n    [11, 0, 6, 6],\n    [5, 6, 6, 7],\n    [11, 6, 6, 7],\n    [17, 0, 6, 6],\n    [23, 0, 7, 6],\n    [17, 6, 6, 7],\n    [23, 6, 7, 7]]),\n  ('regression orientation choice #2',\n   [5, 4, 13, 27, 4, 4],\n   [[5, 4, 6, 6],\n    [11, 4, 7, 6],\n    [5, 10, 6, 7],\n    [11, 10, 7, 7],\n    [5, 17, 6, 7],\n    [11, 17, 7, 7],\n    [5, 24, 6, 7],\n    [11, 24, 7, 7]]),\n  ('partial repair boundary #1',\n   [1, 0, 6, 24, 3, 4],\n   [[1, 0, 3, 3],\n    [1, 3, 3, 3],\n    [4, 0, 3, 3],\n    [4, 3, 3, 3],\n    [1, 6, 3, 3],\n    [1, 9, 3, 3],\n    [4, 6, 3, 3],\n    [4, 9, 3, 3],\n    [1, 12, 3, 3],\n    [1, 15, 3, 3],\n    [4, 12, 3, 3],\n    [4, 15, 3, 3],\n    [1, 18, 3, 3],\n    [1, 21, 3, 3],\n    [4, 18, 3, 3],\n    [4, 21, 3, 3]]),\n  ('partial repair boundary #2',\n   [0, 0, 29, 27, 6, 4],\n   [[0, 0, 7, 6],\n    [0, 6, 7, 7],\n    [7, 0, 7, 6],\n    [7, 6, 7, 7],\n    [0, 13, 7, 7],\n    [0, 20, 7, 7],\n    [7, 13, 7, 7],\n    [7, 20, 7, 7],\n    [14, 0, 7, 6],\n    [14, 6, 7, 7],\n    [21, 0, 8, 6],\n    [21, 6, 8, 7],\n    [14, 13, 7, 7],\n    [14, 20, 7, 7],\n    [21, 13, 8, 7],\n    [21, 20, 8, 7]]),\n  ('exactly splittable #1', [0, 0, 8, 3, 4, 1], [[0, 0, 4, 3], [4, 0, 4, 3]]),\n  ('odd width #1', [1, 1, 9, 4, 2, 1], [[1, 1, 4, 4], [5, 1, 5, 4]]),\n  ('control #1', [2, 3, 16, 10, 5, 1], [[2, 3, 8, 10], [10, 3, 8, 10]])],\n [('square at even depth #1', [0, 0, 10, 10, 2, 2], [[0, 0, 5, 5], [0, 5, 5, 5], [5, 0, 5, 5], [5, 5, 5, 5]]),\n  ('regression orientation choice #1',\n   [5, 4, 8, 15, 2, 4],\n   [[5, 4, 2, 3],\n    [7, 4, 2, 3],\n    [5, 7, 4, 2],\n    [5, 9, 4, 2],\n    [9, 4, 2, 3],\n    [11, 4, 2, 3],\n    [9, 7, 4, 2],\n    [9, 9, 4, 2],\n    [5, 11, 4, 2],\n    [5, 13, 4, 2],\n    [9, 11, 4, 2],\n    [9, 13, 4, 2],\n    [5, 15, 4, 2],\n    [5, 17, 4, 2],\n    [9, 15, 4, 2],\n    [9, 17, 4, 2]]),\n  ('regression orientation choice #2',\n   [2, 5, 28, 28, 2, 3],\n   [[2, 5, 14, 7],\n    [2, 12, 14, 7],\n    [16, 5, 14, 7],\n    [16, 12, 14, 7],\n    [2, 19, 14, 7],\n    [2, 26, 14, 7],\n    [16, 19, 14, 7],\n    [16, 26, 14, 7]]),\n  ('partial repair boundary #1',\n   [3, 2, 19, 20, 5, 4],\n   [[3, 2, 9, 5],\n    [3, 7, 9, 5],\n    [12, 2, 5, 5],\n    [12, 7, 5, 5],\n    [17, 2, 5, 5],\n    [17, 7, 5, 5],\n    [3, 12, 9, 5],\n    [3, 17, 9, 5],\n    [12, 12, 5, 5],\n    [12, 17, 5, 5],\n    [17, 12, 5, 5],\n    [17, 17, 5, 5]]),\n  ('partial repair boundary #2',\n   [2, 1, 6, 21, 3, 4],\n   [[2, 1, 3, 5],\n    [5, 1, 3, 5],\n    [2, 6, 3, 5],\n    [5, 6, 3, 5],\n    [2, 11, 3, 5],\n    [5, 11, 3, 5],\n    [2, 16, 3, 3],\n    [2, 19, 3, 3],\n    [5, 16, 3, 3],\n    [5, 19, 3, 3]]),\n  ('exactly splittable #1', [0, 0, 8, 3, 4, 1], [[0, 0, 4, 3], [4, 0, 4, 3]]),\n  ('odd width #1', [1, 1, 9, 4, 2, 1], [[1, 1, 4, 4], [5, 1, 5, 4]]),\n  ('control #1', [2, 3, 16, 10, 5, 1], [[2, 3, 8, 10], [10, 3, 8, 10]])],\n [('square at even depth #1', [0, 0, 10, 10, 2, 2], [[0, 0, 5, 5], [0, 5, 5, 5], [5, 0, 5, 5], [5, 5, 5, 5]]),\n  ('regression orientation choice #1',\n   [3, 1, 26, 4, 2, 4],\n   [[3, 1, 3, 2],\n    [3, 3, 3, 2],\n    [6, 1, 3, 2],\n    [6, 3, 3, 2],\n    [9, 1, 3, 2],\n    [9, 3, 3, 2],\n    [12, 1, 4, 2],\n    [12, 3, 4, 2],\n    [16, 1, 3, 2],\n    [16, 3, 3, 2],\n    [19, 1, 3, 2],\n    [19, 3, 3, 2],\n    [22, 1, 3, 2],\n    [22, 3, 3, 2],\n    [25, 1, 4, 2],\n    [25, 3, 4, 2]]),\n  ('regression orientation choice #2',\n   [3, 0, 28, 29, 5, 3],\n   [[3, 0, 14, 7],\n    [3, 7, 14, 7],\n    [17, 0, 14, 7],\n    [17, 7, 14, 7],\n    [3, 14, 14, 7],\n    [3, 21, 14, 8],\n    [17, 14, 14, 7],\n    [17, 21, 14, 8]]),\n  ('regression orientation choice #3',\n   [0, 5, 7, 25, 3, 3],\n   [[0, 5, 3, 6],\n    [3, 5, 4, 6],\n    [0, 11, 3, 6],\n    [3, 11, 4, 6],\n    [0, 17, 3, 6],\n    [3, 17, 4, 6],\n    [0, 23, 7, 3],\n    [0, 26, 7, 4]]),\n  ('partial repair boundary #1',\n   [0, 1, 29, 28, 6, 4],\n   [[0, 1, 7, 7],\n    [0, 8, 7, 7],\n    [7, 1, 7, 7],\n    [7, 8, 7, 7],\n    [0, 15, 7, 7],\n    [0, 22, 7, 7],\n    [7, 15, 7, 7],\n    [7, 22, 7, 7],\n    [14, 1, 7, 7],\n    [14, 8, 7, 7],\n    [21, 1, 8, 7],\n    [21, 8, 8, 7],\n    [14, 15, 7, 7],\n    [14, 22, 7, 7],\n    [21, 15, 8, 7],\n    [21, 22, 8, 7]]),\n  ('exactly splittable #1', [0, 0, 8, 3, 4, 1], [[0, 0, 4, 3], [4, 0, 4, 3]]),\n  ('odd width #1', [1, 1, 9, 4, 2, 1], [[1, 1, 4, 4], [5, 1, 5, 4]]),\n  ('control #1', [3, 0, 14, 28, 4, 1], [[3, 0, 14, 14], [3, 14, 14, 14]])],\n [('square at even depth #1', [0, 0, 10, 10, 2, 2], [[0, 0, 5, 5], [0, 5, 5, 5], [5, 0, 5, 5], [5, 5, 5, 5]]),\n  ('regression orientation choice #1',\n   [2, 4, 23, 21, 3, 3],\n   [[2, 4, 5, 10],\n    [7, 4, 6, 10],\n    [2, 14, 11, 5],\n    [2, 19, 11, 6],\n    [13, 4, 6, 10],\n    [19, 4, 6, 10],\n    [13, 14, 6, 11],\n    [19, 14, 6, 11]]),\n  ('regression orientation choice #2',\n   [4, 4, 19, 20, 2, 3],\n   [[4, 4, 9, 5],\n    [4, 9, 9, 5],\n    [13, 4, 10, 5],\n    [13, 9, 10, 5],\n    [4, 14, 9, 5],\n    [4, 19, 9, 5],\n    [13, 14, 10, 5],\n    [13, 19, 10, 5]]),\n  ('partial repair boundary #1',\n   [5, 4, 13, 25, 6, 3],\n   [[5, 4, 6, 6],\n    [5, 10, 6, 6],\n    [11, 4, 7, 6],\n    [11, 10, 7, 6],\n    [5, 16, 6, 6],\n    [5, 22, 6, 7],\n    [11, 16, 7, 6],\n    [11, 22, 7, 7]]),\n  ('partial repair boundary #2',\n   [1, 3, 22, 11, 4, 3],\n   [[1, 3, 5, 5],\n    [1, 8, 5, 6],\n    [6, 3, 6, 5],\n    [6, 8, 6, 6],\n    [12, 3, 5, 5],\n    [12, 8, 5, 6],\n    [17, 3, 6, 5],\n    [17, 8, 6, 6]]),\n  ('exactly splittable #1', [0, 0, 8, 3, 4, 1], [[0, 0, 4, 3], [4, 0, 4, 3]]),\n  ('odd width #1', [1, 1, 9, 4, 2, 1], [[1, 1, 4, 4], [5, 1, 5, 4]]),\n  ('control #1', [5, 1, 1, 10, 4, 2], [[5, 1, 1, 5], [5, 6, 1, 5]])]]\nfor label, args, expected in cases[N-1]:\n    check(label, 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":"c823dcf1a70ed2baa4685105d5d65edc19fa33fe1068da174016f5c90aec4f3a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x, y, w, h, min_size, depth):\n    out = []\n    def split(x, y, w, h, d):\n        can_v = w >= 2 * min_size\n        can_h = h >= 2 * min_size\n        if d == 0 or not (can_v or can_h):\n            out.append([x, y, w, h])\n            return\n        vertical = w >= h\n        if vertical and not can_v:\n            vertical = False\n        elif not vertical and not can_h:\n            vertical = True\n        if vertical:\n            half = w // 2\n            split(x, y, half, h, d - 1)\n            split(x + half, y, w - half, h, d - 1)\n        else:\n            half = h // 2\n            split(x, y, w, half, d - 1)\n            split(x, y + half, w, h - half, d - 1)\n    split(x, y, w, h, depth)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('square at even depth #1', [0, 0, 10, 10, 2, 2], [[0, 0, 5, 5], [0, 5, 5, 5], [5, 0, 5, 5], [5, 5, 5, 5]]),\n  ('regression orientation choice #1',\n   [0, 5, 7, 25, 3, 3],\n   [[0, 5, 3, 6],\n    [3, 5, 4, 6],\n    [0, 11, 3, 6],\n    [3, 11, 4, 6],\n    [0, 17, 3, 6],\n    [3, 17, 4, 6],\n    [0, 23, 7, 3],\n    [0, 26, 7, 4]]),\n  ('regression orientation choice #2',\n   [0, 3, 15, 30, 3, 4],\n   [[0, 3, 7, 3],\n    [0, 6, 7, 4],\n    [7, 3, 4, 7],\n    [11, 3, 4, 7],\n    [0, 10, 7, 4],\n    [0, 14, 7, 4],\n    [7, 10, 8, 4],\n    [7, 14, 8, 4],\n    [0, 18, 7, 3],\n    [0, 21, 7, 4],\n    [7, 18, 4, 7],\n    [11, 18, 4, 7],\n    [0, 25, 7, 4],\n    [0, 29, 7, 4],\n    [7, 25, 8, 4],\n    [7, 29, 8, 4]]),\n  ('partial repair boundary #1',\n   [3, 0, 25, 12, 2, 3],\n   [[3, 0, 6, 6],\n    [3, 6, 6, 6],\n    [9, 0, 6, 6],\n    [9, 6, 6, 6],\n    [15, 0, 6, 6],\n    [15, 6, 6, 6],\n    [21, 0, 7, 6],\n    [21, 6, 7, 6]]),\n  ('partial repair boundary #2',\n   [1, 0, 6, 24, 3, 4],\n   [[1, 0, 3, 3],\n    [1, 3, 3, 3],\n    [4, 0, 3, 3],\n    [4, 3, 3, 3],\n    [1, 6, 3, 3],\n    [1, 9, 3, 3],\n    [4, 6, 3, 3],\n    [4, 9, 3, 3],\n    [1, 12, 3, 3],\n    [1, 15, 3, 3],\n    [4, 12, 3, 3],\n    [4, 15, 3, 3],\n    [1, 18, 3, 3],\n    [1, 21, 3, 3],\n    [4, 18, 3, 3],\n    [4, 21, 3, 3]]),\n  ('exactly splittable #1', [0, 0, 8, 3, 4, 1], [[0, 0, 4, 3], [4, 0, 4, 3]]),\n  ('odd width #1', [1, 1, 9, 4, 2, 1], [[1, 1, 4, 4], [5, 1, 5, 4]]),\n  ('control #1', [2, 3, 16, 10, 5, 1], [[2, 3, 8, 10], [10, 3, 8, 10]])],\n [('square at even depth #1', [0, 0, 10, 10, 2, 2], [[0, 0, 5, 5], [0, 5, 5, 5], [5, 0, 5, 5], [5, 5, 5, 5]]),\n  ('regression orientation choice #1',\n   [5, 0, 25, 13, 4, 4],\n   [[5, 0, 6, 6],\n    [11, 0, 6, 6],\n    [5, 6, 6, 7],\n    [11, 6, 6, 7],\n    [17, 0, 6, 6],\n    [23, 0, 7, 6],\n    [17, 6, 6, 7],\n    [23, 6, 7, 7]]),\n  ('regression orientation choice #2',\n   [5, 4, 13, 27, 4, 4],\n   [[5, 4, 6, 6],\n    [11, 4, 7, 6],\n    [5, 10, 6, 7],\n    [11, 10, 7, 7],\n    [5, 17, 6, 7],\n    [11, 17, 7, 7],\n    [5, 24, 6, 7],\n    [11, 24, 7, 7]]),\n  ('partial repair boundary #1',\n   [1, 0, 6, 24, 3, 4],\n   [[1, 0, 3, 3],\n    [1, 3, 3, 3],\n    [4, 0, 3, 3],\n    [4, 3, 3, 3],\n    [1, 6, 3, 3],\n    [1, 9, 3, 3],\n    [4, 6, 3, 3],\n    [4, 9, 3, 3],\n    [1, 12, 3, 3],\n    [1, 15, 3, 3],\n    [4, 12, 3, 3],\n    [4, 15, 3, 3],\n    [1, 18, 3, 3],\n    [1, 21, 3, 3],\n    [4, 18, 3, 3],\n    [4, 21, 3, 3]]),\n  ('partial repair boundary #2',\n   [0, 0, 29, 27, 6, 4],\n   [[0, 0, 7, 6],\n    [0, 6, 7, 7],\n    [7, 0, 7, 6],\n    [7, 6, 7, 7],\n    [0, 13, 7, 7],\n    [0, 20, 7, 7],\n    [7, 13, 7, 7],\n    [7, 20, 7, 7],\n    [14, 0, 7, 6],\n    [14, 6, 7, 7],\n    [21, 0, 8, 6],\n    [21, 6, 8, 7],\n    [14, 13, 7, 7],\n    [14, 20, 7, 7],\n    [21, 13, 8, 7],\n    [21, 20, 8, 7]]),\n  ('exactly splittable #1', [0, 0, 8, 3, 4, 1], [[0, 0, 4, 3], [4, 0, 4, 3]]),\n  ('odd width #1', [1, 1, 9, 4, 2, 1], [[1, 1, 4, 4], [5, 1, 5, 4]]),\n  ('control #1', [2, 3, 16, 10, 5, 1], [[2, 3, 8, 10], [10, 3, 8, 10]])],\n [('square at even depth #1', [0, 0, 10, 10, 2, 2], [[0, 0, 5, 5], [0, 5, 5, 5], [5, 0, 5, 5], [5, 5, 5, 5]]),\n  ('regression orientation choice #1',\n   [5, 4, 8, 15, 2, 4],\n   [[5, 4, 2, 3],\n    [7, 4, 2, 3],\n    [5, 7, 4, 2],\n    [5, 9, 4, 2],\n    [9, 4, 2, 3],\n    [11, 4, 2, 3],\n    [9, 7, 4, 2],\n    [9, 9, 4, 2],\n    [5, 11, 4, 2],\n    [5, 13, 4, 2],\n    [9, 11, 4, 2],\n    [9, 13, 4, 2],\n    [5, 15, 4, 2],\n    [5, 17, 4, 2],\n    [9, 15, 4, 2],\n    [9, 17, 4, 2]]),\n  ('regression orientation choice #2',\n   [2, 5, 28, 28, 2, 3],\n   [[2, 5, 14, 7],\n    [2, 12, 14, 7],\n    [16, 5, 14, 7],\n    [16, 12, 14, 7],\n    [2, 19, 14, 7],\n    [2, 26, 14, 7],\n    [16, 19, 14, 7],\n    [16, 26, 14, 7]]),\n  ('partial repair boundary #1',\n   [3, 2, 19, 20, 5, 4],\n   [[3, 2, 9, 5],\n    [3, 7, 9, 5],\n    [12, 2, 5, 5],\n    [12, 7, 5, 5],\n    [17, 2, 5, 5],\n    [17, 7, 5, 5],\n    [3, 12, 9, 5],\n    [3, 17, 9, 5],\n    [12, 12, 5, 5],\n    [12, 17, 5, 5],\n    [17, 12, 5, 5],\n    [17, 17, 5, 5]]),\n  ('partial repair boundary #2',\n   [2, 1, 6, 21, 3, 4],\n   [[2, 1, 3, 5],\n    [5, 1, 3, 5],\n    [2, 6, 3, 5],\n    [5, 6, 3, 5],\n    [2, 11, 3, 5],\n    [5, 11, 3, 5],\n    [2, 16, 3, 3],\n    [2, 19, 3, 3],\n    [5, 16, 3, 3],\n    [5, 19, 3, 3]]),\n  ('exactly splittable #1', [0, 0, 8, 3, 4, 1], [[0, 0, 4, 3], [4, 0, 4, 3]]),\n  ('odd width #1', [1, 1, 9, 4, 2, 1], [[1, 1, 4, 4], [5, 1, 5, 4]]),\n  ('control #1', [2, 3, 16, 10, 5, 1], [[2, 3, 8, 10], [10, 3, 8, 10]])],\n [('square at even depth #1', [0, 0, 10, 10, 2, 2], [[0, 0, 5, 5], [0, 5, 5, 5], [5, 0, 5, 5], [5, 5, 5, 5]]),\n  ('regression orientation choice #1',\n   [3, 1, 26, 4, 2, 4],\n   [[3, 1, 3, 2],\n    [3, 3, 3, 2],\n    [6, 1, 3, 2],\n    [6, 3, 3, 2],\n    [9, 1, 3, 2],\n    [9, 3, 3, 2],\n    [12, 1, 4, 2],\n    [12, 3, 4, 2],\n    [16, 1, 3, 2],\n    [16, 3, 3, 2],\n    [19, 1, 3, 2],\n    [19, 3, 3, 2],\n    [22, 1, 3, 2],\n    [22, 3, 3, 2],\n    [25, 1, 4, 2],\n    [25, 3, 4, 2]]),\n  ('regression orientation choice #2',\n   [3, 0, 28, 29, 5, 3],\n   [[3, 0, 14, 7],\n    [3, 7, 14, 7],\n    [17, 0, 14, 7],\n    [17, 7, 14, 7],\n    [3, 14, 14, 7],\n    [3, 21, 14, 8],\n    [17, 14, 14, 7],\n    [17, 21, 14, 8]]),\n  ('regression orientation choice #3',\n   [0, 5, 7, 25, 3, 3],\n   [[0, 5, 3, 6],\n    [3, 5, 4, 6],\n    [0, 11, 3, 6],\n    [3, 11, 4, 6],\n    [0, 17, 3, 6],\n    [3, 17, 4, 6],\n    [0, 23, 7, 3],\n    [0, 26, 7, 4]]),\n  ('partial repair boundary #1',\n   [0, 1, 29, 28, 6, 4],\n   [[0, 1, 7, 7],\n    [0, 8, 7, 7],\n    [7, 1, 7, 7],\n    [7, 8, 7, 7],\n    [0, 15, 7, 7],\n    [0, 22, 7, 7],\n    [7, 15, 7, 7],\n    [7, 22, 7, 7],\n    [14, 1, 7, 7],\n    [14, 8, 7, 7],\n    [21, 1, 8, 7],\n    [21, 8, 8, 7],\n    [14, 15, 7, 7],\n    [14, 22, 7, 7],\n    [21, 15, 8, 7],\n    [21, 22, 8, 7]]),\n  ('exactly splittable #1', [0, 0, 8, 3, 4, 1], [[0, 0, 4, 3], [4, 0, 4, 3]]),\n  ('odd width #1', [1, 1, 9, 4, 2, 1], [[1, 1, 4, 4], [5, 1, 5, 4]]),\n  ('control #1', [3, 0, 14, 28, 4, 1], [[3, 0, 14, 14], [3, 14, 14, 14]])],\n [('square at even depth #1', [0, 0, 10, 10, 2, 2], [[0, 0, 5, 5], [0, 5, 5, 5], [5, 0, 5, 5], [5, 5, 5, 5]]),\n  ('regression orientation choice #1',\n   [2, 4, 23, 21, 3, 3],\n   [[2, 4, 5, 10],\n    [7, 4, 6, 10],\n    [2, 14, 11, 5],\n    [2, 19, 11, 6],\n    [13, 4, 6, 10],\n    [19, 4, 6, 10],\n    [13, 14, 6, 11],\n    [19, 14, 6, 11]]),\n  ('regression orientation choice #2',\n   [4, 4, 19, 20, 2, 3],\n   [[4, 4, 9, 5],\n    [4, 9, 9, 5],\n    [13, 4, 10, 5],\n    [13, 9, 10, 5],\n    [4, 14, 9, 5],\n    [4, 19, 9, 5],\n    [13, 14, 10, 5],\n    [13, 19, 10, 5]]),\n  ('partial repair boundary #1',\n   [5, 4, 13, 25, 6, 3],\n   [[5, 4, 6, 6],\n    [5, 10, 6, 6],\n    [11, 4, 7, 6],\n    [11, 10, 7, 6],\n    [5, 16, 6, 6],\n    [5, 22, 6, 7],\n    [11, 16, 7, 6],\n    [11, 22, 7, 7]]),\n  ('partial repair boundary #2',\n   [1, 3, 22, 11, 4, 3],\n   [[1, 3, 5, 5],\n    [1, 8, 5, 6],\n    [6, 3, 6, 5],\n    [6, 8, 6, 6],\n    [12, 3, 5, 5],\n    [12, 8, 5, 6],\n    [17, 3, 6, 5],\n    [17, 8, 6, 6]]),\n  ('exactly splittable #1', [0, 0, 8, 3, 4, 1], [[0, 0, 4, 3], [4, 0, 4, 3]]),\n  ('odd width #1', [1, 1, 9, 4, 2, 1], [[1, 1, 4, 4], [5, 1, 5, 4]]),\n  ('control #1', [5, 1, 1, 10, 4, 2], [[5, 1, 1, 5], [5, 6, 1, 5]])]]\nfor label, args, expected in cases[N-1]:\n    check(label, 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":"Deterministic toy contract stipulated for this model; integer or exact arithmetic only, not a reproduction of any specific game engine. 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-procedural-level-generation-constraints-bsp-split-orientation-choice","generated_at":"2026-09-29T14:50:50.476702+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Procedural generators silently emit unplayable or unfair levels when a single constraint check uses the wrong boundary, axis, neighborhood or update order; the defect is visible in exact generated geometry.","root_cause":"Squares always split vertically instead of alternating by depth.","sha256":"c600c136aa44d661fd929b6bfdd550713f077bbcd4930d48799dbf4402fe333f","title":"BSP dungeon partition: Square regions always split vertically · 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":41.967,"exit_code":1,"observations":[{"actual":[[0,0,5,5],[5,0,5,5],[0,5,5,5],[5,5,5,5]],"check":"square at even depth #1","expected":[[0,0,5,5],[0,5,5,5],[5,0,5,5],[5,5,5,5]],"passed":false},{"actual":[[0,5,3,6],[3,5,4,6],[0,11,3,6],[3,11,4,6],[0,17,3,6],[3,17,4,6],[0,23,3,7],[3,23,4,7]],"check":"regression orientation choice #1","expected":[[0,5,3,6],[3,5,4,6],[0,11,3,6],[3,11,4,6],[0,17,3,6],[3,17,4,6],[0,23,7,3],[0,26,7,4]],"passed":false},{"actual":[[0,3,3,7],[3,3,4,7],[0,10,7,4],[0,14,7,4],[7,3,4,7],[11,3,4,7],[7,10,4,8],[11,10,4,8],[0,18,3,7],[3,18,4,7],[0,25,7,4],[0,29,7,4],[7,18,4,7],[11,18,4,7],[7,25,4,8],[11,25,4,8]],"check":"regression orientation choice #2","expected":[[0,3,7,3],[0,6,7,4],[7,3,4,7],[11,3,4,7],[0,10,7,4],[0,14,7,4],[7,10,8,4],[7,14,8,4],[0,18,7,3],[0,21,7,4],[7,18,4,7],[11,18,4,7],[0,25,7,4],[0,29,7,4],[7,25,8,4],[7,29,8,4]],"passed":false},{"actual":[[3,0,6,6],[9,0,6,6],[3,6,6,6],[9,6,6,6],[15,0,6,6],[15,6,6,6],[21,0,7,6],[21,6,7,6]],"check":"partial repair boundary #1","expected":[[3,0,6,6],[3,6,6,6],[9,0,6,6],[9,6,6,6],[15,0,6,6],[15,6,6,6],[21,0,7,6],[21,6,7,6]],"passed":false},{"actual":[[1,0,3,3],[4,0,3,3],[1,3,3,3],[4,3,3,3],[1,6,3,3],[4,6,3,3],[1,9,3,3],[4,9,3,3],[1,12,3,3],[4,12,3,3],[1,15,3,3],[4,15,3,3],[1,18,3,3],[4,18,3,3],[1,21,3,3],[4,21,3,3]],"check":"partial repair boundary #2","expected":[[1,0,3,3],[1,3,3,3],[4,0,3,3],[4,3,3,3],[1,6,3,3],[1,9,3,3],[4,6,3,3],[4,9,3,3],[1,12,3,3],[1,15,3,3],[4,12,3,3],[4,15,3,3],[1,18,3,3],[1,21,3,3],[4,18,3,3],[4,21,3,3]],"passed":false},{"actual":[[0,0,4,3],[4,0,4,3]],"check":"exactly splittable #1","expected":[[0,0,4,3],[4,0,4,3]],"passed":true},{"actual":[[1,1,4,4],[5,1,5,4]],"check":"odd width #1","expected":[[1,1,4,4],[5,1,5,4]],"passed":true},{"actual":[[2,3,8,10],[10,3,8,10]],"check":"control #1","expected":[[2,3,8,10],[10,3,8,10]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"square at even depth #1\", \"actual\": [[0, 0, 5, 5], [5, 0, 5, 5], [0, 5, 5, 5], [5, 5, 5, 5]], \"expected\": [[0, 0, 5, 5], [0, 5, 5, 5], [5, 0, 5, 5], [5, 5, 5, 5]], \"passed\": false}, {\"check\": \"regression orientation choice #1\", \"actual\": [[0, 5, 3, 6], [3, 5, 4, 6], [0, 11, 3, 6], [3, 11, 4, 6], [0, 17, 3, 6], [3, 17, 4, 6], [0, 23, 3, 7], [3, 23, 4, 7]], \"expected\": [[0, 5, 3, 6], [3, 5, 4, 6], [0, 11, 3, 6], [3, 11, 4, 6], [0, 17, 3, 6], [3, 17, 4, 6], [0, 23, 7, 3], [0, 26, 7, 4]], \"passed\": false}, {\"check\": \"regression orientation choice #2\", \"actual\": [[0, 3, 3, 7], [3, 3, 4, 7], [0, 10, 7, 4], [0, 14, 7, 4], [7, 3, 4, 7], [11, 3, 4, 7], [7, 10, 4, 8], [11, 10, 4, 8], [0, 18, 3, 7], [3, 18, 4, 7], [0, 25, 7, 4], [0, 29, 7, 4], [7, 18, 4, 7], [11, 18, 4, 7], [7, 25, 4, 8], [11, 25, 4, 8]], \"expected\": [[0, 3, 7, 3], [0, 6, 7, 4], [7, 3, 4, 7], [11, 3, 4, 7], [0, 10, 7, 4], [0, 14, 7, 4], [7, 10, 8, 4], [7, 14, 8, 4], [0, 18, 7, 3], [0, 21, 7, 4], [7, 18, 4, 7], [11, 18, 4, 7], [0, 25, 7, 4], [0, 29, 7, 4], [7, 25, 8, 4], [7, 29, 8, 4]], \"passed\": false}, {\"check\": \"partial repair boundary #1\", \"actual\": [[3, 0, 6, 6], [9, 0, 6, 6], [3, 6, 6, 6], [9, 6, 6, 6], [15, 0, 6, 6], [15, 6, 6, 6], [21, 0, 7, 6], [21, 6, 7, 6]], \"expected\": [[3, 0, 6, 6], [3, 6, 6, 6], [9, 0, 6, 6], [9, 6, 6, 6], [15, 0, 6, 6], [15, 6, 6, 6], [21, 0, 7, 6], [21, 6, 7, 6]], \"passed\": false}, {\"check\": \"partial repair boundary #2\", \"actual\": [[1, 0, 3, 3], [4, 0, 3, 3], [1, 3, 3, 3], [4, 3, 3, 3], [1, 6, 3, 3], [4, 6, 3, 3], [1, 9, 3, 3], [4, 9, 3, 3], [1, 12, 3, 3], [4, 12, 3, 3], [1, 15, 3, 3], [4, 15, 3, 3], [1, 18, 3, 3], [4, 18, 3, 3], [1, 21, 3, 3], [4, 21, 3, 3]], \"expected\": [[1, 0, 3, 3], [1, 3, 3, 3], [4, 0, 3, 3], [4, 3, 3, 3], [1, 6, 3, 3], [1, 9, 3, 3], [4, 6, 3, 3], [4, 9, 3, 3], [1, 12, 3, 3], [1, 15, 3, 3], [4, 12, 3, 3], [4, 15, 3, 3], [1, 18, 3, 3], [1, 21, 3, 3], [4, 18, 3, 3], [4, 21, 3, 3]], \"passed\": false}, {\"check\": \"exactly splittable #1\", \"actual\": [[0, 0, 4, 3], [4, 0, 4, 3]], \"expected\": [[0, 0, 4, 3], [4, 0, 4, 3]], \"passed\": true}, {\"check\": \"odd width #1\", \"actual\": [[1, 1, 4, 4], [5, 1, 5, 4]], \"expected\": [[1, 1, 4, 4], [5, 1, 5, 4]], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [[2, 3, 8, 10], [10, 3, 8, 10]], \"expected\": [[2, 3, 8, 10], [10, 3, 8, 10]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.235,"exit_code":1,"observations":[{"actual":[[0,0,5,5],[0,5,5,5],[5,0,5,5],[5,5,5,5]],"check":"square at even depth #1","expected":[[0,0,5,5],[0,5,5,5],[5,0,5,5],[5,5,5,5]],"passed":true},{"actual":[[0,5,3,6],[3,5,4,6],[0,11,3,6],[3,11,4,6],[0,17,3,6],[3,17,4,6],[0,23,3,7],[3,23,4,7]],"check":"regression orientation choice #1","expected":[[0,5,3,6],[3,5,4,6],[0,11,3,6],[3,11,4,6],[0,17,3,6],[3,17,4,6],[0,23,7,3],[0,26,7,4]],"passed":false},{"actual":[[0,3,3,7],[3,3,4,7],[0,10,7,4],[0,14,7,4],[7,3,4,7],[11,3,4,7],[7,10,4,8],[11,10,4,8],[0,18,3,7],[3,18,4,7],[0,25,7,4],[0,29,7,4],[7,18,4,7],[11,18,4,7],[7,25,4,8],[11,25,4,8]],"check":"regression orientation choice #2","expected":[[0,3,7,3],[0,6,7,4],[7,3,4,7],[11,3,4,7],[0,10,7,4],[0,14,7,4],[7,10,8,4],[7,14,8,4],[0,18,7,3],[0,21,7,4],[7,18,4,7],[11,18,4,7],[0,25,7,4],[0,29,7,4],[7,25,8,4],[7,29,8,4]],"passed":false},{"actual":[[3,0,6,6],[3,6,6,6],[9,0,6,6],[9,6,6,6],[15,0,6,6],[15,6,6,6],[21,0,7,6],[21,6,7,6]],"check":"partial repair boundary #1","expected":[[3,0,6,6],[3,6,6,6],[9,0,6,6],[9,6,6,6],[15,0,6,6],[15,6,6,6],[21,0,7,6],[21,6,7,6]],"passed":true},{"actual":[[1,0,3,3],[1,3,3,3],[4,0,3,3],[4,3,3,3],[1,6,3,3],[1,9,3,3],[4,6,3,3],[4,9,3,3],[1,12,3,3],[1,15,3,3],[4,12,3,3],[4,15,3,3],[1,18,3,3],[1,21,3,3],[4,18,3,3],[4,21,3,3]],"check":"partial repair boundary #2","expected":[[1,0,3,3],[1,3,3,3],[4,0,3,3],[4,3,3,3],[1,6,3,3],[1,9,3,3],[4,6,3,3],[4,9,3,3],[1,12,3,3],[1,15,3,3],[4,12,3,3],[4,15,3,3],[1,18,3,3],[1,21,3,3],[4,18,3,3],[4,21,3,3]],"passed":true},{"actual":[[0,0,4,3],[4,0,4,3]],"check":"exactly splittable #1","expected":[[0,0,4,3],[4,0,4,3]],"passed":true},{"actual":[[1,1,4,4],[5,1,5,4]],"check":"odd width #1","expected":[[1,1,4,4],[5,1,5,4]],"passed":true},{"actual":[[2,3,8,10],[10,3,8,10]],"check":"control #1","expected":[[2,3,8,10],[10,3,8,10]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"square at even depth #1\", \"actual\": [[0, 0, 5, 5], [0, 5, 5, 5], [5, 0, 5, 5], [5, 5, 5, 5]], \"expected\": [[0, 0, 5, 5], [0, 5, 5, 5], [5, 0, 5, 5], [5, 5, 5, 5]], \"passed\": true}, {\"check\": \"regression orientation choice #1\", \"actual\": [[0, 5, 3, 6], [3, 5, 4, 6], [0, 11, 3, 6], [3, 11, 4, 6], [0, 17, 3, 6], [3, 17, 4, 6], [0, 23, 3, 7], [3, 23, 4, 7]], \"expected\": [[0, 5, 3, 6], [3, 5, 4, 6], [0, 11, 3, 6], [3, 11, 4, 6], [0, 17, 3, 6], [3, 17, 4, 6], [0, 23, 7, 3], [0, 26, 7, 4]], \"passed\": false}, {\"check\": \"regression orientation choice #2\", \"actual\": [[0, 3, 3, 7], [3, 3, 4, 7], [0, 10, 7, 4], [0, 14, 7, 4], [7, 3, 4, 7], [11, 3, 4, 7], [7, 10, 4, 8], [11, 10, 4, 8], [0, 18, 3, 7], [3, 18, 4, 7], [0, 25, 7, 4], [0, 29, 7, 4], [7, 18, 4, 7], [11, 18, 4, 7], [7, 25, 4, 8], [11, 25, 4, 8]], \"expected\": [[0, 3, 7, 3], [0, 6, 7, 4], [7, 3, 4, 7], [11, 3, 4, 7], [0, 10, 7, 4], [0, 14, 7, 4], [7, 10, 8, 4], [7, 14, 8, 4], [0, 18, 7, 3], [0, 21, 7, 4], [7, 18, 4, 7], [11, 18, 4, 7], [0, 25, 7, 4], [0, 29, 7, 4], [7, 25, 8, 4], [7, 29, 8, 4]], \"passed\": false}, {\"check\": \"partial repair boundary #1\", \"actual\": [[3, 0, 6, 6], [3, 6, 6, 6], [9, 0, 6, 6], [9, 6, 6, 6], [15, 0, 6, 6], [15, 6, 6, 6], [21, 0, 7, 6], [21, 6, 7, 6]], \"expected\": [[3, 0, 6, 6], [3, 6, 6, 6], [9, 0, 6, 6], [9, 6, 6, 6], [15, 0, 6, 6], [15, 6, 6, 6], [21, 0, 7, 6], [21, 6, 7, 6]], \"passed\": true}, {\"check\": \"partial repair boundary #2\", \"actual\": [[1, 0, 3, 3], [1, 3, 3, 3], [4, 0, 3, 3], [4, 3, 3, 3], [1, 6, 3, 3], [1, 9, 3, 3], [4, 6, 3, 3], [4, 9, 3, 3], [1, 12, 3, 3], [1, 15, 3, 3], [4, 12, 3, 3], [4, 15, 3, 3], [1, 18, 3, 3], [1, 21, 3, 3], [4, 18, 3, 3], [4, 21, 3, 3]], \"expected\": [[1, 0, 3, 3], [1, 3, 3, 3], [4, 0, 3, 3], [4, 3, 3, 3], [1, 6, 3, 3], [1, 9, 3, 3], [4, 6, 3, 3], [4, 9, 3, 3], [1, 12, 3, 3], [1, 15, 3, 3], [4, 12, 3, 3], [4, 15, 3, 3], [1, 18, 3, 3], [1, 21, 3, 3], [4, 18, 3, 3], [4, 21, 3, 3]], \"passed\": true}, {\"check\": \"exactly splittable #1\", \"actual\": [[0, 0, 4, 3], [4, 0, 4, 3]], \"expected\": [[0, 0, 4, 3], [4, 0, 4, 3]], \"passed\": true}, {\"check\": \"odd width #1\", \"actual\": [[1, 1, 4, 4], [5, 1, 5, 4]], \"expected\": [[1, 1, 4, 4], [5, 1, 5, 4]], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [[2, 3, 8, 10], [10, 3, 8, 10]], \"expected\": [[2, 3, 8, 10], [10, 3, 8, 10]], \"passed\": true}], \"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."}}