File size: 13,324 Bytes
cadb211
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
{
  "3bdb4ada": "def solve(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                r_min, r_max = r, r\n                c_min, c_max = c, c\n                while r_max + 1 < h and grid[r_max+1][c] == color:\n                    r_max += 1\n                while c_max + 1 < w and grid[r][c_max+1] == color:\n                    c_max += 1\n                for rr in range(r_min, r_max+1):\n                    for cc in range(c_min, c_max+1):\n                        visited[rr][cc] = True\n                if r_max - r_min == 2:\n                    mid = r_min + 1\n                    for cc in range(c_min, c_max+1):\n                        if (cc - c_min) % 2 == 1:\n                            out[mid][cc] = 0\n    return out\n",
  "3befdf3e": "def solve(grid):\n    h, w = len(grid), len(grid[0])\n    out = [row[:] for row in grid]\n    cells = [(r,c) for r in range(h) for c in range(w) if grid[r][c] != 0]\n    r_min = min(r for r,c in cells)\n    r_max = max(r for r,c in cells)\n    c_min = min(c for r,c in cells)\n    c_max = max(c for r,c in cells)\n    border_color = grid[r_min][c_min]\n    inner_color = None\n    for r in range(r_min+1, r_max):\n        for c in range(c_min+1, c_max):\n            if grid[r][c] != border_color:\n                inner_color = grid[r][c]\n                break\n        if inner_color: break\n    inner_h = r_max - r_min - 1\n    inner_w = c_max - c_min - 1\n    for r in range(r_min, r_max+1):\n        for c in range(c_min, c_max+1):\n            out[r][c] = inner_color if grid[r][c] == border_color else border_color\n    for dr in range(1, inner_h+1):\n        for c in range(c_min, c_max+1):\n            if r_min-dr >= 0: out[r_min-dr][c] = border_color\n            if r_max+dr < h: out[r_max+dr][c] = border_color\n    for dc in range(1, inner_w+1):\n        for r in range(r_min, r_max+1):\n            if c_min-dc >= 0: out[r][c_min-dc] = border_color\n            if c_max+dc < w: out[r][c_max+dc] = border_color\n    return out\n",
  "3de23699": "def solve(grid):\n    h, w = len(grid), len(grid[0])\n    color_positions = {}\n    for r in range(h):\n        for c in range(w):\n            if grid[r][c] != 0:\n                color_positions.setdefault(grid[r][c], []).append((r, c))\n    marker_color = None\n    for color, positions in color_positions.items():\n        if len(positions) == 4:\n            rows = set(r for r, c in positions)\n            cols = set(c for r, c in positions)\n            if len(rows) == 2 and len(cols) == 2:\n                marker_color = color\n    fill_color = next(c for c in color_positions if c != marker_color)\n    mp = color_positions[marker_color]\n    r_min, r_max = min(r for r,c in mp), max(r for r,c in mp)\n    c_min, c_max = min(c for r,c in mp), max(c for r,c in mp)\n    inner = []\n    for r in range(r_min+1, r_max):\n        row = []\n        for c in range(c_min+1, c_max):\n            row.append(marker_color if grid[r][c] == fill_color else 0)\n        inner.append(row)\n    return inner\n",
  "3e980e27": "def solve(grid):\n    h, w = len(grid), len(grid[0])\n    out = [row[:] for row in grid]\n    from collections import deque\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                q = deque([(r, c)])\n                visited[r][c] = True\n                cells = []\n                while q:\n                    cr, cc = q.popleft()\n                    cells.append((cr, cc))\n                    for dr, dc in [(-1,0),(1,0),(0,-1),(0,1),(-1,-1),(-1,1),(1,-1),(1,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                            q.append((nr, nc))\n                components.append(cells)\n    lone_points = []\n    templates_list = []\n    for comp in components:\n        colors = set(grid[r][c] for r, c in comp)\n        if len(colors) > 1:\n            templates_list.append(comp)\n        elif len(comp) == 1:\n            lone_points.append(comp[0])\n    lone_colors = set(grid[r][c] for r, c in lone_points)\n    template_info = {}\n    for tmpl in templates_list:\n        colors = set(grid[r][c] for r, c in tmpl)\n        acs = colors & lone_colors\n        if not acs: continue\n        ac = acs.pop()\n        anchor_pos = next((r,c) for r,c in tmpl if grid[r][c] == ac)\n        shape = [(r-anchor_pos[0], c-anchor_pos[1], grid[r][c]) for r,c in tmpl]\n        template_info[ac] = shape\n    for lr, lc in lone_points:\n        ac = grid[lr][lc]\n        if ac in template_info:\n            shape = template_info[ac]\n            for dr, dc, color in shape:\n                if ac == 2:\n                    nr, nc = lr + dr, lc - dc\n                else:\n                    nr, nc = lr + dr, lc + dc\n                if 0 <= nr < h and 0 <= nc < w:\n                    out[nr][nc] = color\n    return out\n",
  "3eda0437": "def solve(grid):\n    h, w = len(grid), len(grid[0])\n    out = [row[:] for row in grid]\n    best = None\n    best_area = 0\n    for r1 in range(h):\n        for r2 in range(r1+1, h):\n            rh = r2 - r1 + 1\n            if h > 2 and rh >= h:\n                continue\n            c = 0\n            while c < w:\n                if all(grid[r][c] == 0 for r in range(r1, r2+1)):\n                    c_start = c\n                    while c < w and all(grid[r][c] == 0 for r in range(r1, r2+1)):\n                        c += 1\n                    c_end = c - 1\n                    area = rh * (c_end - c_start + 1)\n                    if area > best_area:\n                        best_area = area\n                        best = (r1, r2, c_start, c_end)\n                else:\n                    c += 1\n    if best:\n        for r in range(best[0], best[1]+1):\n            for c in range(best[2], best[3]+1):\n                out[r][c] = 6\n    return out\n",
  "3f7978a0": "def solve(grid):\n    h, w = len(grid), len(grid[0])\n    fives = [(r,c) for r in range(h) for c in range(w) if grid[r][c] == 5]\n    if not fives:\n        return grid\n    r_min = min(r for r,c in fives)\n    r_max = max(r for r,c in fives)\n    c_min = min(c for r,c in fives)\n    c_max = max(c for r,c in fives)\n    rect_r_min = r_min - 1\n    rect_r_max = r_max + 1\n    out = []\n    for r in range(rect_r_min, rect_r_max + 1):\n        row = []\n        for c in range(c_min, c_max + 1):\n            row.append(grid[r][c])\n        out.append(row)\n    return out\n",
  "40853293": "def solve(grid):\n    h, w = len(grid), len(grid[0])\n    out = [row[:] for row in grid]\n    color_positions = {}\n    for r in range(h):\n        for c in range(w):\n            if grid[r][c] != 0:\n                color_positions.setdefault(grid[r][c], []).append((r, c))\n    h_lines = []\n    v_lines = []\n    for color, positions in color_positions.items():\n        if len(positions) == 2:\n            (r1, c1), (r2, c2) = positions\n            if r1 == r2:\n                h_lines.append((color, r1, min(c1,c2), max(c1,c2)))\n            elif c1 == c2:\n                v_lines.append((color, c1, min(r1,r2), max(r1,r2)))\n    for color, row, c1, c2 in h_lines:\n        for c in range(c1, c2+1):\n            out[row][c] = color\n    for color, col, r1, r2 in v_lines:\n        for r in range(r1, r2+1):\n            out[r][col] = color\n    return out\n",
  "4093f84a": "def solve(grid):\n    h, w = len(grid), len(grid[0])\n    out = [row[:] for row in grid]\n    band_rows = [r for r in range(h) if all(grid[r][c] == 5 for c in range(w))]\n    band_cols = [c for c in range(w) if all(grid[r][c] == 5 for r in range(h))]\n    if band_rows:\n        band_r_min = min(band_rows)\n        band_r_max = max(band_rows)\n        for c in range(w):\n            above = sorted([r for r in range(band_r_min) if grid[r][c] != 0 and grid[r][c] != 5], reverse=True)\n            target_row = band_r_min - 1\n            for r in above:\n                out[r][c] = 0\n                out[target_row][c] = 5\n                target_row -= 1\n            below = sorted([r for r in range(band_r_max+1, h) if grid[r][c] != 0 and grid[r][c] != 5])\n            target_row = band_r_max + 1\n            for r in below:\n                out[r][c] = 0\n                out[target_row][c] = 5\n                target_row += 1\n    elif band_cols:\n        band_c_min = min(band_cols)\n        band_c_max = max(band_cols)\n        for r in range(h):\n            left = sorted([c for c in range(band_c_min) if grid[r][c] != 0 and grid[r][c] != 5], reverse=True)\n            target_col = band_c_min - 1\n            for c in left:\n                out[r][c] = 0\n                out[r][target_col] = 5\n                target_col -= 1\n            right = sorted([c for c in range(band_c_max+1, w) if grid[r][c] != 0 and grid[r][c] != 5])\n            target_col = band_c_max + 1\n            for c in right:\n                out[r][c] = 0\n                out[r][target_col] = 5\n                target_col += 1\n    return out\n",
  "41e4d17e": "def solve(grid):\n    h, w = len(grid), len(grid[0])\n    out = [row[:] for row in grid]\n    from collections import deque\n    visited = [[False]*w for _ in range(h)]\n    rectangles = []\n    for r in range(h):\n        for c in range(w):\n            if grid[r][c] == 1 and not visited[r][c]:\n                q = deque([(r, c)])\n                visited[r][c] = True\n                cells = [(r, c)]\n                while q:\n                    cr, cc = q.popleft()\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                            q.append((nr, nc))\n                            cells.append((nr, nc))\n                r_min = min(r for r,c in cells)\n                r_max = max(r for r,c in cells)\n                c_min = min(c for r,c in cells)\n                c_max = max(c for r,c in cells)\n                rectangles.append((r_min, r_max, c_min, c_max))\n    for r_min, r_max, c_min, c_max in rectangles:\n        center_r = (r_min + r_max) // 2\n        center_c = (c_min + c_max) // 2\n        for r in range(h):\n            if grid[r][center_c] != 1:\n                out[r][center_c] = 6\n        for c in range(w):\n            if grid[center_r][c] != 1:\n                out[center_r][c] = 6\n    return out\n",
  "4290ef0e": "def solve(grid):\n    h, w = len(grid), len(grid[0])\n    bg = grid[0][0]\n    by_color = {}\n    for r in range(h):\n        for c in range(w):\n            if grid[r][c] != bg:\n                by_color.setdefault(grid[r][c], []).append((r, c))\n    frames = []\n    for color, cells in by_color.items():\n        r_min = min(r for r, c in cells)\n        r_max = max(r for r, c in cells)\n        c_min = min(c for r, c in cells)\n        c_max = max(c for r, c in cells)\n        fh = r_max - r_min + 1\n        fw = c_max - c_min + 1\n        max_dim = max(fh, fw)\n        if max_dim % 2 == 0:\n            max_dim += 1\n        if len(cells) == 1:\n            corner = 0\n        else:\n            pattern = [[bg] * fw for _ in range(fh)]\n            for r, c in cells:\n                pattern[r - r_min][c - c_min] = color\n            corner_h = 0\n            for c in range(fw):\n                if pattern[0][c] == color:\n                    corner_h += 1\n                else:\n                    break\n            corner_v = 0\n            for r in range(fh):\n                if pattern[r][0] == color:\n                    corner_v += 1\n                else:\n                    break\n            if fw <= fh:\n                corner = corner_h\n            else:\n                corner = corner_v\n        frames.append((max_dim, color, corner))\n    frames.sort()\n    if not frames:\n        return grid\n    max_size = frames[-1][0]\n    out_size = max_size\n    center = out_size // 2\n    out = [[bg] * out_size for _ in range(out_size)]\n    for ring_size, color, corner in reversed(frames):\n        if ring_size == 1:\n            out[center][center] = color\n            continue\n        half = ring_size // 2\n        for dr in range(-half, half + 1):\n            for dc in range(-half, half + 1):\n                if max(abs(dr), abs(dc)) != half:\n                    continue\n                r = center + dr\n                c = center + dc\n                colored = False\n                if abs(dr) == half and abs(dc) == half:\n                    colored = True\n                elif abs(dr) == half:\n                    colored = (abs(dc) >= half - corner + 1)\n                elif abs(dc) == half:\n                    colored = (abs(dr) >= half - corner + 1)\n                if colored:\n                    out[r][c] = color\n    return out\n"
}