{"abstract":"Mazes with diagonal openings pass validation.","category":"Procedural level generation constraints","checks":8,"contract":"Cells (x, y) with 0 <= x < w, 0 <= y < h. First pass over passages [[x1, y1], [x2, y2]]: out-of-bounds or non-orthogonally-adjacent pairs -> 'invalid-edge'; the same passage twice in either orientation -> 'duplicate'. Then union passages in order: joining already connected cells -> 'loop'. Finally 'perfect' if all cells are connected, else 'disconnected'.","evaluation_group":"w2-procedural-level-generation-constraints-perfect-maze","failed_approach":"Only rejecting distances above one lets self-loops through as loops rather than invalid edges.","family":"w2-procedural-level-generation-constraints-perfect-maze-adjacency-test","id":"FA-86621","implementations":{"attempt":{"sha256":"27f34b96b2911766c10af56ab8254992cd36edb12224d0a737a31560df35c691","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(w, h, passages):\n    seen = set()\n    parent = {(x, y): (x, y) for x in range(w) for y in range(h)}\n    def find(p):\n        while parent[p] != p:\n            parent[p] = parent[parent[p]]\n            p = parent[p]\n        return p\n    for (x1, y1), (x2, y2) in passages:\n        if not (0 <= x1 < w and 0 <= y1 < h and 0 <= x2 < w and 0 <= y2 < h):\n            return 'invalid-edge'\n        if abs(x1 - x2) + abs(y1 - y2) > 1:\n            return 'invalid-edge'\n        key = tuple(sorted([(x1, y1), (x2, y2)]))\n        if key in seen:\n            return 'duplicate'\n        seen.add(key)\n    for (x1, y1), (x2, y2) in passages:\n        a, b = find((x1, y1)), find((x2, y2))\n        if a == b:\n            return 'loop'\n        parent[a] = b\n    roots = {find(p) for p in parent}\n    return 'perfect' if len(roots) == 1 else 'disconnected'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('diagonal passage #1', [2, 2, [[[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #1',\n   [3,\n    4,\n    [[[1, 3], [1, 2]],\n     [[2, 1], [2, 2]],\n     [[2, 1], [1, 1]],\n     [[1, 2], [0, 2]],\n     [[0, 0], [1, 0]],\n     [[1, 2], [2, 3]],\n     [[1, 3], [0, 3]],\n     [[0, 2], [0, 3]],\n     [[0, 1], [1, 1]],\n     [[1, 1], [1, 0]],\n     [[2, 1], [2, 0]],\n     [[2, 3], [1, 3]],\n     [[2, 2], [1, 2]],\n     [[0, 0], [0, 1]]]],\n   'invalid-edge'),\n  ('fault site adjacency test #2',\n   [4,\n    3,\n    [[[1, 2], [1, 1]],\n     [[0, 0], [1, 0]],\n     [[2, 0], [3, 1]],\n     [[1, 0], [2, 0]],\n     [[0, 2], [1, 2]],\n     [[3, 0], [3, 1]],\n     [[3, 0], [2, 0]],\n     [[0, 1], [0, 2]],\n     [[3, 2], [2, 2]],\n     [[2, 1], [3, 1]],\n     [[2, 1], [2, 2]],\n     [[0, 1], [0, 0]],\n     [[1, 0], [0, 0]],\n     [[1, 0], [1, 1]]]],\n   'invalid-edge'),\n  ('partial repair boundary #1',\n   [4, 1, [[[2, 0], [2, 0]], [[1, 0], [0, 0]], [[2, 0], [1, 0]]]],\n   'invalid-edge'),\n  ('partial repair boundary #2',\n   [3,\n    3,\n    [[[1, 0], [1, 0]],\n     [[1, 0], [2, 0]],\n     [[0, 2], [0, 1]],\n     [[2, 2], [2, 1]],\n     [[0, 2], [1, 2]],\n     [[1, 0], [0, 0]],\n     [[0, 1], [1, 1]]]],\n   'invalid-edge'),\n  ('reversed duplicate #1', [2, 1, [[[0, 0], [1, 0]], [[1, 0], [0, 0]]]], 'duplicate'),\n  ('single cell maze #1', [1, 1, []], 'perfect'),\n  ('control #1',\n   [3, 2, [[[2, 1], [1, 1]], [[0, 1], [0, 0]], [[1, 1], [2, 2]], [[0, 0], [1, 0]]]],\n   'invalid-edge')],\n [('diagonal passage #1', [2, 2, [[[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #1',\n   [4,\n    3,\n    [[[1, 2], [1, 1]],\n     [[0, 0], [1, 0]],\n     [[2, 0], [3, 1]],\n     [[1, 0], [2, 0]],\n     [[0, 2], [1, 2]],\n     [[3, 0], [3, 1]],\n     [[3, 0], [2, 0]],\n     [[0, 1], [0, 2]],\n     [[3, 2], [2, 2]],\n     [[2, 1], [3, 1]],\n     [[2, 1], [2, 2]],\n     [[0, 1], [0, 0]],\n     [[1, 0], [0, 0]],\n     [[1, 0], [1, 1]]]],\n   'invalid-edge'),\n  ('fault site adjacency test #2',\n   [2,\n    4,\n    [[[0, 1], [1, 2]],\n     [[1, 2], [1, 3]],\n     [[0, 1], [0, 2]],\n     [[0, 2], [0, 3]],\n     [[0, 1], [0, 0]],\n     [[0, 3], [1, 3]],\n     [[0, 1], [1, 1]]]],\n   'invalid-edge'),\n  ('partial repair boundary #1',\n   [3,\n    4,\n    [[[1, 1], [1, 1]],\n     [[1, 3], [2, 3]],\n     [[2, 2], [2, 1]],\n     [[2, 0], [1, 0]],\n     [[1, 2], [2, 2]],\n     [[1, 2], [1, 3]],\n     [[1, 2], [0, 2]],\n     [[1, 2], [1, 1]],\n     [[0, 1], [1, 1]],\n     [[2, 2], [2, 3]],\n     [[2, 1], [2, 0]],\n     [[1, 1], [2, 1]]]],\n   'invalid-edge'),\n  ('partial repair boundary #2',\n   [1, 3, [[[0, 0], [0, 0]], [[0, 0], [0, 1]], [[0, 1], [0, 2]]]],\n   'invalid-edge'),\n  ('reversed duplicate #1', [2, 1, [[[0, 0], [1, 0]], [[1, 0], [0, 0]]]], 'duplicate'),\n  ('single cell maze #1', [1, 1, []], 'perfect'),\n  ('control #1',\n   [3, 2, [[[2, 1], [1, 1]], [[0, 1], [0, 0]], [[1, 1], [2, 2]], [[0, 0], [1, 0]]]],\n   'invalid-edge')],\n [('diagonal passage #1', [2, 2, [[[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #1', [2, 2, [[[1, 0], [0, 0]], [[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #2',\n   [4,\n    4,\n    [[[1, 1], [1, 0]],\n     [[3, 1], [3, 0]],\n     [[3, 1], [3, 2]],\n     [[0, 2], [1, 3]],\n     [[1, 1], [0, 1]],\n     [[1, 3], [0, 3]],\n     [[0, 1], [0, 2]],\n     [[0, 2], [0, 3]],\n     [[2, 3], [2, 2]],\n     [[1, 0], [2, 0]],\n     [[2, 1], [2, 0]],\n     [[0, 0], [0, 1]],\n     [[2, 2], [3, 2]],\n     [[1, 2], [0, 2]],\n     [[2, 3], [3, 3]]]],\n   'invalid-edge'),\n  ('partial repair boundary #1',\n   [3,\n    3,\n    [[[1, 2], [0, 2]],\n     [[1, 0], [2, 0]],\n     [[0, 0], [0, 1]],\n     [[1, 1], [1, 0]],\n     [[2, 1], [2, 0]],\n     [[1, 1], [2, 1]],\n     [[0, 2], [0, 2]]]],\n   'invalid-edge'),\n  ('partial repair boundary #2',\n   [2,\n    3,\n    [[[1, 1], [1, 0]],\n     [[0, 2], [0, 1]],\n     [[1, 1], [1, 2]],\n     [[1, 2], [1, 2]],\n     [[1, 1], [0, 1]],\n     [[0, 1], [0, 0]],\n     [[1, 0], [1, 1]]]],\n   'invalid-edge'),\n  ('reversed duplicate #1', [2, 1, [[[0, 0], [1, 0]], [[1, 0], [0, 0]]]], 'duplicate'),\n  ('single cell maze #1', [1, 1, []], 'perfect'),\n  ('control #1',\n   [3, 2, [[[2, 1], [1, 1]], [[0, 1], [0, 0]], [[1, 1], [2, 2]], [[0, 0], [1, 0]]]],\n   'invalid-edge')],\n [('diagonal passage #1', [2, 2, [[[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #1',\n   [4,\n    4,\n    [[[3, 3], [3, 2]],\n     [[2, 1], [1, 1]],\n     [[0, 1], [1, 1]],\n     [[0, 3], [0, 2]],\n     [[3, 3], [2, 3]],\n     [[0, 1], [0, 0]],\n     [[1, 1], [1, 0]],\n     [[3, 0], [3, 1]],\n     [[2, 2], [2, 1]],\n     [[1, 2], [1, 1]],\n     [[2, 0], [1, 0]],\n     [[3, 1], [3, 2]],\n     [[3, 1], [2, 1]],\n     [[2, 2], [3, 2]],\n     [[2, 0], [3, 0]],\n     [[0, 2], [0, 1]],\n     [[0, 2], [1, 3]]]],\n   'invalid-edge'),\n  ('fault site adjacency test #2',\n   [4, 2, [[[2, 0], [2, 1]], [[2, 0], [3, 1]], [[0, 1], [0, 0]], [[1, 0], [0, 0]], [[1, 0], [2, 0]]]],\n   'invalid-edge'),\n  ('partial repair boundary #1',\n   [3, 2, [[[0, 0], [0, 1]], [[1, 0], [1, 0]], [[1, 1], [2, 1]], [[1, 0], [2, 0]]]],\n   'invalid-edge'),\n  ('partial repair boundary #2', [1, 4, [[[0, 1], [0, 1]]]], 'invalid-edge'),\n  ('reversed duplicate #1', [2, 1, [[[0, 0], [1, 0]], [[1, 0], [0, 0]]]], 'duplicate'),\n  ('single cell maze #1', [1, 1, []], 'perfect'),\n  ('control #1',\n   [4,\n    3,\n    [[[1, 0], [1, 1]],\n     [[0, 1], [0, 0]],\n     [[0, 1], [0, 2]],\n     [[2, 0], [2, 1]],\n     [[1, 0], [0, 0]],\n     [[1, 0], [2, 0]],\n     [[2, 1], [2, 2]],\n     [[2, 2], [3, 2]],\n     [[2, 1], [3, 1]],\n     [[2, 2], [1, 2]],\n     [[1, 1], [0, 1]],\n     [[0, 2], [1, 2]]]],\n   'loop')],\n [('diagonal passage #1', [2, 2, [[[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #1',\n   [4,\n    2,\n    [[[1, 0], [2, 0]],\n     [[0, 0], [0, 1]],\n     [[2, 0], [3, 0]],\n     [[2, 0], [2, 1]],\n     [[1, 0], [2, 1]],\n     [[2, 1], [1, 1]]]],\n   'invalid-edge'),\n  ('fault site adjacency test #2', [2, 3, [[[0, 2], [0, 1]], [[0, 1], [1, 2]]]], 'invalid-edge'),\n  ('partial repair boundary #1',\n   [4,\n    4,\n    [[[1, 1], [2, 1]],\n     [[2, 2], [3, 2]],\n     [[2, 1], [2, 0]],\n     [[2, 2], [1, 2]],\n     [[2, 0], [1, 0]],\n     [[0, 3], [0, 2]],\n     [[2, 2], [2, 1]],\n     [[1, 2], [0, 2]],\n     [[1, 3], [0, 3]],\n     [[2, 3], [1, 3]],\n     [[0, 0], [1, 0]],\n     [[2, 0], [2, 0]],\n     [[3, 2], [3, 3]],\n     [[3, 2], [3, 1]],\n     [[3, 0], [2, 0]],\n     [[2, 2], [2, 3]],\n     [[1, 1], [1, 0]],\n     [[0, 2], [0, 1]],\n     [[1, 2], [1, 3]]]],\n   'invalid-edge'),\n  ('partial repair boundary #2',\n   [4, 2, [[[0, 0], [1, 0]], [[3, 0], [3, 0]], [[2, 0], [3, 0]], [[1, 1], [0, 1]], [[2, 0], [1, 0]]]],\n   'invalid-edge'),\n  ('reversed duplicate #1', [2, 1, [[[0, 0], [1, 0]], [[1, 0], [0, 0]]]], 'duplicate'),\n  ('single cell maze #1', [1, 1, []], 'perfect'),\n  ('control #1',\n   [4, 1, [[[2, 0], [1, 0]], [[3, 0], [2, 0]], [[0, 0], [1, 0]], [[1, 0], [0, 0]]]],\n   'duplicate')]]\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":"d2e565fb8864369df43b03dd4b3f8467815b81755db68151f2621eabe5f23305","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(w, h, passages):\n    seen = set()\n    parent = {(x, y): (x, y) for x in range(w) for y in range(h)}\n    def find(p):\n        while parent[p] != p:\n            parent[p] = parent[parent[p]]\n            p = parent[p]\n        return p\n    for (x1, y1), (x2, y2) in passages:\n        if not (0 <= x1 < w and 0 <= y1 < h and 0 <= x2 < w and 0 <= y2 < h):\n            return 'invalid-edge'\n        if max(abs(x1 - x2), abs(y1 - y2)) != 1:\n            return 'invalid-edge'\n        key = tuple(sorted([(x1, y1), (x2, y2)]))\n        if key in seen:\n            return 'duplicate'\n        seen.add(key)\n    for (x1, y1), (x2, y2) in passages:\n        a, b = find((x1, y1)), find((x2, y2))\n        if a == b:\n            return 'loop'\n        parent[a] = b\n    roots = {find(p) for p in parent}\n    return 'perfect' if len(roots) == 1 else 'disconnected'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('diagonal passage #1', [2, 2, [[[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #1',\n   [3,\n    4,\n    [[[1, 3], [1, 2]],\n     [[2, 1], [2, 2]],\n     [[2, 1], [1, 1]],\n     [[1, 2], [0, 2]],\n     [[0, 0], [1, 0]],\n     [[1, 2], [2, 3]],\n     [[1, 3], [0, 3]],\n     [[0, 2], [0, 3]],\n     [[0, 1], [1, 1]],\n     [[1, 1], [1, 0]],\n     [[2, 1], [2, 0]],\n     [[2, 3], [1, 3]],\n     [[2, 2], [1, 2]],\n     [[0, 0], [0, 1]]]],\n   'invalid-edge'),\n  ('fault site adjacency test #2',\n   [4,\n    3,\n    [[[1, 2], [1, 1]],\n     [[0, 0], [1, 0]],\n     [[2, 0], [3, 1]],\n     [[1, 0], [2, 0]],\n     [[0, 2], [1, 2]],\n     [[3, 0], [3, 1]],\n     [[3, 0], [2, 0]],\n     [[0, 1], [0, 2]],\n     [[3, 2], [2, 2]],\n     [[2, 1], [3, 1]],\n     [[2, 1], [2, 2]],\n     [[0, 1], [0, 0]],\n     [[1, 0], [0, 0]],\n     [[1, 0], [1, 1]]]],\n   'invalid-edge'),\n  ('partial repair boundary #1',\n   [4, 1, [[[2, 0], [2, 0]], [[1, 0], [0, 0]], [[2, 0], [1, 0]]]],\n   'invalid-edge'),\n  ('partial repair boundary #2',\n   [3,\n    3,\n    [[[1, 0], [1, 0]],\n     [[1, 0], [2, 0]],\n     [[0, 2], [0, 1]],\n     [[2, 2], [2, 1]],\n     [[0, 2], [1, 2]],\n     [[1, 0], [0, 0]],\n     [[0, 1], [1, 1]]]],\n   'invalid-edge'),\n  ('reversed duplicate #1', [2, 1, [[[0, 0], [1, 0]], [[1, 0], [0, 0]]]], 'duplicate'),\n  ('single cell maze #1', [1, 1, []], 'perfect'),\n  ('control #1',\n   [3, 2, [[[2, 1], [1, 1]], [[0, 1], [0, 0]], [[1, 1], [2, 2]], [[0, 0], [1, 0]]]],\n   'invalid-edge')],\n [('diagonal passage #1', [2, 2, [[[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #1',\n   [4,\n    3,\n    [[[1, 2], [1, 1]],\n     [[0, 0], [1, 0]],\n     [[2, 0], [3, 1]],\n     [[1, 0], [2, 0]],\n     [[0, 2], [1, 2]],\n     [[3, 0], [3, 1]],\n     [[3, 0], [2, 0]],\n     [[0, 1], [0, 2]],\n     [[3, 2], [2, 2]],\n     [[2, 1], [3, 1]],\n     [[2, 1], [2, 2]],\n     [[0, 1], [0, 0]],\n     [[1, 0], [0, 0]],\n     [[1, 0], [1, 1]]]],\n   'invalid-edge'),\n  ('fault site adjacency test #2',\n   [2,\n    4,\n    [[[0, 1], [1, 2]],\n     [[1, 2], [1, 3]],\n     [[0, 1], [0, 2]],\n     [[0, 2], [0, 3]],\n     [[0, 1], [0, 0]],\n     [[0, 3], [1, 3]],\n     [[0, 1], [1, 1]]]],\n   'invalid-edge'),\n  ('partial repair boundary #1',\n   [3,\n    4,\n    [[[1, 1], [1, 1]],\n     [[1, 3], [2, 3]],\n     [[2, 2], [2, 1]],\n     [[2, 0], [1, 0]],\n     [[1, 2], [2, 2]],\n     [[1, 2], [1, 3]],\n     [[1, 2], [0, 2]],\n     [[1, 2], [1, 1]],\n     [[0, 1], [1, 1]],\n     [[2, 2], [2, 3]],\n     [[2, 1], [2, 0]],\n     [[1, 1], [2, 1]]]],\n   'invalid-edge'),\n  ('partial repair boundary #2',\n   [1, 3, [[[0, 0], [0, 0]], [[0, 0], [0, 1]], [[0, 1], [0, 2]]]],\n   'invalid-edge'),\n  ('reversed duplicate #1', [2, 1, [[[0, 0], [1, 0]], [[1, 0], [0, 0]]]], 'duplicate'),\n  ('single cell maze #1', [1, 1, []], 'perfect'),\n  ('control #1',\n   [3, 2, [[[2, 1], [1, 1]], [[0, 1], [0, 0]], [[1, 1], [2, 2]], [[0, 0], [1, 0]]]],\n   'invalid-edge')],\n [('diagonal passage #1', [2, 2, [[[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #1', [2, 2, [[[1, 0], [0, 0]], [[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #2',\n   [4,\n    4,\n    [[[1, 1], [1, 0]],\n     [[3, 1], [3, 0]],\n     [[3, 1], [3, 2]],\n     [[0, 2], [1, 3]],\n     [[1, 1], [0, 1]],\n     [[1, 3], [0, 3]],\n     [[0, 1], [0, 2]],\n     [[0, 2], [0, 3]],\n     [[2, 3], [2, 2]],\n     [[1, 0], [2, 0]],\n     [[2, 1], [2, 0]],\n     [[0, 0], [0, 1]],\n     [[2, 2], [3, 2]],\n     [[1, 2], [0, 2]],\n     [[2, 3], [3, 3]]]],\n   'invalid-edge'),\n  ('partial repair boundary #1',\n   [3,\n    3,\n    [[[1, 2], [0, 2]],\n     [[1, 0], [2, 0]],\n     [[0, 0], [0, 1]],\n     [[1, 1], [1, 0]],\n     [[2, 1], [2, 0]],\n     [[1, 1], [2, 1]],\n     [[0, 2], [0, 2]]]],\n   'invalid-edge'),\n  ('partial repair boundary #2',\n   [2,\n    3,\n    [[[1, 1], [1, 0]],\n     [[0, 2], [0, 1]],\n     [[1, 1], [1, 2]],\n     [[1, 2], [1, 2]],\n     [[1, 1], [0, 1]],\n     [[0, 1], [0, 0]],\n     [[1, 0], [1, 1]]]],\n   'invalid-edge'),\n  ('reversed duplicate #1', [2, 1, [[[0, 0], [1, 0]], [[1, 0], [0, 0]]]], 'duplicate'),\n  ('single cell maze #1', [1, 1, []], 'perfect'),\n  ('control #1',\n   [3, 2, [[[2, 1], [1, 1]], [[0, 1], [0, 0]], [[1, 1], [2, 2]], [[0, 0], [1, 0]]]],\n   'invalid-edge')],\n [('diagonal passage #1', [2, 2, [[[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #1',\n   [4,\n    4,\n    [[[3, 3], [3, 2]],\n     [[2, 1], [1, 1]],\n     [[0, 1], [1, 1]],\n     [[0, 3], [0, 2]],\n     [[3, 3], [2, 3]],\n     [[0, 1], [0, 0]],\n     [[1, 1], [1, 0]],\n     [[3, 0], [3, 1]],\n     [[2, 2], [2, 1]],\n     [[1, 2], [1, 1]],\n     [[2, 0], [1, 0]],\n     [[3, 1], [3, 2]],\n     [[3, 1], [2, 1]],\n     [[2, 2], [3, 2]],\n     [[2, 0], [3, 0]],\n     [[0, 2], [0, 1]],\n     [[0, 2], [1, 3]]]],\n   'invalid-edge'),\n  ('fault site adjacency test #2',\n   [4, 2, [[[2, 0], [2, 1]], [[2, 0], [3, 1]], [[0, 1], [0, 0]], [[1, 0], [0, 0]], [[1, 0], [2, 0]]]],\n   'invalid-edge'),\n  ('partial repair boundary #1',\n   [3, 2, [[[0, 0], [0, 1]], [[1, 0], [1, 0]], [[1, 1], [2, 1]], [[1, 0], [2, 0]]]],\n   'invalid-edge'),\n  ('partial repair boundary #2', [1, 4, [[[0, 1], [0, 1]]]], 'invalid-edge'),\n  ('reversed duplicate #1', [2, 1, [[[0, 0], [1, 0]], [[1, 0], [0, 0]]]], 'duplicate'),\n  ('single cell maze #1', [1, 1, []], 'perfect'),\n  ('control #1',\n   [4,\n    3,\n    [[[1, 0], [1, 1]],\n     [[0, 1], [0, 0]],\n     [[0, 1], [0, 2]],\n     [[2, 0], [2, 1]],\n     [[1, 0], [0, 0]],\n     [[1, 0], [2, 0]],\n     [[2, 1], [2, 2]],\n     [[2, 2], [3, 2]],\n     [[2, 1], [3, 1]],\n     [[2, 2], [1, 2]],\n     [[1, 1], [0, 1]],\n     [[0, 2], [1, 2]]]],\n   'loop')],\n [('diagonal passage #1', [2, 2, [[[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #1',\n   [4,\n    2,\n    [[[1, 0], [2, 0]],\n     [[0, 0], [0, 1]],\n     [[2, 0], [3, 0]],\n     [[2, 0], [2, 1]],\n     [[1, 0], [2, 1]],\n     [[2, 1], [1, 1]]]],\n   'invalid-edge'),\n  ('fault site adjacency test #2', [2, 3, [[[0, 2], [0, 1]], [[0, 1], [1, 2]]]], 'invalid-edge'),\n  ('partial repair boundary #1',\n   [4,\n    4,\n    [[[1, 1], [2, 1]],\n     [[2, 2], [3, 2]],\n     [[2, 1], [2, 0]],\n     [[2, 2], [1, 2]],\n     [[2, 0], [1, 0]],\n     [[0, 3], [0, 2]],\n     [[2, 2], [2, 1]],\n     [[1, 2], [0, 2]],\n     [[1, 3], [0, 3]],\n     [[2, 3], [1, 3]],\n     [[0, 0], [1, 0]],\n     [[2, 0], [2, 0]],\n     [[3, 2], [3, 3]],\n     [[3, 2], [3, 1]],\n     [[3, 0], [2, 0]],\n     [[2, 2], [2, 3]],\n     [[1, 1], [1, 0]],\n     [[0, 2], [0, 1]],\n     [[1, 2], [1, 3]]]],\n   'invalid-edge'),\n  ('partial repair boundary #2',\n   [4, 2, [[[0, 0], [1, 0]], [[3, 0], [3, 0]], [[2, 0], [3, 0]], [[1, 1], [0, 1]], [[2, 0], [1, 0]]]],\n   'invalid-edge'),\n  ('reversed duplicate #1', [2, 1, [[[0, 0], [1, 0]], [[1, 0], [0, 0]]]], 'duplicate'),\n  ('single cell maze #1', [1, 1, []], 'perfect'),\n  ('control #1',\n   [4, 1, [[[2, 0], [1, 0]], [[3, 0], [2, 0]], [[0, 0], [1, 0]], [[1, 0], [0, 0]]]],\n   'duplicate')]]\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":"d8a8499abb4b43f828d72efffd55b50cd3f18a4cb3a153bf5a973f825512509f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(w, h, passages):\n    seen = set()\n    parent = {(x, y): (x, y) for x in range(w) for y in range(h)}\n    def find(p):\n        while parent[p] != p:\n            parent[p] = parent[parent[p]]\n            p = parent[p]\n        return p\n    for (x1, y1), (x2, y2) in passages:\n        if not (0 <= x1 < w and 0 <= y1 < h and 0 <= x2 < w and 0 <= y2 < h):\n            return 'invalid-edge'\n        if abs(x1 - x2) + abs(y1 - y2) != 1:\n            return 'invalid-edge'\n        key = tuple(sorted([(x1, y1), (x2, y2)]))\n        if key in seen:\n            return 'duplicate'\n        seen.add(key)\n    for (x1, y1), (x2, y2) in passages:\n        a, b = find((x1, y1)), find((x2, y2))\n        if a == b:\n            return 'loop'\n        parent[a] = b\n    roots = {find(p) for p in parent}\n    return 'perfect' if len(roots) == 1 else 'disconnected'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('diagonal passage #1', [2, 2, [[[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #1',\n   [3,\n    4,\n    [[[1, 3], [1, 2]],\n     [[2, 1], [2, 2]],\n     [[2, 1], [1, 1]],\n     [[1, 2], [0, 2]],\n     [[0, 0], [1, 0]],\n     [[1, 2], [2, 3]],\n     [[1, 3], [0, 3]],\n     [[0, 2], [0, 3]],\n     [[0, 1], [1, 1]],\n     [[1, 1], [1, 0]],\n     [[2, 1], [2, 0]],\n     [[2, 3], [1, 3]],\n     [[2, 2], [1, 2]],\n     [[0, 0], [0, 1]]]],\n   'invalid-edge'),\n  ('fault site adjacency test #2',\n   [4,\n    3,\n    [[[1, 2], [1, 1]],\n     [[0, 0], [1, 0]],\n     [[2, 0], [3, 1]],\n     [[1, 0], [2, 0]],\n     [[0, 2], [1, 2]],\n     [[3, 0], [3, 1]],\n     [[3, 0], [2, 0]],\n     [[0, 1], [0, 2]],\n     [[3, 2], [2, 2]],\n     [[2, 1], [3, 1]],\n     [[2, 1], [2, 2]],\n     [[0, 1], [0, 0]],\n     [[1, 0], [0, 0]],\n     [[1, 0], [1, 1]]]],\n   'invalid-edge'),\n  ('partial repair boundary #1',\n   [4, 1, [[[2, 0], [2, 0]], [[1, 0], [0, 0]], [[2, 0], [1, 0]]]],\n   'invalid-edge'),\n  ('partial repair boundary #2',\n   [3,\n    3,\n    [[[1, 0], [1, 0]],\n     [[1, 0], [2, 0]],\n     [[0, 2], [0, 1]],\n     [[2, 2], [2, 1]],\n     [[0, 2], [1, 2]],\n     [[1, 0], [0, 0]],\n     [[0, 1], [1, 1]]]],\n   'invalid-edge'),\n  ('reversed duplicate #1', [2, 1, [[[0, 0], [1, 0]], [[1, 0], [0, 0]]]], 'duplicate'),\n  ('single cell maze #1', [1, 1, []], 'perfect'),\n  ('control #1',\n   [3, 2, [[[2, 1], [1, 1]], [[0, 1], [0, 0]], [[1, 1], [2, 2]], [[0, 0], [1, 0]]]],\n   'invalid-edge')],\n [('diagonal passage #1', [2, 2, [[[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #1',\n   [4,\n    3,\n    [[[1, 2], [1, 1]],\n     [[0, 0], [1, 0]],\n     [[2, 0], [3, 1]],\n     [[1, 0], [2, 0]],\n     [[0, 2], [1, 2]],\n     [[3, 0], [3, 1]],\n     [[3, 0], [2, 0]],\n     [[0, 1], [0, 2]],\n     [[3, 2], [2, 2]],\n     [[2, 1], [3, 1]],\n     [[2, 1], [2, 2]],\n     [[0, 1], [0, 0]],\n     [[1, 0], [0, 0]],\n     [[1, 0], [1, 1]]]],\n   'invalid-edge'),\n  ('fault site adjacency test #2',\n   [2,\n    4,\n    [[[0, 1], [1, 2]],\n     [[1, 2], [1, 3]],\n     [[0, 1], [0, 2]],\n     [[0, 2], [0, 3]],\n     [[0, 1], [0, 0]],\n     [[0, 3], [1, 3]],\n     [[0, 1], [1, 1]]]],\n   'invalid-edge'),\n  ('partial repair boundary #1',\n   [3,\n    4,\n    [[[1, 1], [1, 1]],\n     [[1, 3], [2, 3]],\n     [[2, 2], [2, 1]],\n     [[2, 0], [1, 0]],\n     [[1, 2], [2, 2]],\n     [[1, 2], [1, 3]],\n     [[1, 2], [0, 2]],\n     [[1, 2], [1, 1]],\n     [[0, 1], [1, 1]],\n     [[2, 2], [2, 3]],\n     [[2, 1], [2, 0]],\n     [[1, 1], [2, 1]]]],\n   'invalid-edge'),\n  ('partial repair boundary #2',\n   [1, 3, [[[0, 0], [0, 0]], [[0, 0], [0, 1]], [[0, 1], [0, 2]]]],\n   'invalid-edge'),\n  ('reversed duplicate #1', [2, 1, [[[0, 0], [1, 0]], [[1, 0], [0, 0]]]], 'duplicate'),\n  ('single cell maze #1', [1, 1, []], 'perfect'),\n  ('control #1',\n   [3, 2, [[[2, 1], [1, 1]], [[0, 1], [0, 0]], [[1, 1], [2, 2]], [[0, 0], [1, 0]]]],\n   'invalid-edge')],\n [('diagonal passage #1', [2, 2, [[[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #1', [2, 2, [[[1, 0], [0, 0]], [[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #2',\n   [4,\n    4,\n    [[[1, 1], [1, 0]],\n     [[3, 1], [3, 0]],\n     [[3, 1], [3, 2]],\n     [[0, 2], [1, 3]],\n     [[1, 1], [0, 1]],\n     [[1, 3], [0, 3]],\n     [[0, 1], [0, 2]],\n     [[0, 2], [0, 3]],\n     [[2, 3], [2, 2]],\n     [[1, 0], [2, 0]],\n     [[2, 1], [2, 0]],\n     [[0, 0], [0, 1]],\n     [[2, 2], [3, 2]],\n     [[1, 2], [0, 2]],\n     [[2, 3], [3, 3]]]],\n   'invalid-edge'),\n  ('partial repair boundary #1',\n   [3,\n    3,\n    [[[1, 2], [0, 2]],\n     [[1, 0], [2, 0]],\n     [[0, 0], [0, 1]],\n     [[1, 1], [1, 0]],\n     [[2, 1], [2, 0]],\n     [[1, 1], [2, 1]],\n     [[0, 2], [0, 2]]]],\n   'invalid-edge'),\n  ('partial repair boundary #2',\n   [2,\n    3,\n    [[[1, 1], [1, 0]],\n     [[0, 2], [0, 1]],\n     [[1, 1], [1, 2]],\n     [[1, 2], [1, 2]],\n     [[1, 1], [0, 1]],\n     [[0, 1], [0, 0]],\n     [[1, 0], [1, 1]]]],\n   'invalid-edge'),\n  ('reversed duplicate #1', [2, 1, [[[0, 0], [1, 0]], [[1, 0], [0, 0]]]], 'duplicate'),\n  ('single cell maze #1', [1, 1, []], 'perfect'),\n  ('control #1',\n   [3, 2, [[[2, 1], [1, 1]], [[0, 1], [0, 0]], [[1, 1], [2, 2]], [[0, 0], [1, 0]]]],\n   'invalid-edge')],\n [('diagonal passage #1', [2, 2, [[[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #1',\n   [4,\n    4,\n    [[[3, 3], [3, 2]],\n     [[2, 1], [1, 1]],\n     [[0, 1], [1, 1]],\n     [[0, 3], [0, 2]],\n     [[3, 3], [2, 3]],\n     [[0, 1], [0, 0]],\n     [[1, 1], [1, 0]],\n     [[3, 0], [3, 1]],\n     [[2, 2], [2, 1]],\n     [[1, 2], [1, 1]],\n     [[2, 0], [1, 0]],\n     [[3, 1], [3, 2]],\n     [[3, 1], [2, 1]],\n     [[2, 2], [3, 2]],\n     [[2, 0], [3, 0]],\n     [[0, 2], [0, 1]],\n     [[0, 2], [1, 3]]]],\n   'invalid-edge'),\n  ('fault site adjacency test #2',\n   [4, 2, [[[2, 0], [2, 1]], [[2, 0], [3, 1]], [[0, 1], [0, 0]], [[1, 0], [0, 0]], [[1, 0], [2, 0]]]],\n   'invalid-edge'),\n  ('partial repair boundary #1',\n   [3, 2, [[[0, 0], [0, 1]], [[1, 0], [1, 0]], [[1, 1], [2, 1]], [[1, 0], [2, 0]]]],\n   'invalid-edge'),\n  ('partial repair boundary #2', [1, 4, [[[0, 1], [0, 1]]]], 'invalid-edge'),\n  ('reversed duplicate #1', [2, 1, [[[0, 0], [1, 0]], [[1, 0], [0, 0]]]], 'duplicate'),\n  ('single cell maze #1', [1, 1, []], 'perfect'),\n  ('control #1',\n   [4,\n    3,\n    [[[1, 0], [1, 1]],\n     [[0, 1], [0, 0]],\n     [[0, 1], [0, 2]],\n     [[2, 0], [2, 1]],\n     [[1, 0], [0, 0]],\n     [[1, 0], [2, 0]],\n     [[2, 1], [2, 2]],\n     [[2, 2], [3, 2]],\n     [[2, 1], [3, 1]],\n     [[2, 2], [1, 2]],\n     [[1, 1], [0, 1]],\n     [[0, 2], [1, 2]]]],\n   'loop')],\n [('diagonal passage #1', [2, 2, [[[0, 0], [1, 1]]]], 'invalid-edge'),\n  ('fault site adjacency test #1',\n   [4,\n    2,\n    [[[1, 0], [2, 0]],\n     [[0, 0], [0, 1]],\n     [[2, 0], [3, 0]],\n     [[2, 0], [2, 1]],\n     [[1, 0], [2, 1]],\n     [[2, 1], [1, 1]]]],\n   'invalid-edge'),\n  ('fault site adjacency test #2', [2, 3, [[[0, 2], [0, 1]], [[0, 1], [1, 2]]]], 'invalid-edge'),\n  ('partial repair boundary #1',\n   [4,\n    4,\n    [[[1, 1], [2, 1]],\n     [[2, 2], [3, 2]],\n     [[2, 1], [2, 0]],\n     [[2, 2], [1, 2]],\n     [[2, 0], [1, 0]],\n     [[0, 3], [0, 2]],\n     [[2, 2], [2, 1]],\n     [[1, 2], [0, 2]],\n     [[1, 3], [0, 3]],\n     [[2, 3], [1, 3]],\n     [[0, 0], [1, 0]],\n     [[2, 0], [2, 0]],\n     [[3, 2], [3, 3]],\n     [[3, 2], [3, 1]],\n     [[3, 0], [2, 0]],\n     [[2, 2], [2, 3]],\n     [[1, 1], [1, 0]],\n     [[0, 2], [0, 1]],\n     [[1, 2], [1, 3]]]],\n   'invalid-edge'),\n  ('partial repair boundary #2',\n   [4, 2, [[[0, 0], [1, 0]], [[3, 0], [3, 0]], [[2, 0], [3, 0]], [[1, 1], [0, 1]], [[2, 0], [1, 0]]]],\n   'invalid-edge'),\n  ('reversed duplicate #1', [2, 1, [[[0, 0], [1, 0]], [[1, 0], [0, 0]]]], 'duplicate'),\n  ('single cell maze #1', [1, 1, []], 'perfect'),\n  ('control #1',\n   [4, 1, [[[2, 0], [1, 0]], [[3, 0], [2, 0]], [[0, 0], [1, 0]], [[1, 0], [0, 0]]]],\n   'duplicate')]]\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-perfect-maze-adjacency-test","generated_at":"2026-09-29T14:50:51.241376+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 `abs(x1 - x2) + abs(y1 - y2) != 1` at the adjacency test step.","root_cause":"Adjacency uses Chebyshev distance, accepting diagonals.","sha256":"4fc94e47569c288b0920e37722bcf7d49c4d412aa9f8c12306b8fab1a122375e","title":"Perfect maze validator: Diagonal passages validate · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.136,"exit_code":1,"observations":[{"actual":"invalid-edge","check":"diagonal passage #1","expected":"invalid-edge","passed":true},{"actual":"invalid-edge","check":"fault site adjacency test #1","expected":"invalid-edge","passed":true},{"actual":"invalid-edge","check":"fault site adjacency test #2","expected":"invalid-edge","passed":true},{"actual":"loop","check":"partial repair boundary #1","expected":"invalid-edge","passed":false},{"actual":"loop","check":"partial repair boundary #2","expected":"invalid-edge","passed":false},{"actual":"duplicate","check":"reversed duplicate #1","expected":"duplicate","passed":true},{"actual":"perfect","check":"single cell maze #1","expected":"perfect","passed":true},{"actual":"invalid-edge","check":"control #1","expected":"invalid-edge","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"diagonal passage #1\", \"actual\": \"invalid-edge\", \"expected\": \"invalid-edge\", \"passed\": true}, {\"check\": \"fault site adjacency test #1\", \"actual\": \"invalid-edge\", \"expected\": \"invalid-edge\", \"passed\": true}, {\"check\": \"fault site adjacency test #2\", \"actual\": \"invalid-edge\", \"expected\": \"invalid-edge\", \"passed\": true}, {\"check\": \"partial repair boundary #1\", \"actual\": \"loop\", \"expected\": \"invalid-edge\", \"passed\": false}, {\"check\": \"partial repair boundary #2\", \"actual\": \"loop\", \"expected\": \"invalid-edge\", \"passed\": false}, {\"check\": \"reversed duplicate #1\", \"actual\": \"duplicate\", \"expected\": \"duplicate\", \"passed\": true}, {\"check\": \"single cell maze #1\", \"actual\": \"perfect\", \"expected\": \"perfect\", \"passed\": true}, {\"check\": \"control #1\", \"actual\": \"invalid-edge\", \"expected\": \"invalid-edge\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.145,"exit_code":1,"observations":[{"actual":"disconnected","check":"diagonal passage #1","expected":"invalid-edge","passed":false},{"actual":"loop","check":"fault site adjacency test #1","expected":"invalid-edge","passed":false},{"actual":"duplicate","check":"fault site adjacency test #2","expected":"invalid-edge","passed":false},{"actual":"invalid-edge","check":"partial repair boundary #1","expected":"invalid-edge","passed":true},{"actual":"invalid-edge","check":"partial repair boundary #2","expected":"invalid-edge","passed":true},{"actual":"duplicate","check":"reversed duplicate #1","expected":"duplicate","passed":true},{"actual":"perfect","check":"single cell maze #1","expected":"perfect","passed":true},{"actual":"invalid-edge","check":"control #1","expected":"invalid-edge","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"diagonal passage #1\", \"actual\": \"disconnected\", \"expected\": \"invalid-edge\", \"passed\": false}, {\"check\": \"fault site adjacency test #1\", \"actual\": \"loop\", \"expected\": \"invalid-edge\", \"passed\": false}, {\"check\": \"fault site adjacency test #2\", \"actual\": \"duplicate\", \"expected\": \"invalid-edge\", \"passed\": false}, {\"check\": \"partial repair boundary #1\", \"actual\": \"invalid-edge\", \"expected\": \"invalid-edge\", \"passed\": true}, {\"check\": \"partial repair boundary #2\", \"actual\": \"invalid-edge\", \"expected\": \"invalid-edge\", \"passed\": true}, {\"check\": \"reversed duplicate #1\", \"actual\": \"duplicate\", \"expected\": \"duplicate\", \"passed\": true}, {\"check\": \"single cell maze #1\", \"actual\": \"perfect\", \"expected\": \"perfect\", \"passed\": true}, {\"check\": \"control #1\", \"actual\": \"invalid-edge\", \"expected\": \"invalid-edge\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.42,"exit_code":0,"observations":[{"actual":"invalid-edge","check":"diagonal passage #1","expected":"invalid-edge","passed":true},{"actual":"invalid-edge","check":"fault site adjacency test #1","expected":"invalid-edge","passed":true},{"actual":"invalid-edge","check":"fault site adjacency test #2","expected":"invalid-edge","passed":true},{"actual":"invalid-edge","check":"partial repair boundary #1","expected":"invalid-edge","passed":true},{"actual":"invalid-edge","check":"partial repair boundary #2","expected":"invalid-edge","passed":true},{"actual":"duplicate","check":"reversed duplicate #1","expected":"duplicate","passed":true},{"actual":"perfect","check":"single cell maze #1","expected":"perfect","passed":true},{"actual":"invalid-edge","check":"control #1","expected":"invalid-edge","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"diagonal passage #1\", \"actual\": \"invalid-edge\", \"expected\": \"invalid-edge\", \"passed\": true}, {\"check\": \"fault site adjacency test #1\", \"actual\": \"invalid-edge\", \"expected\": \"invalid-edge\", \"passed\": true}, {\"check\": \"fault site adjacency test #2\", \"actual\": \"invalid-edge\", \"expected\": \"invalid-edge\", \"passed\": true}, {\"check\": \"partial repair boundary #1\", \"actual\": \"invalid-edge\", \"expected\": \"invalid-edge\", \"passed\": true}, {\"check\": \"partial repair boundary #2\", \"actual\": \"invalid-edge\", \"expected\": \"invalid-edge\", \"passed\": true}, {\"check\": \"reversed duplicate #1\", \"actual\": \"duplicate\", \"expected\": \"duplicate\", \"passed\": true}, {\"check\": \"single cell maze #1\", \"actual\": \"perfect\", \"expected\": \"perfect\", \"passed\": true}, {\"check\": \"control #1\", \"actual\": \"invalid-edge\", \"expected\": \"invalid-edge\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}