{"abstract":"Walls erode and floors fill in with the wrong thresholds.","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":"Accepting either set ignores the current cell state.","family":"w2-procedural-level-generation-constraints-cave-automaton-rule-selection","id":"FA-86401","implementations":{"attempt":{"sha256":"bae52d76ff84c948e8d87093d63a651e50d1eaf2d302f40750b50c91a8ec7843","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 or 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 = [[('regression rule selection #1',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('regression rule selection #2',\n   [['...#', '.#..', '#...', '####'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#..#', '....', '#...', '####']),\n  ('regression rule selection #3',\n   [['.#', '.#', '##', '#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..']),\n  ('regression rule selection #4', [['..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True], ['..', '..']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('control #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....'])],\n [('regression rule selection #1',\n   [['.#', '.#', '##', '#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..']),\n  ('regression rule selection #2', [['..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True], ['..', '..']),\n  ('regression rule selection #3',\n   [['.#.#.', '##...', '#.###', '#....', '#..##'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.....', '.##..', '.#...', '...#.', '.....']),\n  ('regression rule selection #4',\n   [['##', '#.', '..', '#.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['##', '##', '..', '##']),\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  ('control #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....']),\n  ('control #2', [['.#', '..'], [3], [2, 3], False], ['..', '..'])],\n [('fault site rule selection #1',\n   [['###.', '.###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.##.', '.##.']),\n  ('regression rule selection #1',\n   [['.#.#.', '##...', '#.###', '#....', '#..##'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.....', '.##..', '.#...', '...#.', '.....']),\n  ('regression rule selection #2',\n   [['##', '#.', '..', '#.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['##', '##', '..', '##']),\n  ('regression rule selection #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  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('control #1', [['.#', '..'], [3], [2, 3], False], ['..', '..']),\n  ('control #2', [['..##.#', '.#####'], [3], [2, 3], True], ['......', '......'])],\n [('regression rule selection #1',\n   [['##', '#.', '..', '#.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['##', '##', '..', '##']),\n  ('regression rule selection #2',\n   [['##.##', '###..', '#.##.', '...##', '#..#.', '##.#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.#...', '####.', '.###.', '...#.', '.....', '.....']),\n  ('regression rule selection #3',\n   [['...##', '.####', '##.##'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#.###', '#####', '#####']),\n  ('regression rule selection #4',\n   [['..#.', '..##', '##.#', '.###', '....'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '#.##', '####', '#.##', '####']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], 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], True], ['#', '#']),\n  ('control #2', [['.#..##'], [3], [2, 3], True], ['......'])],\n [('regression rule selection #1',\n   [['...##', '.####', '##.##'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#.###', '#####', '#####']),\n  ('fault site rule selection #1',\n   [['#.', '#.', '.#'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['##', '##', '##']),\n  ('regression rule selection #2',\n   [['..#.', '..##', '##.#', '.###', '....'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '#.##', '####', '#.##', '####']),\n  ('regression rule selection #3',\n   [['##', '..', '.#', '##', '..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..', '..', '..']),\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  ('control #1',\n   [['..', '##', '#.', '#.', '##', '.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\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":"a03a8981dd1a94279601feafd65d820fcb418e439a0373336b7f8faecd6bdc4c","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 birth if wall else n in survive) 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 = [[('regression rule selection #1',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('regression rule selection #2',\n   [['...#', '.#..', '#...', '####'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#..#', '....', '#...', '####']),\n  ('regression rule selection #3',\n   [['.#', '.#', '##', '#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..']),\n  ('regression rule selection #4', [['..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True], ['..', '..']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('control #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....'])],\n [('regression rule selection #1',\n   [['.#', '.#', '##', '#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..']),\n  ('regression rule selection #2', [['..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True], ['..', '..']),\n  ('regression rule selection #3',\n   [['.#.#.', '##...', '#.###', '#....', '#..##'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.....', '.##..', '.#...', '...#.', '.....']),\n  ('regression rule selection #4',\n   [['##', '#.', '..', '#.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['##', '##', '..', '##']),\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  ('control #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....']),\n  ('control #2', [['.#', '..'], [3], [2, 3], False], ['..', '..'])],\n [('fault site rule selection #1',\n   [['###.', '.###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.##.', '.##.']),\n  ('regression rule selection #1',\n   [['.#.#.', '##...', '#.###', '#....', '#..##'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.....', '.##..', '.#...', '...#.', '.....']),\n  ('regression rule selection #2',\n   [['##', '#.', '..', '#.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['##', '##', '..', '##']),\n  ('regression rule selection #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  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('control #1', [['.#', '..'], [3], [2, 3], False], ['..', '..']),\n  ('control #2', [['..##.#', '.#####'], [3], [2, 3], True], ['......', '......'])],\n [('regression rule selection #1',\n   [['##', '#.', '..', '#.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['##', '##', '..', '##']),\n  ('regression rule selection #2',\n   [['##.##', '###..', '#.##.', '...##', '#..#.', '##.#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.#...', '####.', '.###.', '...#.', '.....', '.....']),\n  ('regression rule selection #3',\n   [['...##', '.####', '##.##'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#.###', '#####', '#####']),\n  ('regression rule selection #4',\n   [['..#.', '..##', '##.#', '.###', '....'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '#.##', '####', '#.##', '####']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], 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], True], ['#', '#']),\n  ('control #2', [['.#..##'], [3], [2, 3], True], ['......'])],\n [('regression rule selection #1',\n   [['...##', '.####', '##.##'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#.###', '#####', '#####']),\n  ('fault site rule selection #1',\n   [['#.', '#.', '.#'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['##', '##', '##']),\n  ('regression rule selection #2',\n   [['..#.', '..##', '##.#', '.###', '....'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '#.##', '####', '#.##', '####']),\n  ('regression rule selection #3',\n   [['##', '..', '.#', '##', '..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..', '..', '..']),\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  ('control #1',\n   [['..', '##', '#.', '#.', '##', '.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\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":"5b7321e79ac9cdaabc53453a1f97dff1cd893ddfd18e4804abfda76e44bbe466","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 = [[('regression rule selection #1',\n   [['....', '###.', '##.#', '....', '.#.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '##.#', '##.#', '#..#', '#.##']),\n  ('regression rule selection #2',\n   [['...#', '.#..', '#...', '####'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#..#', '....', '#...', '####']),\n  ('regression rule selection #3',\n   [['.#', '.#', '##', '#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..']),\n  ('regression rule selection #4', [['..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True], ['..', '..']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['#.#', '...', '#.#']),\n  ('lone pillar #1', [['...', '.#.', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['...', '...', '...']),\n  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('control #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....'])],\n [('regression rule selection #1',\n   [['.#', '.#', '##', '#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..']),\n  ('regression rule selection #2', [['..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True], ['..', '..']),\n  ('regression rule selection #3',\n   [['.#.#.', '##...', '#.###', '#....', '#..##'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.....', '.##..', '.#...', '...#.', '.....']),\n  ('regression rule selection #4',\n   [['##', '#.', '..', '#.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['##', '##', '..', '##']),\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  ('control #1', [['###.', '#...'], [3], [2, 3], True], ['....', '....']),\n  ('control #2', [['.#', '..'], [3], [2, 3], False], ['..', '..'])],\n [('fault site rule selection #1',\n   [['###.', '.###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.##.', '.##.']),\n  ('regression rule selection #1',\n   [['.#.#.', '##...', '#.###', '#....', '#..##'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.....', '.##..', '.#...', '...#.', '.....']),\n  ('regression rule selection #2',\n   [['##', '#.', '..', '#.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['##', '##', '..', '##']),\n  ('regression rule selection #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  ('dense block #1', [['###', '###', '###'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False], ['.#.', '###', '.#.']),\n  ('control #1', [['.#', '..'], [3], [2, 3], False], ['..', '..']),\n  ('control #2', [['..##.#', '.#####'], [3], [2, 3], True], ['......', '......'])],\n [('regression rule selection #1',\n   [['##', '#.', '..', '#.'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['##', '##', '..', '##']),\n  ('regression rule selection #2',\n   [['##.##', '###..', '#.##.', '...##', '#..#.', '##.#.'], [5, 6, 7, 8], [4, 5, 6, 7, 8], False],\n   ['.#...', '####.', '.###.', '...#.', '.....', '.....']),\n  ('regression rule selection #3',\n   [['...##', '.####', '##.##'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#.###', '#####', '#####']),\n  ('regression rule selection #4',\n   [['..#.', '..##', '##.#', '.###', '....'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '#.##', '####', '#.##', '####']),\n  ('open field corner #1',\n   [['...', '...', '...'], [5, 6, 7, 8], [4, 5, 6, 7, 8], 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], True], ['#', '#']),\n  ('control #2', [['.#..##'], [3], [2, 3], True], ['......'])],\n [('regression rule selection #1',\n   [['...##', '.####', '##.##'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['#.###', '#####', '#####']),\n  ('fault site rule selection #1',\n   [['#.', '#.', '.#'], [6, 7, 8], [3, 4, 5, 6, 7, 8], True],\n   ['##', '##', '##']),\n  ('regression rule selection #2',\n   [['..#.', '..##', '##.#', '.###', '....'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\n   ['####', '#.##', '####', '#.##', '####']),\n  ('regression rule selection #3',\n   [['##', '..', '.#', '##', '..', '..'], [6, 7, 8], [3, 4, 5, 6, 7, 8], False],\n   ['..', '..', '..', '..', '..', '..']),\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  ('control #1',\n   [['..', '##', '#.', '#.', '##', '.#'], [5, 6, 7, 8], [4, 5, 6, 7, 8], True],\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-rule-selection","generated_at":"2026-09-29T14:50:49.281046+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 `n in survive if wall else n in birth` at the rule selection step.","root_cause":"Walls are tested against the birth set and floors against survival.","sha256":"852cc1a6e48b021fe6fb3875dca9a0203d94a5cb4dd132043025a8b67ba8bc1e","title":"Cave smoothing automaton: Birth and survival rules are swapped · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.352,"exit_code":1,"observations":[{"actual":["####","##.#","####","#.##","#.##"],"check":"regression rule selection #1","expected":["####","##.#","##.#","#..#","#.##"],"passed":false},{"actual":["####","#..#","####","####"],"check":"regression rule selection #2","expected":["#..#","....","#...","####"],"passed":false},{"actual":["..","#.","..",".."],"check":"regression rule selection #3","expected":["..","..","..",".."],"passed":false},{"actual":["##","##"],"check":"regression rule selection #4","expected":["..",".."],"passed":false},{"actual":["#.#","...","#.#"],"check":"open field corner #1","expected":["#.#","...","#.#"],"passed":true},{"actual":["...","...","..."],"check":"lone pillar #1","expected":["...","...","..."],"passed":true},{"actual":[".#.","###",".#."],"check":"dense block #1","expected":[".#.","###",".#."],"passed":true},{"actual":["....","...."],"check":"control #1","expected":["....","...."],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression rule selection #1\", \"actual\": [\"####\", \"##.#\", \"####\", \"#.##\", \"#.##\"], \"expected\": [\"####\", \"##.#\", \"##.#\", \"#..#\", \"#.##\"], \"passed\": false}, {\"check\": \"regression rule selection #2\", \"actual\": [\"####\", \"#..#\", \"####\", \"####\"], \"expected\": [\"#..#\", \"....\", \"#...\", \"####\"], \"passed\": false}, {\"check\": \"regression rule selection #3\", \"actual\": [\"..\", \"#.\", \"..\", \"..\"], \"expected\": [\"..\", \"..\", \"..\", \"..\"], \"passed\": false}, {\"check\": \"regression rule selection #4\", \"actual\": [\"##\", \"##\"], \"expected\": [\"..\", \"..\"], \"passed\": false}, {\"check\": \"open field corner #1\", \"actual\": [\"#.#\", \"...\", \"#.#\"], \"expected\": [\"#.#\", \"...\", \"#.#\"], \"passed\": true}, {\"check\": \"lone pillar #1\", \"actual\": [\"...\", \"...\", \"...\"], \"expected\": [\"...\", \"...\", \"...\"], \"passed\": true}, {\"check\": \"dense block #1\", \"actual\": [\".#.\", \"###\", \".#.\"], \"expected\": [\".#.\", \"###\", \".#.\"], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [\"....\", \"....\"], \"expected\": [\"....\", \"....\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.082,"exit_code":1,"observations":[{"actual":["####","#..#","#.#.","#.##","#.##"],"check":"regression rule selection #1","expected":["####","##.#","##.#","#..#","#.##"],"passed":false},{"actual":["###.","#..#","####","##.#"],"check":"regression rule selection #2","expected":["#..#","....","#...","####"],"passed":false},{"actual":["..","#.","..",".."],"check":"regression rule selection #3","expected":["..","..","..",".."],"passed":false},{"actual":["##","##"],"check":"regression rule selection #4","expected":["..",".."],"passed":false},{"actual":["#.#","...","#.#"],"check":"open field corner #1","expected":["#.#","...","#.#"],"passed":true},{"actual":["...","...","..."],"check":"lone pillar #1","expected":["...","...","..."],"passed":true},{"actual":[".#.","###",".#."],"check":"dense block #1","expected":[".#.","###",".#."],"passed":true},{"actual":["....","...."],"check":"control #1","expected":["....","...."],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression rule selection #1\", \"actual\": [\"####\", \"#..#\", \"#.#.\", \"#.##\", \"#.##\"], \"expected\": [\"####\", \"##.#\", \"##.#\", \"#..#\", \"#.##\"], \"passed\": false}, {\"check\": \"regression rule selection #2\", \"actual\": [\"###.\", \"#..#\", \"####\", \"##.#\"], \"expected\": [\"#..#\", \"....\", \"#...\", \"####\"], \"passed\": false}, {\"check\": \"regression rule selection #3\", \"actual\": [\"..\", \"#.\", \"..\", \"..\"], \"expected\": [\"..\", \"..\", \"..\", \"..\"], \"passed\": false}, {\"check\": \"regression rule selection #4\", \"actual\": [\"##\", \"##\"], \"expected\": [\"..\", \"..\"], \"passed\": false}, {\"check\": \"open field corner #1\", \"actual\": [\"#.#\", \"...\", \"#.#\"], \"expected\": [\"#.#\", \"...\", \"#.#\"], \"passed\": true}, {\"check\": \"lone pillar #1\", \"actual\": [\"...\", \"...\", \"...\"], \"expected\": [\"...\", \"...\", \"...\"], \"passed\": true}, {\"check\": \"dense block #1\", \"actual\": [\".#.\", \"###\", \".#.\"], \"expected\": [\".#.\", \"###\", \".#.\"], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [\"....\", \"....\"], \"expected\": [\"....\", \"....\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.076,"exit_code":0,"observations":[{"actual":["####","##.#","##.#","#..#","#.##"],"check":"regression rule selection #1","expected":["####","##.#","##.#","#..#","#.##"],"passed":true},{"actual":["#..#","....","#...","####"],"check":"regression rule selection #2","expected":["#..#","....","#...","####"],"passed":true},{"actual":["..","..","..",".."],"check":"regression rule selection #3","expected":["..","..","..",".."],"passed":true},{"actual":["..",".."],"check":"regression rule selection #4","expected":["..",".."],"passed":true},{"actual":["#.#","...","#.#"],"check":"open field corner #1","expected":["#.#","...","#.#"],"passed":true},{"actual":["...","...","..."],"check":"lone pillar #1","expected":["...","...","..."],"passed":true},{"actual":[".#.","###",".#."],"check":"dense block #1","expected":[".#.","###",".#."],"passed":true},{"actual":["....","...."],"check":"control #1","expected":["....","...."],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression rule selection #1\", \"actual\": [\"####\", \"##.#\", \"##.#\", \"#..#\", \"#.##\"], \"expected\": [\"####\", \"##.#\", \"##.#\", \"#..#\", \"#.##\"], \"passed\": true}, {\"check\": \"regression rule selection #2\", \"actual\": [\"#..#\", \"....\", \"#...\", \"####\"], \"expected\": [\"#..#\", \"....\", \"#...\", \"####\"], \"passed\": true}, {\"check\": \"regression rule selection #3\", \"actual\": [\"..\", \"..\", \"..\", \"..\"], \"expected\": [\"..\", \"..\", \"..\", \"..\"], \"passed\": true}, {\"check\": \"regression rule selection #4\", \"actual\": [\"..\", \"..\"], \"expected\": [\"..\", \"..\"], \"passed\": true}, {\"check\": \"open field corner #1\", \"actual\": [\"#.#\", \"...\", \"#.#\"], \"expected\": [\"#.#\", \"...\", \"#.#\"], \"passed\": true}, {\"check\": \"lone pillar #1\", \"actual\": [\"...\", \"...\", \"...\"], \"expected\": [\"...\", \"...\", \"...\"], \"passed\": true}, {\"check\": \"dense block #1\", \"actual\": [\".#.\", \"###\", \".#.\"], \"expected\": [\".#.\", \"###\", \".#.\"], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [\"....\", \"....\"], \"expected\": [\"....\", \"....\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}