File size: 14,924 Bytes
c3ef0e9
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
{
  "42a50994": "def solve_42a50994(grid):\n    h, w = len(grid), len(grid[0])\n    visited = [[False]*w for _ in range(h)]\n    components = []\n    for r in range(h):\n        for c in range(w):\n            if grid[r][c] != 0 and not visited[r][c]:\n                comp = [(r,c)]\n                visited[r][c] = True\n                queue = [(r,c)]\n                while queue:\n                    cr, cc = queue.pop(0)\n                    for dr in [-1,0,1]:\n                        for dc in [-1,0,1]:\n                            if dr==0 and dc==0: continue\n                            nr, nc = cr+dr, cc+dc\n                            if 0<=nr<h and 0<=nc<w and not visited[nr][nc] and grid[nr][nc] != 0:\n                                visited[nr][nc] = True\n                                comp.append((nr,nc))\n                                queue.append((nr,nc))\n                components.append(comp)\n    out = [[0]*w for _ in range(h)]\n    for comp in components:\n        if len(comp) >= 2:\n            for r,c in comp:\n                out[r][c] = grid[r][c]\n    return out\n",
  "4347f46a": "def solve_4347f46a(grid):\n    h, w = len(grid), len(grid[0])\n    out = [row[:] for row in grid]\n    visited = [[False]*w for _ in range(h)]\n    for r in range(h):\n        for c in range(w):\n            if grid[r][c] != 0 and not visited[r][c]:\n                color = grid[r][c]\n                comp = [(r,c)]\n                visited[r][c] = True\n                queue = [(r,c)]\n                while queue:\n                    cr,cc = queue.pop(0)\n                    for dr,dc in [(-1,0),(1,0),(0,-1),(0,1)]:\n                        nr,nc = cr+dr, cc+dc\n                        if 0<=nr<h and 0<=nc<w and not visited[nr][nc] and grid[nr][nc]==color:\n                            visited[nr][nc] = True\n                            comp.append((nr,nc))\n                            queue.append((nr,nc))\n                minr = min(r for r,c in comp)\n                maxr = max(r for r,c in comp)\n                minc = min(c for r,c in comp)\n                maxc = max(c for r,c in comp)\n                for cr,cc in comp:\n                    if cr > minr and cr < maxr and cc > minc and cc < maxc:\n                        out[cr][cc] = 0\n    return out\n",
  "444801d8": "def solve_444801d8(grid):\n    h, w = len(grid), len(grid[0])\n    out = [row[:] for row in grid]\n    visited = [[False]*w for _ in range(h)]\n    boxes = []\n    for r in range(h):\n        for c in range(w):\n            if grid[r][c] == 1 and not visited[r][c]:\n                comp = set()\n                queue = [(r,c)]\n                visited[r][c] = True\n                while queue:\n                    cr,cc = queue.pop(0)\n                    comp.add((cr,cc))\n                    for dr,dc in [(-1,0),(1,0),(0,-1),(0,1)]:\n                        nr,nc = cr+dr,cc+dc\n                        if 0<=nr<h and 0<=nc<w and not visited[nr][nc] and grid[nr][nc]==1:\n                            visited[nr][nc] = True\n                            queue.append((nr,nc))\n                boxes.append(comp)\n    for box in boxes:\n        minr = min(r for r,c in box)\n        maxr = max(r for r,c in box)\n        minc = min(c for r,c in box)\n        maxc = max(c for r,c in box)\n        color = None\n        for r in range(minr, maxr+1):\n            for c in range(minc, maxc+1):\n                if grid[r][c] not in (0, 1):\n                    color = grid[r][c]\n                    break\n            if color: break\n        if not color: continue\n        top_gap = any((minr, c) not in box for c in range(minc, maxc+1))\n        bot_gap = any((maxr, c) not in box for c in range(minc, maxc+1))\n        left_gap = any((r, minc) not in box for r in range(minr, maxr+1))\n        right_gap = any((r, maxc) not in box for r in range(minr, maxr+1))\n        # Fill interior\n        for r in range(minr+1, maxr):\n            for c in range(minc+1, maxc):\n                if grid[r][c] != 1:\n                    out[r][c] = color\n        # Fill gap cells on border AND extend one row/col outside\n        if top_gap:\n            for c in range(minc, maxc+1):\n                if (minr, c) not in box:\n                    out[minr][c] = color\n            if minr > 0:\n                for c in range(minc, maxc+1):\n                    out[minr-1][c] = color\n        if bot_gap:\n            for c in range(minc, maxc+1):\n                if (maxr, c) not in box:\n                    out[maxr][c] = color\n            if maxr < h-1:\n                for c in range(minc, maxc+1):\n                    out[maxr+1][c] = color\n        if left_gap:\n            for r in range(minr, maxr+1):\n                if (r, minc) not in box:\n                    out[r][minc] = color\n            if minc > 0:\n                for r in range(minr, maxr+1):\n                    out[r][minc-1] = color\n        if right_gap:\n            for r in range(minr, maxr+1):\n                if (r, maxc) not in box:\n                    out[r][maxc] = color\n            if maxc < w-1:\n                for r in range(minr, maxr+1):\n                    out[r][maxc+1] = color\n    return out\n",
  "445eab21": "def solve_445eab21(grid):\n    h, w = len(grid), len(grid[0])\n    visited = [[False]*w for _ in range(h)]\n    rects = []\n    for r in range(h):\n        for c in range(w):\n            if grid[r][c] != 0 and not visited[r][c]:\n                color = grid[r][c]\n                comp = set()\n                queue = [(r,c)]\n                visited[r][c] = True\n                while queue:\n                    cr,cc = queue.pop(0)\n                    comp.add((cr,cc))\n                    for dr,dc in [(-1,0),(1,0),(0,-1),(0,1)]:\n                        nr,nc = cr+dr,cc+dc\n                        if 0<=nr<h and 0<=nc<w and not visited[nr][nc] and grid[nr][nc]==color:\n                            visited[nr][nc] = True\n                            queue.append((nr,nc))\n                minr = min(r for r,c in comp)\n                maxr = max(r for r,c in comp)\n                minc = min(c for r,c in comp)\n                maxc = max(c for r,c in comp)\n                interior_area = (maxr - minr - 1) * (maxc - minc - 1)\n                rects.append((color, interior_area))\n    rects.sort(key=lambda x: -x[1])\n    c = rects[0][0]\n    return [[c, c], [c, c]]\n",
  "447fd412": "def solve_447fd412(grid):\n    h, w = len(grid), len(grid[0])\n    out = [row[:] for row in grid]\n    visited = [[False]*w for _ in range(h)]\n    components = []\n    for r in range(h):\n        for c in range(w):\n            if grid[r][c] != 0 and not visited[r][c]:\n                comp = []\n                queue = [(r,c)]\n                visited[r][c] = True\n                while queue:\n                    cr,cc = queue.pop(0)\n                    comp.append((cr,cc, grid[cr][cc]))\n                    for dr,dc in [(-1,0),(1,0),(0,-1),(0,1)]:\n                        nr,nc = cr+dr,cc+dc\n                        if 0<=nr<h and 0<=nc<w and not visited[nr][nc] and grid[nr][nc]!=0:\n                            visited[nr][nc] = True\n                            queue.append((nr,nc))\n                components.append(comp)\n    template_comp = None\n    target_comps = []\n    for comp in components:\n        vals = set(v for _,_,v in comp)\n        if 1 in vals and 2 in vals:\n            template_comp = comp\n        elif vals == {2}:\n            target_comps.append(comp)\n    if template_comp is None:\n        return out\n    t1_cells = [(r,c) for r,c,v in template_comp if v == 1]\n    t2_cells = [(r,c) for r,c,v in template_comp if v == 2]\n    target_blocks = []\n    for comp in target_comps:\n        rs = [r for r,c,v in comp]\n        cs = [c for r,c,v in comp]\n        minr,maxr,minc,maxc = min(rs),max(rs),min(cs),max(cs)\n        bh = maxr - minr + 1\n        bw = maxc - minc + 1\n        target_blocks.append((minr,maxr,minc,maxc,bh,bw))\n    if len(t2_cells) == 1:\n        t2r, t2c = t2_cells[0]\n        for blk in target_blocks:\n            minr,maxr,minc,maxc,bh,bw = blk\n            scale = max(bh, bw)\n            for r1, c1 in t1_cells:\n                dr = r1 - t2r\n                dc = c1 - t2c\n                for rr in range(scale):\n                    for cc in range(scale):\n                        nr = minr + dr * scale + rr\n                        nc = minc + dc * scale + cc\n                        if 0 <= nr < h and 0 <= nc < w and out[nr][nc] == 0:\n                            out[nr][nc] = 1\n    elif len(t2_cells) == 2:\n        t2a, t2b = t2_cells[0], t2_cells[1]\n        t_dr = t2b[0] - t2a[0]\n        t_dc = t2b[1] - t2a[1]\n        used = [False] * len(target_blocks)\n        for i in range(len(target_blocks)):\n            if used[i]: continue\n            for j in range(i+1, len(target_blocks)):\n                if used[j]: continue\n                bi = target_blocks[i]\n                bj = target_blocks[j]\n                for ba, bb in [(bi, bj), (bj, bi)]:\n                    scale = max(ba[4], ba[5])\n                    exp_r = ba[0] + t_dr * scale\n                    exp_c = ba[2] + t_dc * scale\n                    if exp_r == bb[0] and exp_c == bb[2]:\n                        used[i] = True\n                        used[j] = True\n                        for r1, c1 in t1_cells:\n                            dr = r1 - t2a[0]\n                            dc = c1 - t2a[1]\n                            for rr in range(scale):\n                                for cc in range(scale):\n                                    nr = ba[0] + dr * scale + rr\n                                    nc = ba[2] + dc * scale + cc\n                                    if 0 <= nr < h and 0 <= nc < w and out[nr][nc] == 0:\n                                        out[nr][nc] = 1\n                        break\n                if used[i]:\n                    break\n    return out\n",
  "44d8ac46": "def solve_44d8ac46(grid):\n    h, w = len(grid), len(grid[0])\n    out = [row[:] for row in grid]\n    visited = [[False]*w for _ in range(h)]\n    for r in range(h):\n        for c in range(w):\n            if grid[r][c] == 5 and not visited[r][c]:\n                comp = set()\n                queue = [(r,c)]\n                visited[r][c] = True\n                while queue:\n                    cr,cc = queue.pop(0)\n                    comp.add((cr,cc))\n                    for dr,dc in [(-1,0),(1,0),(0,-1),(0,1)]:\n                        nr,nc = cr+dr,cc+dc\n                        if 0<=nr<h and 0<=nc<w and not visited[nr][nc] and grid[nr][nc]==5:\n                            visited[nr][nc] = True\n                            queue.append((nr,nc))\n                minr = min(r for r,c in comp)\n                maxr = max(r for r,c in comp)\n                minc = min(c for r,c in comp)\n                maxc = max(c for r,c in comp)\n                interior_zeros = []\n                for r2 in range(minr+1, maxr):\n                    for c2 in range(minc+1, maxc):\n                        if grid[r2][c2] == 0:\n                            interior_zeros.append((r2,c2))\n                if not interior_zeros:\n                    continue\n                zr = [r for r,c in interior_zeros]\n                zc = [c for r,c in interior_zeros]\n                zminr, zmaxr = min(zr), max(zr)\n                zminc, zmaxc = min(zc), max(zc)\n                zh = zmaxr - zminr + 1\n                zw = zmaxc - zminc + 1\n                if len(interior_zeros) != zh * zw:\n                    continue\n                if zh != zw:\n                    continue\n                for r2,c2 in interior_zeros:\n                    out[r2][c2] = 2\n    return out\n",
  "44f52bb0": "def solve_44f52bb0(grid):\n    h, w = len(grid), len(grid[0])\n    symmetric = all(grid[r][c] == grid[r][w-1-c] for r in range(h) for c in range(w))\n    return [[1]] if symmetric else [[7]]\n",
  "4522001f": "def solve_4522001f(grid):\n    nz = set()\n    for r in range(3):\n        for c in range(3):\n            if grid[r][c] != 0:\n                nz.add((r,c))\n    block_r, block_c = 0, 0\n    for r0 in range(2):\n        for c0 in range(2):\n            if all((r0+dr, c0+dc) in nz for dr in range(2) for dc in range(2)):\n                block_r, block_c = r0, c0\n    out = [[0]*9 for _ in range(9)]\n    if block_r == 0 and block_c == 0:\n        blocks = [(0,0), (4,4)]\n    elif block_r == 0 and block_c == 1:\n        blocks = [(0,5), (4,1)]\n    elif block_r == 1 and block_c == 0:\n        blocks = [(5,0), (1,4)]\n    else:\n        blocks = [(1,1), (5,5)]\n    for br, bc in blocks:\n        for dr in range(4):\n            for dc in range(4):\n                if 0 <= br+dr < 9 and 0 <= bc+dc < 9:\n                    out[br+dr][bc+dc] = 3\n    return out\n",
  "4612dd53": "def solve_4612dd53(grid):\n    h, w = len(grid), len(grid[0])\n    out = [row[:] for row in grid]\n    ones = [(r,c) for r in range(h) for c in range(w) if grid[r][c] == 1]\n    if not ones:\n        return out\n    minr = min(r for r,c in ones)\n    maxr = max(r for r,c in ones)\n    minc = min(c for r,c in ones)\n    maxc = max(c for r,c in ones)\n\n    def has_consecutive(seq):\n        for i in range(len(seq)-1):\n            if seq[i]==1 and seq[i+1]==1:\n                return True\n        return False\n\n    wall_rows = set()\n    for r in range(minr, maxr+1):\n        row = [grid[r][c] for c in range(minc, maxc+1)]\n        if has_consecutive(row):\n            wall_rows.add(r)\n    wall_cols = set()\n    for c in range(minc, maxc+1):\n        col = [grid[r][c] for r in range(minr, maxr+1)]\n        if has_consecutive(col):\n            wall_cols.add(c)\n\n    wc_min = min(wall_cols)\n    wc_max = max(wall_cols)\n    wr_min = min(wall_rows)\n    wr_max = max(wall_rows)\n\n    for r in wall_rows:\n        for c in range(wc_min, wc_max+1):\n            if out[r][c] == 0:\n                out[r][c] = 2\n    for c in wall_cols:\n        for r in range(wr_min, wr_max+1):\n            if out[r][c] == 0:\n                out[r][c] = 2\n    return out\n",
  "46442a0e": "def solve_46442a0e(grid):\n    n = len(grid)\n    m = len(grid[0])\n    def rot90cw(g):\n        return [[g[n-1-j][i] for j in range(n)] for i in range(m)]\n    def rot90ccw(g):\n        return [[g[j][m-1-i] for j in range(n)] for i in range(m)]\n    def rot180(g):\n        return [[g[n-1-r][m-1-c] for c in range(m)] for r in range(n)]\n    tr = rot90cw(grid)\n    bl = rot90ccw(grid)\n    br = rot180(grid)\n    out = [[0]*(2*m) for _ in range(2*n)]\n    for r in range(n):\n        for c in range(m):\n            out[r][c] = grid[r][c]\n            out[r][m+c] = tr[r][c]\n            out[n+r][c] = bl[r][c]\n            out[n+r][m+c] = br[r][c]\n    return out\n"
}