{"abstract":"A rejected candidate prevents later valid rooms from being placed.","category":"Procedural level generation constraints","checks":8,"contract":"Candidates [x, y, w, h] are tried in order. A room needs w >= 3 and h >= 3, must stay inside a one-tile border (x >= 1, y >= 1, x+w <= width-1, y+h <= height-1) and must keep at least pad empty tiles to every accepted room on both axes (rooms conflict when their pad-expanded extents overlap). Returns indices of accepted candidates.","evaluation_group":"w2-procedural-level-generation-constraints-room-placement","failed_approach":"Keeping only the last accepted room lets new rooms overlap older ones.","family":"w2-procedural-level-generation-constraints-room-placement-accepted-set-bookkeeping","id":"FA-86361","implementations":{"attempt":{"sha256":"b8d2249a8747637890e15bdd6c52428ca6977bab85f388a5903cbebd177c1109","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(width, height, candidates, pad):\n    placed = []\n    out = []\n    for i, (x, y, w, h) in enumerate(candidates):\n        if w < 3 or h < 3:\n            continue\n        if x < 1 or y < 1 or x + w > width - 1 or y + h > height - 1:\n            continue\n        ok = True\n        for px, py, pw, ph in placed:\n            if x < px + pw + pad and px < x + w + pad and y < py + ph + pad and py < y + h + pad:\n                ok = False\n                break\n        if ok:\n            placed = [(x, y, w, h)]\n            out.append(i)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('fault site accepted set bookkeeping #1',\n   [25,\n    23,\n    [[5, 9, 3, 6],\n     [8, 10, 5, 6],\n     [9, 14, 5, 4],\n     [-1, 1, 3, 6],\n     [-1, 14, 2, 3],\n     [17, 18, 4, 2],\n     [4, 20, 3, 4]],\n    1],\n   [0, 2]),\n  ('fault site accepted set bookkeeping #2',\n   [29,\n    11,\n    [[19, 6, 4, 6],\n     [9, 5, 3, 4],\n     [1, 1, 3, 2],\n     [5, 4, 5, 6],\n     [14, 0, 8, 3],\n     [1, 8, 5, 6],\n     [5, 5, 3, 3],\n     [7, 2, 2, 3]],\n    1],\n   [1, 6]),\n  ('partial repair boundary #1',\n   [11, 28, [[1, 8, 8, 4], [5, 14, 3, 3], [1, 4, 5, 3], [7, 23, 2, 2], [-1, 11, 5, 2]], 2],\n   [0, 1]),\n  ('partial repair boundary #2',\n   [23,\n    15,\n    [[20, -1, 2, 4],\n     [3, 6, 4, 6],\n     [10, 5, 8, 6],\n     [18, 10, 2, 4],\n     [2, 4, 4, 6],\n     [2, 13, 3, 4],\n     [1, 10, 4, 3],\n     [19, 1, 3, 4]],\n    0],\n   [1, 2, 7]),\n  ('touching border tile #1', [10, 10, [[1, 1, 8, 8]], 1], [0]),\n  ('rooms exactly pad apart #1', [20, 10, [[1, 1, 4, 4], [6, 1, 4, 4]], 1], [0, 1]),\n  ('thin corridor room #1', [20, 20, [[2, 2, 2, 9], [2, 2, 5, 5]], 0], [1]),\n  ('control #1',\n   [13,\n    21,\n    [[9, 8, 5, 3], [11, 14, 8, 3], [7, 15, 3, 2], [-1, 10, 8, 6], [0, 3, 3, 3], [10, 0, 5, 6], [8, 13, 2, 4]],\n    2],\n   [])],\n [('regression accepted set bookkeeping #1',\n   [28,\n    27,\n    [[15, 2, 4, 6],\n     [17, 17, 3, 3],\n     [0, 24, 4, 2],\n     [12, 1, 4, 4],\n     [19, 7, 2, 3],\n     [10, 6, 8, 6],\n     [9, 4, 5, 4],\n     [1, 8, 3, 6]],\n    1],\n   [0, 1, 6, 7]),\n  ('fault site accepted set bookkeeping #1',\n   [16,\n    27,\n    [[9, 19, 8, 6],\n     [0, 23, 3, 3],\n     [9, 16, 2, 4],\n     [8, 4, 5, 4],\n     [2, 1, 8, 6],\n     [6, 19, 4, 6],\n     [13, 10, 8, 2],\n     [4, 1, 3, 6]],\n    0],\n   [3, 5, 7]),\n  ('partial repair boundary #1',\n   [28,\n    10,\n    [[1, 8, 5, 4],\n     [18, 5, 5, 6],\n     [22, 3, 3, 4],\n     [19, 2, 4, 2],\n     [3, 1, 5, 4],\n     [16, 3, 4, 6],\n     [16, 0, 4, 2],\n     [1, 2, 3, 6]],\n    1],\n   [2, 4, 5]),\n  ('partial repair boundary #2',\n   [26,\n    20,\n    [[4, 11, 5, 4],\n     [2, 5, 8, 3],\n     [2, 2, 4, 2],\n     [2, 11, 4, 6],\n     [24, 14, 4, 2],\n     [24, 11, 2, 4],\n     [3, 10, 8, 6],\n     [1, 9, 2, 6]],\n    2],\n   [0, 1]),\n  ('thin corridor room #1', [20, 20, [[2, 2, 2, 9], [2, 2, 5, 5]], 0], [1]),\n  ('touching border tile #1', [10, 10, [[1, 1, 8, 8]], 1], [0]),\n  ('control #1',\n   [13,\n    21,\n    [[9, 8, 5, 3], [11, 14, 8, 3], [7, 15, 3, 2], [-1, 10, 8, 6], [0, 3, 3, 3], [10, 0, 5, 6], [8, 13, 2, 4]],\n    2],\n   []),\n  ('control #2',\n   [30, 11, [[-1, 1, 2, 2], [24, -1, 5, 3], [16, 4, 5, 6], [3, 1, 2, 6], [26, 2, 2, 3], [5, 9, 8, 2]], 0],\n   [2])],\n [('fault site accepted set bookkeeping #1',\n   [30,\n    27,\n    [[8, 21, 5, 3],\n     [25, 10, 4, 2],\n     [23, 24, 8, 4],\n     [12, 18, 3, 6],\n     [15, 14, 5, 2],\n     [4, 17, 8, 3],\n     [2, 7, 8, 4]],\n    1],\n   [0, 5, 6]),\n  ('fault site accepted set bookkeeping #2',\n   [25,\n    23,\n    [[5, 9, 3, 6],\n     [8, 10, 5, 6],\n     [9, 14, 5, 4],\n     [-1, 1, 3, 6],\n     [-1, 14, 2, 3],\n     [17, 18, 4, 2],\n     [4, 20, 3, 4]],\n    1],\n   [0, 2]),\n  ('regression accepted set bookkeeping #1',\n   [28,\n    27,\n    [[15, 2, 4, 6],\n     [17, 17, 3, 3],\n     [0, 24, 4, 2],\n     [12, 1, 4, 4],\n     [19, 7, 2, 3],\n     [10, 6, 8, 6],\n     [9, 4, 5, 4],\n     [1, 8, 3, 6]],\n    1],\n   [0, 1, 6, 7]),\n  ('partial repair boundary #1',\n   [29, 21, [[7, 17, 8, 3], [8, 3, 8, 6], [2, 2, 8, 4], [4, 13, 8, 6], [21, 1, 2, 3]], 1],\n   [0, 1]),\n  ('rooms exactly pad apart #1', [20, 10, [[1, 1, 4, 4], [6, 1, 4, 4]], 1], [0, 1]),\n  ('thin corridor room #1', [20, 20, [[2, 2, 2, 9], [2, 2, 5, 5]], 0], [1]),\n  ('control #1',\n   [30, 11, [[-1, 1, 2, 2], [24, -1, 5, 3], [16, 4, 5, 6], [3, 1, 2, 6], [26, 2, 2, 3], [5, 9, 8, 2]], 0],\n   [2]),\n  ('control #2',\n   [19, 27, [[6, 2, 3, 2], [4, 23, 5, 4], [4, 20, 2, 3], [12, 4, 8, 2], [10, 14, 8, 6]], 1],\n   [4])],\n [('fault site accepted set bookkeeping #1',\n   [29,\n    11,\n    [[19, 6, 4, 6],\n     [9, 5, 3, 4],\n     [1, 1, 3, 2],\n     [5, 4, 5, 6],\n     [14, 0, 8, 3],\n     [1, 8, 5, 6],\n     [5, 5, 3, 3],\n     [7, 2, 2, 3]],\n    1],\n   [1, 6]),\n  ('regression accepted set bookkeeping #1',\n   [28,\n    27,\n    [[15, 2, 4, 6],\n     [17, 17, 3, 3],\n     [0, 24, 4, 2],\n     [12, 1, 4, 4],\n     [19, 7, 2, 3],\n     [10, 6, 8, 6],\n     [9, 4, 5, 4],\n     [1, 8, 3, 6]],\n    1],\n   [0, 1, 6, 7]),\n  ('partial repair boundary #1',\n   [29, 29, [[23, 24, 4, 2], [27, 5, 2, 2], [3, 5, 3, 3], [24, 5, 3, 3], [26, 22, 2, 6], [1, 3, 5, 3]], 1],\n   [2, 3]),\n  ('partial repair boundary #2',\n   [28,\n    21,\n    [[18, 4, 3, 6],\n     [19, 16, 4, 4],\n     [12, -1, 4, 4],\n     [2, 16, 8, 4],\n     [18, 15, 3, 4],\n     [5, 19, 4, 2],\n     [1, 1, 5, 3]],\n    1],\n   [0, 1, 3, 6]),\n  ('touching border tile #1', [10, 10, [[1, 1, 8, 8]], 1], [0]),\n  ('rooms exactly pad apart #1', [20, 10, [[1, 1, 4, 4], [6, 1, 4, 4]], 1], [0, 1]),\n  ('control #1', [15, 13, [[6, 11, 5, 6], [-1, 3, 2, 4]], 1], []),\n  ('control #2', [9, 21, [[1, 11, 2, 4], [1, 3, 5, 2], [3, 3, 8, 6], [-1, 5, 4, 3]], 1], [])],\n [('fault site accepted set bookkeeping #1',\n   [16,\n    27,\n    [[9, 19, 8, 6],\n     [0, 23, 3, 3],\n     [9, 16, 2, 4],\n     [8, 4, 5, 4],\n     [2, 1, 8, 6],\n     [6, 19, 4, 6],\n     [13, 10, 8, 2],\n     [4, 1, 3, 6]],\n    0],\n   [3, 5, 7]),\n  ('fault site accepted set bookkeeping #2',\n   [30,\n    27,\n    [[8, 21, 5, 3],\n     [25, 10, 4, 2],\n     [23, 24, 8, 4],\n     [12, 18, 3, 6],\n     [15, 14, 5, 2],\n     [4, 17, 8, 3],\n     [2, 7, 8, 4]],\n    1],\n   [0, 5, 6]),\n  ('partial repair boundary #1',\n   [20,\n    22,\n    [[0, 11, 8, 3],\n     [12, 9, 2, 4],\n     [9, 1, 5, 4],\n     [5, 8, 4, 6],\n     [1, 17, 8, 4],\n     [3, 4, 3, 4],\n     [5, 14, 3, 2],\n     [5, 17, 2, 4]],\n    1],\n   [2, 3, 4]),\n  ('partial repair boundary #2',\n   [22,\n    20,\n    [[12, 9, 8, 2],\n     [20, 18, 8, 4],\n     [3, 15, 8, 4],\n     [16, 7, 5, 6],\n     [2, 13, 4, 4],\n     [8, 16, 2, 3],\n     [3, 16, 8, 4]],\n    2],\n   [2, 3]),\n  ('thin corridor room #1', [20, 20, [[2, 2, 2, 9], [2, 2, 5, 5]], 0], [1]),\n  ('touching border tile #1', [10, 10, [[1, 1, 8, 8]], 1], [0]),\n  ('control #1',\n   [27,\n    21,\n    [[17, 14, 4, 3],\n     [16, 17, 4, 3],\n     [23, -1, 5, 3],\n     [21, -1, 4, 4],\n     [19, 6, 8, 6],\n     [7, 11, 3, 3],\n     [3, 2, 5, 2],\n     [4, -1, 5, 3]],\n    0],\n   [0, 1, 5]),\n  ('control #2', [26, 13, [[7, 10, 8, 4], [22, -1, 3, 6], [3, 3, 4, 6], [17, 0, 8, 2]], 1], [2])]]\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":"7831c0e99a771cdded859c06793a9ba3d4ed7a7f937dc04a62d80cbef75b0aa6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(width, height, candidates, pad):\n    placed = []\n    out = []\n    for i, (x, y, w, h) in enumerate(candidates):\n        if w < 3 or h < 3:\n            continue\n        if x < 1 or y < 1 or x + w > width - 1 or y + h > height - 1:\n            continue\n        ok = True\n        for px, py, pw, ph in placed:\n            if x < px + pw + pad and px < x + w + pad and y < py + ph + pad and py < y + h + pad:\n                ok = False\n                break\n        placed.append((x, y, w, h))\n        if ok:\n            out.append(i)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('fault site accepted set bookkeeping #1',\n   [25,\n    23,\n    [[5, 9, 3, 6],\n     [8, 10, 5, 6],\n     [9, 14, 5, 4],\n     [-1, 1, 3, 6],\n     [-1, 14, 2, 3],\n     [17, 18, 4, 2],\n     [4, 20, 3, 4]],\n    1],\n   [0, 2]),\n  ('fault site accepted set bookkeeping #2',\n   [29,\n    11,\n    [[19, 6, 4, 6],\n     [9, 5, 3, 4],\n     [1, 1, 3, 2],\n     [5, 4, 5, 6],\n     [14, 0, 8, 3],\n     [1, 8, 5, 6],\n     [5, 5, 3, 3],\n     [7, 2, 2, 3]],\n    1],\n   [1, 6]),\n  ('partial repair boundary #1',\n   [11, 28, [[1, 8, 8, 4], [5, 14, 3, 3], [1, 4, 5, 3], [7, 23, 2, 2], [-1, 11, 5, 2]], 2],\n   [0, 1]),\n  ('partial repair boundary #2',\n   [23,\n    15,\n    [[20, -1, 2, 4],\n     [3, 6, 4, 6],\n     [10, 5, 8, 6],\n     [18, 10, 2, 4],\n     [2, 4, 4, 6],\n     [2, 13, 3, 4],\n     [1, 10, 4, 3],\n     [19, 1, 3, 4]],\n    0],\n   [1, 2, 7]),\n  ('touching border tile #1', [10, 10, [[1, 1, 8, 8]], 1], [0]),\n  ('rooms exactly pad apart #1', [20, 10, [[1, 1, 4, 4], [6, 1, 4, 4]], 1], [0, 1]),\n  ('thin corridor room #1', [20, 20, [[2, 2, 2, 9], [2, 2, 5, 5]], 0], [1]),\n  ('control #1',\n   [13,\n    21,\n    [[9, 8, 5, 3], [11, 14, 8, 3], [7, 15, 3, 2], [-1, 10, 8, 6], [0, 3, 3, 3], [10, 0, 5, 6], [8, 13, 2, 4]],\n    2],\n   [])],\n [('regression accepted set bookkeeping #1',\n   [28,\n    27,\n    [[15, 2, 4, 6],\n     [17, 17, 3, 3],\n     [0, 24, 4, 2],\n     [12, 1, 4, 4],\n     [19, 7, 2, 3],\n     [10, 6, 8, 6],\n     [9, 4, 5, 4],\n     [1, 8, 3, 6]],\n    1],\n   [0, 1, 6, 7]),\n  ('fault site accepted set bookkeeping #1',\n   [16,\n    27,\n    [[9, 19, 8, 6],\n     [0, 23, 3, 3],\n     [9, 16, 2, 4],\n     [8, 4, 5, 4],\n     [2, 1, 8, 6],\n     [6, 19, 4, 6],\n     [13, 10, 8, 2],\n     [4, 1, 3, 6]],\n    0],\n   [3, 5, 7]),\n  ('partial repair boundary #1',\n   [28,\n    10,\n    [[1, 8, 5, 4],\n     [18, 5, 5, 6],\n     [22, 3, 3, 4],\n     [19, 2, 4, 2],\n     [3, 1, 5, 4],\n     [16, 3, 4, 6],\n     [16, 0, 4, 2],\n     [1, 2, 3, 6]],\n    1],\n   [2, 4, 5]),\n  ('partial repair boundary #2',\n   [26,\n    20,\n    [[4, 11, 5, 4],\n     [2, 5, 8, 3],\n     [2, 2, 4, 2],\n     [2, 11, 4, 6],\n     [24, 14, 4, 2],\n     [24, 11, 2, 4],\n     [3, 10, 8, 6],\n     [1, 9, 2, 6]],\n    2],\n   [0, 1]),\n  ('thin corridor room #1', [20, 20, [[2, 2, 2, 9], [2, 2, 5, 5]], 0], [1]),\n  ('touching border tile #1', [10, 10, [[1, 1, 8, 8]], 1], [0]),\n  ('control #1',\n   [13,\n    21,\n    [[9, 8, 5, 3], [11, 14, 8, 3], [7, 15, 3, 2], [-1, 10, 8, 6], [0, 3, 3, 3], [10, 0, 5, 6], [8, 13, 2, 4]],\n    2],\n   []),\n  ('control #2',\n   [30, 11, [[-1, 1, 2, 2], [24, -1, 5, 3], [16, 4, 5, 6], [3, 1, 2, 6], [26, 2, 2, 3], [5, 9, 8, 2]], 0],\n   [2])],\n [('fault site accepted set bookkeeping #1',\n   [30,\n    27,\n    [[8, 21, 5, 3],\n     [25, 10, 4, 2],\n     [23, 24, 8, 4],\n     [12, 18, 3, 6],\n     [15, 14, 5, 2],\n     [4, 17, 8, 3],\n     [2, 7, 8, 4]],\n    1],\n   [0, 5, 6]),\n  ('fault site accepted set bookkeeping #2',\n   [25,\n    23,\n    [[5, 9, 3, 6],\n     [8, 10, 5, 6],\n     [9, 14, 5, 4],\n     [-1, 1, 3, 6],\n     [-1, 14, 2, 3],\n     [17, 18, 4, 2],\n     [4, 20, 3, 4]],\n    1],\n   [0, 2]),\n  ('regression accepted set bookkeeping #1',\n   [28,\n    27,\n    [[15, 2, 4, 6],\n     [17, 17, 3, 3],\n     [0, 24, 4, 2],\n     [12, 1, 4, 4],\n     [19, 7, 2, 3],\n     [10, 6, 8, 6],\n     [9, 4, 5, 4],\n     [1, 8, 3, 6]],\n    1],\n   [0, 1, 6, 7]),\n  ('partial repair boundary #1',\n   [29, 21, [[7, 17, 8, 3], [8, 3, 8, 6], [2, 2, 8, 4], [4, 13, 8, 6], [21, 1, 2, 3]], 1],\n   [0, 1]),\n  ('rooms exactly pad apart #1', [20, 10, [[1, 1, 4, 4], [6, 1, 4, 4]], 1], [0, 1]),\n  ('thin corridor room #1', [20, 20, [[2, 2, 2, 9], [2, 2, 5, 5]], 0], [1]),\n  ('control #1',\n   [30, 11, [[-1, 1, 2, 2], [24, -1, 5, 3], [16, 4, 5, 6], [3, 1, 2, 6], [26, 2, 2, 3], [5, 9, 8, 2]], 0],\n   [2]),\n  ('control #2',\n   [19, 27, [[6, 2, 3, 2], [4, 23, 5, 4], [4, 20, 2, 3], [12, 4, 8, 2], [10, 14, 8, 6]], 1],\n   [4])],\n [('fault site accepted set bookkeeping #1',\n   [29,\n    11,\n    [[19, 6, 4, 6],\n     [9, 5, 3, 4],\n     [1, 1, 3, 2],\n     [5, 4, 5, 6],\n     [14, 0, 8, 3],\n     [1, 8, 5, 6],\n     [5, 5, 3, 3],\n     [7, 2, 2, 3]],\n    1],\n   [1, 6]),\n  ('regression accepted set bookkeeping #1',\n   [28,\n    27,\n    [[15, 2, 4, 6],\n     [17, 17, 3, 3],\n     [0, 24, 4, 2],\n     [12, 1, 4, 4],\n     [19, 7, 2, 3],\n     [10, 6, 8, 6],\n     [9, 4, 5, 4],\n     [1, 8, 3, 6]],\n    1],\n   [0, 1, 6, 7]),\n  ('partial repair boundary #1',\n   [29, 29, [[23, 24, 4, 2], [27, 5, 2, 2], [3, 5, 3, 3], [24, 5, 3, 3], [26, 22, 2, 6], [1, 3, 5, 3]], 1],\n   [2, 3]),\n  ('partial repair boundary #2',\n   [28,\n    21,\n    [[18, 4, 3, 6],\n     [19, 16, 4, 4],\n     [12, -1, 4, 4],\n     [2, 16, 8, 4],\n     [18, 15, 3, 4],\n     [5, 19, 4, 2],\n     [1, 1, 5, 3]],\n    1],\n   [0, 1, 3, 6]),\n  ('touching border tile #1', [10, 10, [[1, 1, 8, 8]], 1], [0]),\n  ('rooms exactly pad apart #1', [20, 10, [[1, 1, 4, 4], [6, 1, 4, 4]], 1], [0, 1]),\n  ('control #1', [15, 13, [[6, 11, 5, 6], [-1, 3, 2, 4]], 1], []),\n  ('control #2', [9, 21, [[1, 11, 2, 4], [1, 3, 5, 2], [3, 3, 8, 6], [-1, 5, 4, 3]], 1], [])],\n [('fault site accepted set bookkeeping #1',\n   [16,\n    27,\n    [[9, 19, 8, 6],\n     [0, 23, 3, 3],\n     [9, 16, 2, 4],\n     [8, 4, 5, 4],\n     [2, 1, 8, 6],\n     [6, 19, 4, 6],\n     [13, 10, 8, 2],\n     [4, 1, 3, 6]],\n    0],\n   [3, 5, 7]),\n  ('fault site accepted set bookkeeping #2',\n   [30,\n    27,\n    [[8, 21, 5, 3],\n     [25, 10, 4, 2],\n     [23, 24, 8, 4],\n     [12, 18, 3, 6],\n     [15, 14, 5, 2],\n     [4, 17, 8, 3],\n     [2, 7, 8, 4]],\n    1],\n   [0, 5, 6]),\n  ('partial repair boundary #1',\n   [20,\n    22,\n    [[0, 11, 8, 3],\n     [12, 9, 2, 4],\n     [9, 1, 5, 4],\n     [5, 8, 4, 6],\n     [1, 17, 8, 4],\n     [3, 4, 3, 4],\n     [5, 14, 3, 2],\n     [5, 17, 2, 4]],\n    1],\n   [2, 3, 4]),\n  ('partial repair boundary #2',\n   [22,\n    20,\n    [[12, 9, 8, 2],\n     [20, 18, 8, 4],\n     [3, 15, 8, 4],\n     [16, 7, 5, 6],\n     [2, 13, 4, 4],\n     [8, 16, 2, 3],\n     [3, 16, 8, 4]],\n    2],\n   [2, 3]),\n  ('thin corridor room #1', [20, 20, [[2, 2, 2, 9], [2, 2, 5, 5]], 0], [1]),\n  ('touching border tile #1', [10, 10, [[1, 1, 8, 8]], 1], [0]),\n  ('control #1',\n   [27,\n    21,\n    [[17, 14, 4, 3],\n     [16, 17, 4, 3],\n     [23, -1, 5, 3],\n     [21, -1, 4, 4],\n     [19, 6, 8, 6],\n     [7, 11, 3, 3],\n     [3, 2, 5, 2],\n     [4, -1, 5, 3]],\n    0],\n   [0, 1, 5]),\n  ('control #2', [26, 13, [[7, 10, 8, 4], [22, -1, 3, 6], [3, 3, 4, 6], [17, 0, 8, 2]], 1], [2])]]\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"},"fixed":{"sha256":"22c603596dd289edb1c3d10dd714c8ee35c384135501762c27cec5fb06373121","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(width, height, candidates, pad):\n    placed = []\n    out = []\n    for i, (x, y, w, h) in enumerate(candidates):\n        if w < 3 or h < 3:\n            continue\n        if x < 1 or y < 1 or x + w > width - 1 or y + h > height - 1:\n            continue\n        ok = True\n        for px, py, pw, ph in placed:\n            if x < px + pw + pad and px < x + w + pad and y < py + ph + pad and py < y + h + pad:\n                ok = False\n                break\n        if ok:\n            placed.append((x, y, w, h))\n            out.append(i)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('fault site accepted set bookkeeping #1',\n   [25,\n    23,\n    [[5, 9, 3, 6],\n     [8, 10, 5, 6],\n     [9, 14, 5, 4],\n     [-1, 1, 3, 6],\n     [-1, 14, 2, 3],\n     [17, 18, 4, 2],\n     [4, 20, 3, 4]],\n    1],\n   [0, 2]),\n  ('fault site accepted set bookkeeping #2',\n   [29,\n    11,\n    [[19, 6, 4, 6],\n     [9, 5, 3, 4],\n     [1, 1, 3, 2],\n     [5, 4, 5, 6],\n     [14, 0, 8, 3],\n     [1, 8, 5, 6],\n     [5, 5, 3, 3],\n     [7, 2, 2, 3]],\n    1],\n   [1, 6]),\n  ('partial repair boundary #1',\n   [11, 28, [[1, 8, 8, 4], [5, 14, 3, 3], [1, 4, 5, 3], [7, 23, 2, 2], [-1, 11, 5, 2]], 2],\n   [0, 1]),\n  ('partial repair boundary #2',\n   [23,\n    15,\n    [[20, -1, 2, 4],\n     [3, 6, 4, 6],\n     [10, 5, 8, 6],\n     [18, 10, 2, 4],\n     [2, 4, 4, 6],\n     [2, 13, 3, 4],\n     [1, 10, 4, 3],\n     [19, 1, 3, 4]],\n    0],\n   [1, 2, 7]),\n  ('touching border tile #1', [10, 10, [[1, 1, 8, 8]], 1], [0]),\n  ('rooms exactly pad apart #1', [20, 10, [[1, 1, 4, 4], [6, 1, 4, 4]], 1], [0, 1]),\n  ('thin corridor room #1', [20, 20, [[2, 2, 2, 9], [2, 2, 5, 5]], 0], [1]),\n  ('control #1',\n   [13,\n    21,\n    [[9, 8, 5, 3], [11, 14, 8, 3], [7, 15, 3, 2], [-1, 10, 8, 6], [0, 3, 3, 3], [10, 0, 5, 6], [8, 13, 2, 4]],\n    2],\n   [])],\n [('regression accepted set bookkeeping #1',\n   [28,\n    27,\n    [[15, 2, 4, 6],\n     [17, 17, 3, 3],\n     [0, 24, 4, 2],\n     [12, 1, 4, 4],\n     [19, 7, 2, 3],\n     [10, 6, 8, 6],\n     [9, 4, 5, 4],\n     [1, 8, 3, 6]],\n    1],\n   [0, 1, 6, 7]),\n  ('fault site accepted set bookkeeping #1',\n   [16,\n    27,\n    [[9, 19, 8, 6],\n     [0, 23, 3, 3],\n     [9, 16, 2, 4],\n     [8, 4, 5, 4],\n     [2, 1, 8, 6],\n     [6, 19, 4, 6],\n     [13, 10, 8, 2],\n     [4, 1, 3, 6]],\n    0],\n   [3, 5, 7]),\n  ('partial repair boundary #1',\n   [28,\n    10,\n    [[1, 8, 5, 4],\n     [18, 5, 5, 6],\n     [22, 3, 3, 4],\n     [19, 2, 4, 2],\n     [3, 1, 5, 4],\n     [16, 3, 4, 6],\n     [16, 0, 4, 2],\n     [1, 2, 3, 6]],\n    1],\n   [2, 4, 5]),\n  ('partial repair boundary #2',\n   [26,\n    20,\n    [[4, 11, 5, 4],\n     [2, 5, 8, 3],\n     [2, 2, 4, 2],\n     [2, 11, 4, 6],\n     [24, 14, 4, 2],\n     [24, 11, 2, 4],\n     [3, 10, 8, 6],\n     [1, 9, 2, 6]],\n    2],\n   [0, 1]),\n  ('thin corridor room #1', [20, 20, [[2, 2, 2, 9], [2, 2, 5, 5]], 0], [1]),\n  ('touching border tile #1', [10, 10, [[1, 1, 8, 8]], 1], [0]),\n  ('control #1',\n   [13,\n    21,\n    [[9, 8, 5, 3], [11, 14, 8, 3], [7, 15, 3, 2], [-1, 10, 8, 6], [0, 3, 3, 3], [10, 0, 5, 6], [8, 13, 2, 4]],\n    2],\n   []),\n  ('control #2',\n   [30, 11, [[-1, 1, 2, 2], [24, -1, 5, 3], [16, 4, 5, 6], [3, 1, 2, 6], [26, 2, 2, 3], [5, 9, 8, 2]], 0],\n   [2])],\n [('fault site accepted set bookkeeping #1',\n   [30,\n    27,\n    [[8, 21, 5, 3],\n     [25, 10, 4, 2],\n     [23, 24, 8, 4],\n     [12, 18, 3, 6],\n     [15, 14, 5, 2],\n     [4, 17, 8, 3],\n     [2, 7, 8, 4]],\n    1],\n   [0, 5, 6]),\n  ('fault site accepted set bookkeeping #2',\n   [25,\n    23,\n    [[5, 9, 3, 6],\n     [8, 10, 5, 6],\n     [9, 14, 5, 4],\n     [-1, 1, 3, 6],\n     [-1, 14, 2, 3],\n     [17, 18, 4, 2],\n     [4, 20, 3, 4]],\n    1],\n   [0, 2]),\n  ('regression accepted set bookkeeping #1',\n   [28,\n    27,\n    [[15, 2, 4, 6],\n     [17, 17, 3, 3],\n     [0, 24, 4, 2],\n     [12, 1, 4, 4],\n     [19, 7, 2, 3],\n     [10, 6, 8, 6],\n     [9, 4, 5, 4],\n     [1, 8, 3, 6]],\n    1],\n   [0, 1, 6, 7]),\n  ('partial repair boundary #1',\n   [29, 21, [[7, 17, 8, 3], [8, 3, 8, 6], [2, 2, 8, 4], [4, 13, 8, 6], [21, 1, 2, 3]], 1],\n   [0, 1]),\n  ('rooms exactly pad apart #1', [20, 10, [[1, 1, 4, 4], [6, 1, 4, 4]], 1], [0, 1]),\n  ('thin corridor room #1', [20, 20, [[2, 2, 2, 9], [2, 2, 5, 5]], 0], [1]),\n  ('control #1',\n   [30, 11, [[-1, 1, 2, 2], [24, -1, 5, 3], [16, 4, 5, 6], [3, 1, 2, 6], [26, 2, 2, 3], [5, 9, 8, 2]], 0],\n   [2]),\n  ('control #2',\n   [19, 27, [[6, 2, 3, 2], [4, 23, 5, 4], [4, 20, 2, 3], [12, 4, 8, 2], [10, 14, 8, 6]], 1],\n   [4])],\n [('fault site accepted set bookkeeping #1',\n   [29,\n    11,\n    [[19, 6, 4, 6],\n     [9, 5, 3, 4],\n     [1, 1, 3, 2],\n     [5, 4, 5, 6],\n     [14, 0, 8, 3],\n     [1, 8, 5, 6],\n     [5, 5, 3, 3],\n     [7, 2, 2, 3]],\n    1],\n   [1, 6]),\n  ('regression accepted set bookkeeping #1',\n   [28,\n    27,\n    [[15, 2, 4, 6],\n     [17, 17, 3, 3],\n     [0, 24, 4, 2],\n     [12, 1, 4, 4],\n     [19, 7, 2, 3],\n     [10, 6, 8, 6],\n     [9, 4, 5, 4],\n     [1, 8, 3, 6]],\n    1],\n   [0, 1, 6, 7]),\n  ('partial repair boundary #1',\n   [29, 29, [[23, 24, 4, 2], [27, 5, 2, 2], [3, 5, 3, 3], [24, 5, 3, 3], [26, 22, 2, 6], [1, 3, 5, 3]], 1],\n   [2, 3]),\n  ('partial repair boundary #2',\n   [28,\n    21,\n    [[18, 4, 3, 6],\n     [19, 16, 4, 4],\n     [12, -1, 4, 4],\n     [2, 16, 8, 4],\n     [18, 15, 3, 4],\n     [5, 19, 4, 2],\n     [1, 1, 5, 3]],\n    1],\n   [0, 1, 3, 6]),\n  ('touching border tile #1', [10, 10, [[1, 1, 8, 8]], 1], [0]),\n  ('rooms exactly pad apart #1', [20, 10, [[1, 1, 4, 4], [6, 1, 4, 4]], 1], [0, 1]),\n  ('control #1', [15, 13, [[6, 11, 5, 6], [-1, 3, 2, 4]], 1], []),\n  ('control #2', [9, 21, [[1, 11, 2, 4], [1, 3, 5, 2], [3, 3, 8, 6], [-1, 5, 4, 3]], 1], [])],\n [('fault site accepted set bookkeeping #1',\n   [16,\n    27,\n    [[9, 19, 8, 6],\n     [0, 23, 3, 3],\n     [9, 16, 2, 4],\n     [8, 4, 5, 4],\n     [2, 1, 8, 6],\n     [6, 19, 4, 6],\n     [13, 10, 8, 2],\n     [4, 1, 3, 6]],\n    0],\n   [3, 5, 7]),\n  ('fault site accepted set bookkeeping #2',\n   [30,\n    27,\n    [[8, 21, 5, 3],\n     [25, 10, 4, 2],\n     [23, 24, 8, 4],\n     [12, 18, 3, 6],\n     [15, 14, 5, 2],\n     [4, 17, 8, 3],\n     [2, 7, 8, 4]],\n    1],\n   [0, 5, 6]),\n  ('partial repair boundary #1',\n   [20,\n    22,\n    [[0, 11, 8, 3],\n     [12, 9, 2, 4],\n     [9, 1, 5, 4],\n     [5, 8, 4, 6],\n     [1, 17, 8, 4],\n     [3, 4, 3, 4],\n     [5, 14, 3, 2],\n     [5, 17, 2, 4]],\n    1],\n   [2, 3, 4]),\n  ('partial repair boundary #2',\n   [22,\n    20,\n    [[12, 9, 8, 2],\n     [20, 18, 8, 4],\n     [3, 15, 8, 4],\n     [16, 7, 5, 6],\n     [2, 13, 4, 4],\n     [8, 16, 2, 3],\n     [3, 16, 8, 4]],\n    2],\n   [2, 3]),\n  ('thin corridor room #1', [20, 20, [[2, 2, 2, 9], [2, 2, 5, 5]], 0], [1]),\n  ('touching border tile #1', [10, 10, [[1, 1, 8, 8]], 1], [0]),\n  ('control #1',\n   [27,\n    21,\n    [[17, 14, 4, 3],\n     [16, 17, 4, 3],\n     [23, -1, 5, 3],\n     [21, -1, 4, 4],\n     [19, 6, 8, 6],\n     [7, 11, 3, 3],\n     [3, 2, 5, 2],\n     [4, -1, 5, 3]],\n    0],\n   [0, 1, 5]),\n  ('control #2', [26, 13, [[7, 10, 8, 4], [22, -1, 3, 6], [3, 3, 4, 6], [17, 0, 8, 2]], 1], [2])]]\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-room-placement-accepted-set-bookkeeping","generated_at":"2026-09-29T14:50:48.868106+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.","repair":"Restore `if ok:\n        placed.append((x, y, w, h))\n        out.append(i)` at the accepted set bookkeeping step.","root_cause":"Every candidate that reaches the overlap stage is recorded as an obstacle, even rejected ones.","sha256":"c3d558374a948b9d84f90b74102a03d284e006a90c29c2adcf71c61bd11c7f22","title":"Room placement with padding: Rejected rooms still block space · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.889,"exit_code":1,"observations":[{"actual":[0,2],"check":"fault site accepted set bookkeeping #1","expected":[0,2],"passed":true},{"actual":[1,6],"check":"fault site accepted set bookkeeping #2","expected":[1,6],"passed":true},{"actual":[0,1,2],"check":"partial repair boundary #1","expected":[0,1],"passed":false},{"actual":[1,2,4,6,7],"check":"partial repair boundary #2","expected":[1,2,7],"passed":false},{"actual":[0],"check":"touching border tile #1","expected":[0],"passed":true},{"actual":[0,1],"check":"rooms exactly pad apart #1","expected":[0,1],"passed":true},{"actual":[1],"check":"thin corridor room #1","expected":[1],"passed":true},{"actual":[],"check":"control #1","expected":[],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fault site accepted set bookkeeping #1\", \"actual\": [0, 2], \"expected\": [0, 2], \"passed\": true}, {\"check\": \"fault site accepted set bookkeeping #2\", \"actual\": [1, 6], \"expected\": [1, 6], \"passed\": true}, {\"check\": \"partial repair boundary #1\", \"actual\": [0, 1, 2], \"expected\": [0, 1], \"passed\": false}, {\"check\": \"partial repair boundary #2\", \"actual\": [1, 2, 4, 6, 7], \"expected\": [1, 2, 7], \"passed\": false}, {\"check\": \"touching border tile #1\", \"actual\": [0], \"expected\": [0], \"passed\": true}, {\"check\": \"rooms exactly pad apart #1\", \"actual\": [0, 1], \"expected\": [0, 1], \"passed\": true}, {\"check\": \"thin corridor room #1\", \"actual\": [1], \"expected\": [1], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.117,"exit_code":1,"observations":[{"actual":[0],"check":"fault site accepted set bookkeeping #1","expected":[0,2],"passed":false},{"actual":[1],"check":"fault site accepted set bookkeeping #2","expected":[1,6],"passed":false},{"actual":[0,1],"check":"partial repair boundary #1","expected":[0,1],"passed":true},{"actual":[1,2,7],"check":"partial repair boundary #2","expected":[1,2,7],"passed":true},{"actual":[0],"check":"touching border tile #1","expected":[0],"passed":true},{"actual":[0,1],"check":"rooms exactly pad apart #1","expected":[0,1],"passed":true},{"actual":[1],"check":"thin corridor room #1","expected":[1],"passed":true},{"actual":[],"check":"control #1","expected":[],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fault site accepted set bookkeeping #1\", \"actual\": [0], \"expected\": [0, 2], \"passed\": false}, {\"check\": \"fault site accepted set bookkeeping #2\", \"actual\": [1], \"expected\": [1, 6], \"passed\": false}, {\"check\": \"partial repair boundary #1\", \"actual\": [0, 1], \"expected\": [0, 1], \"passed\": true}, {\"check\": \"partial repair boundary #2\", \"actual\": [1, 2, 7], \"expected\": [1, 2, 7], \"passed\": true}, {\"check\": \"touching border tile #1\", \"actual\": [0], \"expected\": [0], \"passed\": true}, {\"check\": \"rooms exactly pad apart #1\", \"actual\": [0, 1], \"expected\": [0, 1], \"passed\": true}, {\"check\": \"thin corridor room #1\", \"actual\": [1], \"expected\": [1], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.773,"exit_code":0,"observations":[{"actual":[0,2],"check":"fault site accepted set bookkeeping #1","expected":[0,2],"passed":true},{"actual":[1,6],"check":"fault site accepted set bookkeeping #2","expected":[1,6],"passed":true},{"actual":[0,1],"check":"partial repair boundary #1","expected":[0,1],"passed":true},{"actual":[1,2,7],"check":"partial repair boundary #2","expected":[1,2,7],"passed":true},{"actual":[0],"check":"touching border tile #1","expected":[0],"passed":true},{"actual":[0,1],"check":"rooms exactly pad apart #1","expected":[0,1],"passed":true},{"actual":[1],"check":"thin corridor room #1","expected":[1],"passed":true},{"actual":[],"check":"control #1","expected":[],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fault site accepted set bookkeeping #1\", \"actual\": [0, 2], \"expected\": [0, 2], \"passed\": true}, {\"check\": \"fault site accepted set bookkeeping #2\", \"actual\": [1, 6], \"expected\": [1, 6], \"passed\": true}, {\"check\": \"partial repair boundary #1\", \"actual\": [0, 1], \"expected\": [0, 1], \"passed\": true}, {\"check\": \"partial repair boundary #2\", \"actual\": [1, 2, 7], \"expected\": [1, 2, 7], \"passed\": true}, {\"check\": \"touching border tile #1\", \"actual\": [0], \"expected\": [0], \"passed\": true}, {\"check\": \"rooms exactly pad apart #1\", \"actual\": [0, 1], \"expected\": [0, 1], \"passed\": true}, {\"check\": \"thin corridor room #1\", \"actual\": [1], \"expected\": [1], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}