{"abstract":"Caves smooth into diagonal checkerboards.","category":"Procedural level generation constraints","checks":8,"contract":"One synchronous step over '#'/'.' rows. For each cell count wall cells among its 8 neighbours (the cell itself excluded); out-of-bounds neighbours count as walls when border_wall. A wall stays a wall when the count is in survive; a floor becomes a wall when the count is in birth. All counts use the input grid.","evaluation_group":"w2-procedural-level-generation-constraints-cave-automaton","failed_approach":"Skipping the main diagonal drops two real neighbours.","family":"w2-procedural-level-generation-constraints-cave-automaton-self-exclusion","id":"FA-86386","implementations":{"attempt":{"sha256":"19c7897048ff048071f155b83076b9527b3cef6c8127ed72f0052cd1a0a5ff4c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(grid, birth, survive, border_wall):\n    h = len(grid)\n    w = len(grid[0])\n    out = []\n    for r in range(h):\n        row = []\n        for c in range(w):\n            n = 0\n            for dr in (-1, 0, 1):\n                for dc in (-1, 0, 1):\n                    if dr == dc:\n                        continue\n                    rr, cc = r + dr, c + dc\n                    if 0 <= rr < h and 0 <= cc < w:\n                        n += grid[rr][cc] == '#'\n                    elif border_wall:\n                        n += 1\n            wall = grid[r][c] == '#'\n            row.append('#' if (n in survive if wall else n in birth) else '.')\n        out.append(''.join(row))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('regression self exclusion #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....']),\n  ('regression self exclusion #2',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('regression self exclusion #3',\n   [['...#', '.#..', '#...', '####'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#..#', '....', '#...', '####']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('control #1', [['.#', '..'], [3], [2, 3], False], ['..', '..']),\n  ('control #2', [['#', '#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True], ['#', '#'])],\n [('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('regression self exclusion #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....']),\n  ('regression self exclusion #2',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('regression self exclusion #3',\n   [['...#', '.#..', '#...', '####'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#..#', '....', '#...', '####']),\n  ('regression self exclusion #4',\n   [['.', '.', '#', '.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#', '#', '#', '#']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('control #1', [['.#', '..'], [3], [2, 3], False], ['..', '..'])],\n [('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('fault site self exclusion #1', [['..##.#', '.#####'], [3], [2, 3], True], ['......', '......']),\n  ('regression self exclusion #1',\n   [['...#', '.#..', '#...', '####'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#..#', '....', '#...', '####']),\n  ('regression self exclusion #2',\n   [['.', '.', '#', '.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#', '#', '#', '#']),\n  ('regression self exclusion #3',\n   [['#..#.', '#####', '.#..#', '..##.', '###..', '..#..'], [3], [2, 3], True],\n   ['.....', '.....', '.....', '...#.', '.....', '.....']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('control #1', [['.#', '.#', '##', '#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['..', '..', '..', '..']),\n  ('control #2', [['..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True], ['..', '..'])],\n [('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('fault site self exclusion #1',\n   [['..', '##', '#.', '#.', '##', '.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['##', '##', '##', '##', '##', '##']),\n  ('regression self exclusion #1',\n   [['.', '.', '#', '.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#', '#', '#', '#']),\n  ('regression self exclusion #2',\n   [['###.', '.###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.##.', '.##.']),\n  ('regression self exclusion #3',\n   [['.#.#.', '##...', '#.###', '#....', '#..##'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.....', '.##..', '.#...', '...#.', '.....']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('control #1', [['.#..##'], [3], [2, 3], True], ['......'])],\n [('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('regression self exclusion #1',\n   [['#..#.', '#####', '.#..#', '..##.', '###..', '..#..'], [3], [2, 3], True],\n   ['.....', '.....', '.....', '...#.', '.....', '.....']),\n  ('regression self exclusion #2',\n   [['###.', '.###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.##.', '.##.']),\n  ('regression self exclusion #3',\n   [['##', '#.', '..', '#.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['##', '##', '..', '##']),\n  ('regression self exclusion #4',\n   [['##.##', '###..', '#.##.', '...##', '#..#.', '##.#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.#...', '####.', '.###.', '...#.', '.....', '.....']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('control #1',\n   [['..#', '.#.', '..#', '..#', '##.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], False],\n   ['...', '...', '...', '...', '...']),\n  ('control #2', [['#', '#'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True], ['#', '#'])]]\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":"5021b69334304292f550089c080793a6337414550ce79ae350c0d91800be5a13","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(grid, birth, survive, border_wall):\n    h = len(grid)\n    w = len(grid[0])\n    out = []\n    for r in range(h):\n        row = []\n        for c in range(w):\n            n = 0\n            for dr in (-1, 0, 1):\n                for dc in (-1, 0, 1):\n                    if dr == 0 or dc == 0:\n                        continue\n                    rr, cc = r + dr, c + dc\n                    if 0 <= rr < h and 0 <= cc < w:\n                        n += grid[rr][cc] == '#'\n                    elif border_wall:\n                        n += 1\n            wall = grid[r][c] == '#'\n            row.append('#' if (n in survive if wall else n in birth) else '.')\n        out.append(''.join(row))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('regression self exclusion #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....']),\n  ('regression self exclusion #2',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('regression self exclusion #3',\n   [['...#', '.#..', '#...', '####'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#..#', '....', '#...', '####']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('control #1', [['.#', '..'], [3], [2, 3], False], ['..', '..']),\n  ('control #2', [['#', '#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True], ['#', '#'])],\n [('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('regression self exclusion #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....']),\n  ('regression self exclusion #2',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('regression self exclusion #3',\n   [['...#', '.#..', '#...', '####'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#..#', '....', '#...', '####']),\n  ('regression self exclusion #4',\n   [['.', '.', '#', '.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#', '#', '#', '#']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('control #1', [['.#', '..'], [3], [2, 3], False], ['..', '..'])],\n [('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('fault site self exclusion #1', [['..##.#', '.#####'], [3], [2, 3], True], ['......', '......']),\n  ('regression self exclusion #1',\n   [['...#', '.#..', '#...', '####'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#..#', '....', '#...', '####']),\n  ('regression self exclusion #2',\n   [['.', '.', '#', '.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#', '#', '#', '#']),\n  ('regression self exclusion #3',\n   [['#..#.', '#####', '.#..#', '..##.', '###..', '..#..'], [3], [2, 3], True],\n   ['.....', '.....', '.....', '...#.', '.....', '.....']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('control #1', [['.#', '.#', '##', '#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['..', '..', '..', '..']),\n  ('control #2', [['..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True], ['..', '..'])],\n [('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('fault site self exclusion #1',\n   [['..', '##', '#.', '#.', '##', '.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['##', '##', '##', '##', '##', '##']),\n  ('regression self exclusion #1',\n   [['.', '.', '#', '.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#', '#', '#', '#']),\n  ('regression self exclusion #2',\n   [['###.', '.###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.##.', '.##.']),\n  ('regression self exclusion #3',\n   [['.#.#.', '##...', '#.###', '#....', '#..##'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.....', '.##..', '.#...', '...#.', '.....']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('control #1', [['.#..##'], [3], [2, 3], True], ['......'])],\n [('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('regression self exclusion #1',\n   [['#..#.', '#####', '.#..#', '..##.', '###..', '..#..'], [3], [2, 3], True],\n   ['.....', '.....', '.....', '...#.', '.....', '.....']),\n  ('regression self exclusion #2',\n   [['###.', '.###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.##.', '.##.']),\n  ('regression self exclusion #3',\n   [['##', '#.', '..', '#.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['##', '##', '..', '##']),\n  ('regression self exclusion #4',\n   [['##.##', '###..', '#.##.', '...##', '#..#.', '##.#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.#...', '####.', '.###.', '...#.', '.....', '.....']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('control #1',\n   [['..#', '.#.', '..#', '..#', '##.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], False],\n   ['...', '...', '...', '...', '...']),\n  ('control #2', [['#', '#'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True], ['#', '#'])]]\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":"cdcc3d5f8fe02291e2db6778a99ddb40998dec41a3665b0e9b883b235b9d508b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(grid, birth, survive, border_wall):\n    h = len(grid)\n    w = len(grid[0])\n    out = []\n    for r in range(h):\n        row = []\n        for c in range(w):\n            n = 0\n            for dr in (-1, 0, 1):\n                for dc in (-1, 0, 1):\n                    if dr == 0 and dc == 0:\n                        continue\n                    rr, cc = r + dr, c + dc\n                    if 0 <= rr < h and 0 <= cc < w:\n                        n += grid[rr][cc] == '#'\n                    elif border_wall:\n                        n += 1\n            wall = grid[r][c] == '#'\n            row.append('#' if (n in survive if wall else n in birth) else '.')\n        out.append(''.join(row))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('regression self exclusion #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....']),\n  ('regression self exclusion #2',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('regression self exclusion #3',\n   [['...#', '.#..', '#...', '####'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#..#', '....', '#...', '####']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('control #1', [['.#', '..'], [3], [2, 3], False], ['..', '..']),\n  ('control #2', [['#', '#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True], ['#', '#'])],\n [('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('regression self exclusion #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....']),\n  ('regression self exclusion #2',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('regression self exclusion #3',\n   [['...#', '.#..', '#...', '####'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#..#', '....', '#...', '####']),\n  ('regression self exclusion #4',\n   [['.', '.', '#', '.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#', '#', '#', '#']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('control #1', [['.#', '..'], [3], [2, 3], False], ['..', '..'])],\n [('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('fault site self exclusion #1', [['..##.#', '.#####'], [3], [2, 3], True], ['......', '......']),\n  ('regression self exclusion #1',\n   [['...#', '.#..', '#...', '####'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#..#', '....', '#...', '####']),\n  ('regression self exclusion #2',\n   [['.', '.', '#', '.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#', '#', '#', '#']),\n  ('regression self exclusion #3',\n   [['#..#.', '#####', '.#..#', '..##.', '###..', '..#..'], [3], [2, 3], True],\n   ['.....', '.....', '.....', '...#.', '.....', '.....']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('control #1', [['.#', '.#', '##', '#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['..', '..', '..', '..']),\n  ('control #2', [['..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True], ['..', '..'])],\n [('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('fault site self exclusion #1',\n   [['..', '##', '#.', '#.', '##', '.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['##', '##', '##', '##', '##', '##']),\n  ('regression self exclusion #1',\n   [['.', '.', '#', '.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#', '#', '#', '#']),\n  ('regression self exclusion #2',\n   [['###.', '.###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.##.', '.##.']),\n  ('regression self exclusion #3',\n   [['.#.#.', '##...', '#.###', '#....', '#..##'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.....', '.##..', '.#...', '...#.', '.....']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('control #1', [['.#..##'], [3], [2, 3], True], ['......'])],\n [('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('regression self exclusion #1',\n   [['#..#.', '#####', '.#..#', '..##.', '###..', '..#..'], [3], [2, 3], True],\n   ['.....', '.....', '.....', '...#.', '.....', '.....']),\n  ('regression self exclusion #2',\n   [['###.', '.###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.##.', '.##.']),\n  ('regression self exclusion #3',\n   [['##', '#.', '..', '#.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['##', '##', '..', '##']),\n  ('regression self exclusion #4',\n   [['##.##', '###..', '#.##.', '...##', '#..#.', '##.#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.#...', '####.', '.###.', '...#.', '.....', '.....']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('control #1',\n   [['..#', '.#.', '..#', '..#', '##.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], False],\n   ['...', '...', '...', '...', '...']),\n  ('control #2', [['#', '#'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True], ['#', '#'])]]\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-cave-automaton-self-exclusion","generated_at":"2026-09-29T14:50:48.990005+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 dr == 0 and dc == 0:` at the self exclusion step.","root_cause":"The self-exclusion test skips every orthogonal neighbour as well.","sha256":"55535ea3dde11ea99729d245250f7cd3846dfe11d6817ebdb09c0d10a7494bd2","title":"Cave smoothing automaton: Only diagonal neighbours are counted · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.429,"exit_code":1,"observations":[{"actual":["...","...","..."],"check":"open field corner #1","expected":["#.#","...","#.#"],"passed":false},{"actual":[".#.","###",".#."],"check":"dense block #1","expected":[".#.","###",".#."],"passed":true},{"actual":["..#.","..#."],"check":"regression self exclusion #1","expected":["....","...."],"passed":false},{"actual":["#...","##..","#...","....","...#"],"check":"regression self exclusion #2","expected":["####","##.#","##.#","#..#","#.##"],"passed":false},{"actual":["...#","....","#...","####"],"check":"regression self exclusion #3","expected":["#..#","....","#...","####"],"passed":false},{"actual":["...","...","..."],"check":"lone pillar #1","expected":["...","...","..."],"passed":true},{"actual":["..",".."],"check":"control #1","expected":["..",".."],"passed":true},{"actual":["#","#"],"check":"control #2","expected":["#","#"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"open field corner #1\", \"actual\": [\"...\", \"...\", \"...\"], \"expected\": [\"#.#\", \"...\", \"#.#\"], \"passed\": false}, {\"check\": \"dense block #1\", \"actual\": [\".#.\", \"###\", \".#.\"], \"expected\": [\".#.\", \"###\", \".#.\"], \"passed\": true}, {\"check\": \"regression self exclusion #1\", \"actual\": [\"..#.\", \"..#.\"], \"expected\": [\"....\", \"....\"], \"passed\": false}, {\"check\": \"regression self exclusion #2\", \"actual\": [\"#...\", \"##..\", \"#...\", \"....\", \"...#\"], \"expected\": [\"####\", \"##.#\", \"##.#\", \"#..#\", \"#.##\"], \"passed\": false}, {\"check\": \"regression self exclusion #3\", \"actual\": [\"...#\", \"....\", \"#...\", \"####\"], \"expected\": [\"#..#\", \"....\", \"#...\", \"####\"], \"passed\": false}, {\"check\": \"lone pillar #1\", \"actual\": [\"...\", \"...\", \"...\"], \"expected\": [\"...\", \"...\", \"...\"], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [\"..\", \"..\"], \"expected\": [\"..\", \"..\"], \"passed\": true}, {\"check\": \"control #2\", \"actual\": [\"#\", \"#\"], \"expected\": [\"#\", \"#\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.812,"exit_code":1,"observations":[{"actual":["...","...","..."],"check":"open field corner #1","expected":["#.#","...","#.#"],"passed":false},{"actual":["...",".#.","..."],"check":"dense block #1","expected":[".#.","###",".#."],"passed":false},{"actual":["####","..#."],"check":"regression self exclusion #1","expected":["....","...."],"passed":false},{"actual":["....","....","....","....","...."],"check":"regression self exclusion #2","expected":["####","##.#","##.#","#..#","#.##"],"passed":false},{"actual":["...#","....","#...","##.#"],"check":"regression self exclusion #3","expected":["#..#","....","#...","####"],"passed":false},{"actual":["...","...","..."],"check":"lone pillar #1","expected":["...","...","..."],"passed":true},{"actual":["..",".."],"check":"control #1","expected":["..",".."],"passed":true},{"actual":["#","#"],"check":"control #2","expected":["#","#"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"open field corner #1\", \"actual\": [\"...\", \"...\", \"...\"], \"expected\": [\"#.#\", \"...\", \"#.#\"], \"passed\": false}, {\"check\": \"dense block #1\", \"actual\": [\"...\", \".#.\", \"...\"], \"expected\": [\".#.\", \"###\", \".#.\"], \"passed\": false}, {\"check\": \"regression self exclusion #1\", \"actual\": [\"####\", \"..#.\"], \"expected\": [\"....\", \"....\"], \"passed\": false}, {\"check\": \"regression self exclusion #2\", \"actual\": [\"....\", \"....\", \"....\", \"....\", \"....\"], \"expected\": [\"####\", \"##.#\", \"##.#\", \"#..#\", \"#.##\"], \"passed\": false}, {\"check\": \"regression self exclusion #3\", \"actual\": [\"...#\", \"....\", \"#...\", \"##.#\"], \"expected\": [\"#..#\", \"....\", \"#...\", \"####\"], \"passed\": false}, {\"check\": \"lone pillar #1\", \"actual\": [\"...\", \"...\", \"...\"], \"expected\": [\"...\", \"...\", \"...\"], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [\"..\", \"..\"], \"expected\": [\"..\", \"..\"], \"passed\": true}, {\"check\": \"control #2\", \"actual\": [\"#\", \"#\"], \"expected\": [\"#\", \"#\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.873,"exit_code":0,"observations":[{"actual":["#.#","...","#.#"],"check":"open field corner #1","expected":["#.#","...","#.#"],"passed":true},{"actual":[".#.","###",".#."],"check":"dense block #1","expected":[".#.","###",".#."],"passed":true},{"actual":["....","...."],"check":"regression self exclusion #1","expected":["....","...."],"passed":true},{"actual":["####","##.#","##.#","#..#","#.##"],"check":"regression self exclusion #2","expected":["####","##.#","##.#","#..#","#.##"],"passed":true},{"actual":["#..#","....","#...","####"],"check":"regression self exclusion #3","expected":["#..#","....","#...","####"],"passed":true},{"actual":["...","...","..."],"check":"lone pillar #1","expected":["...","...","..."],"passed":true},{"actual":["..",".."],"check":"control #1","expected":["..",".."],"passed":true},{"actual":["#","#"],"check":"control #2","expected":["#","#"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"open field corner #1\", \"actual\": [\"#.#\", \"...\", \"#.#\"], \"expected\": [\"#.#\", \"...\", \"#.#\"], \"passed\": true}, {\"check\": \"dense block #1\", \"actual\": [\".#.\", \"###\", \".#.\"], \"expected\": [\".#.\", \"###\", \".#.\"], \"passed\": true}, {\"check\": \"regression self exclusion #1\", \"actual\": [\"....\", \"....\"], \"expected\": [\"....\", \"....\"], \"passed\": true}, {\"check\": \"regression self exclusion #2\", \"actual\": [\"####\", \"##.#\", \"##.#\", \"#..#\", \"#.##\"], \"expected\": [\"####\", \"##.#\", \"##.#\", \"#..#\", \"#.##\"], \"passed\": true}, {\"check\": \"regression self exclusion #3\", \"actual\": [\"#..#\", \"....\", \"#...\", \"####\"], \"expected\": [\"#..#\", \"....\", \"#...\", \"####\"], \"passed\": true}, {\"check\": \"lone pillar #1\", \"actual\": [\"...\", \"...\", \"...\"], \"expected\": [\"...\", \"...\", \"...\"], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [\"..\", \"..\"], \"expected\": [\"..\", \"..\"], \"passed\": true}, {\"check\": \"control #2\", \"actual\": [\"#\", \"#\"], \"expected\": [\"#\", \"#\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}