| { | |
| "97d7923e": "def solve(grid):\n import copy\n grid = [list(row) for row in grid]\n rows, cols = len(grid), len(grid[0])\n out = copy.deepcopy(grid)\n \n legend = {}\n for c in range(cols):\n r = 0\n if grid[0][c] == 0:\n continue\n val = grid[0][c]\n count = 0\n while r < rows and grid[r][c] == val:\n count += 1\n r += 1\n legend[val] = count\n \n sticks_by_bookend = {}\n for c in range(cols):\n col = [grid[r][c] for r in range(rows)]\n seg_start = None\n for r in range(rows + 1):\n v = col[r] if r < rows else 0\n if v != 0:\n if seg_start is None:\n seg_start = r\n else:\n if seg_start is not None:\n seg = col[seg_start:r]\n if len(seg) >= 3 and seg[0] == seg[-1]:\n bk = seg[0]\n has_fill = any(v != bk for v in seg)\n if has_fill:\n if bk not in sticks_by_bookend:\n sticks_by_bookend[bk] = []\n sticks_by_bookend[bk].append((c, seg_start, r - 1))\n seg_start = None\n \n for bk, sticks in sticks_by_bookend.items():\n if bk not in legend:\n continue\n n = legend[bk]\n sticks_sorted = sorted(sticks, key=lambda s: s[1])\n if n <= len(sticks_sorted):\n target = sticks_sorted[n - 1]\n col_idx, s_start, s_end = target\n for r in range(s_start, s_end + 1):\n out[r][col_idx] = bk\n \n return out", | |
| "981571dc": "def solve(grid):\n import copy\n g = [list(row) for row in grid]\n rows, cols = len(g), len(g[0])\n K = rows + 1\n changed = True\n while changed:\n changed = False\n for r in range(rows):\n for c in range(cols):\n if g[r][c] == 0:\n if c < rows and r < cols and g[c][r] != 0:\n g[r][c] = g[c][r]\n changed = True\n continue\n mr = K - r\n if 0 <= mr < rows and g[mr][c] != 0:\n g[r][c] = g[mr][c]\n changed = True\n continue\n mc = K - c\n if 0 <= mc < cols and g[r][mc] != 0:\n g[r][c] = g[r][mc]\n changed = True\n continue\n return g", | |
| "a251c730": "def solve(grid):\n from collections import Counter, deque\n grid = [list(row) for row in grid]\n rows, cols = len(grid), len(grid[0])\n \n frames = []\n for r1 in range(rows - 2):\n for c1 in range(cols - 2):\n color = grid[r1][c1]\n c2 = c1\n while c2 + 1 < cols and grid[r1][c2 + 1] == color:\n c2 += 1\n if c2 - c1 < 4:\n continue\n if c1 > 0 and grid[r1][c1 - 1] == color:\n continue\n r2 = r1\n while r2 + 1 < rows and grid[r2 + 1][c1] == color:\n r2 += 1\n if r2 - r1 < 4:\n continue\n if not all(grid[r][c2] == color for r in range(r1, r2 + 1)):\n continue\n if not all(grid[r2][c] == color for c in range(c1, c2 + 1)):\n continue\n interior_frame_count = sum(\n 1 for r in range(r1+1, r2) for c in range(c1+1, c2) if grid[r][c] == color\n )\n interior_total = (r2 - r1 - 1) * (c2 - c1 - 1)\n if interior_frame_count <= max(5, interior_total * 0.1):\n frames.append((color, r1, r2, c1, c2))\n \n frames.sort(key=lambda f: (f[2]-f[1])*(f[4]-f[3]), reverse=True)\n frames = frames[:2]\n \n def get_interior(frame):\n color, r1, r2, c1, c2 = frame\n cells = {}\n for r in range(r1+1, r2):\n for c in range(c1+1, c2):\n cells[(r, c)] = grid[r][c]\n bg = Counter(cells.values()).most_common(1)[0][0]\n non_bg = {pos: v for pos, v in cells.items() if v != bg}\n return bg, non_bg\n \n bg0, nb0 = get_interior(frames[0])\n bg1, nb1 = get_interior(frames[1])\n \n vals0 = set(nb0.values())\n vals1 = set(nb1.values())\n common = vals0 & vals1\n \n if len(nb0) > len(nb1):\n template, canvas = frames[0], frames[1]\n t_bg, c_bg = bg0, bg1\n t_nb, c_nb = nb0, nb1\n else:\n template, canvas = frames[1], frames[0]\n t_bg, c_bg = bg1, bg0\n t_nb, c_nb = nb1, nb0\n \n if common:\n marker = list(common)[0]\n else:\n marker = list(set(c_nb.values()))[0]\n \n t_color, t_r1, t_r2, t_c1, t_c2 = template\n c_color, c_r1, c_r2, c_c1, c_c2 = canvas\n \n visited = set()\n first_comp = None\n for r in range(t_r1+1, t_r2):\n for c in range(t_c1+1, t_c2):\n if grid[r][c] != t_bg and (r,c) not in visited:\n comp = []\n queue = deque([(r,c)])\n visited.add((r,c))\n while queue:\n cr, cc = queue.popleft()\n comp.append((cr, cc, grid[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 t_r1 < nr < t_r2 and t_c1 < nc < t_c2 and (nr,nc) not in visited and grid[nr][nc] != t_bg:\n visited.add((nr,nc))\n queue.append((nr,nc))\n if first_comp is None:\n first_comp = comp\n \n marker_pos = None\n for r, c, v in first_comp:\n if v == marker:\n marker_pos = (r, c)\n break\n \n if marker_pos is None:\n return grid\n \n pattern = [(r - marker_pos[0], c - marker_pos[1], v) for r, c, v in first_comp]\n \n out_rows = c_r2 - c_r1 + 1\n out_cols = c_c2 - c_c1 + 1\n output = [[grid[r][c] for c in range(c_c1, c_c2+1)] for r in range(c_r1, c_r2+1)]\n \n markers = [(r, c) for r in range(1, out_rows-1) for c in range(1, out_cols-1) if output[r][c] == marker]\n \n for er, ec in markers:\n for dr, dc, val in pattern:\n nr, nc = er+dr, ec+dc\n if 1 <= nr < out_rows-1 and 1 <= nc < out_cols-1:\n output[nr][nc] = val\n \n return output", | |
| "8f3a5a89": "def solve(grid):\n from collections import deque\n grid = [list(row) for row in grid]\n rows, cols = len(grid), len(grid[0])\n start = None\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] == 6:\n start = (r, c)\n visited = set()\n queue = deque([start])\n visited.add(start)\n while queue:\n r, c = queue.popleft()\n for dr, dc in [(-1,0),(1,0),(0,-1),(0,1)]:\n nr, nc = r+dr, c+dc\n if 0 <= nr < rows and 0 <= nc < cols and (nr,nc) not in visited:\n if grid[nr][nc] != 1:\n visited.add((nr,nc))\n queue.append((nr,nc))\n one_visited = set()\n ones_to_keep = set()\n wall_ones = set()\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] == 1 and (r,c) not in one_visited:\n comp = []\n q = deque([(r,c)])\n one_visited.add((r,c))\n adj_flood = False\n adj_outside = False\n while q:\n cr, cc = q.popleft()\n comp.append((cr, cc))\n for dr, dc in [(-1,0),(1,0),(0,-1),(0,1)]:\n nr, nc = cr+dr, cc+dc\n if nr < 0 or nr >= rows or nc < 0 or nc >= cols:\n adj_outside = True\n elif grid[nr][nc] == 1 and (nr,nc) not in one_visited:\n one_visited.add((nr,nc))\n q.append((nr,nc))\n elif (nr,nc) in visited:\n adj_flood = True\n elif grid[nr][nc] != 1:\n adj_outside = True\n if adj_flood:\n for cell in comp:\n ones_to_keep.add(cell)\n if adj_outside:\n for cell in comp:\n wall_ones.add(cell)\n out = [[8]*cols for _ in range(rows)]\n out[start[0]][start[1]] = 6\n for r, c in ones_to_keep:\n out[r][c] = 1\n for r, c in visited:\n if grid[r][c] == 6:\n continue\n is_border = False\n if r == 0 or r == rows-1 or c == 0 or c == cols-1:\n is_border = True\n if not is_border:\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 = r+dr, c+dc\n if 0 <= nr < rows and 0 <= nc < cols and (nr,nc) in wall_ones:\n is_border = True\n break\n if is_border: break\n if not is_border:\n for dr, dc in [(-1,0),(1,0),(0,-1),(0,1)]:\n nr, nc = r+dr, c+dc\n if 0 <= nr < rows and 0 <= nc < cols and grid[nr][nc] == 6:\n is_border = True\n break\n if is_border:\n out[r][c] = 7\n return out", | |
| "a395ee82": "def solve(grid):\n from collections import Counter, deque\n grid = [list(row) for row in grid]\n rows, cols = len(grid), len(grid[0])\n bg = Counter(v for r in grid for v in r).most_common(1)[0][0]\n non_bg = {}\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] != bg:\n non_bg[(r,c)] = grid[r][c]\n visited_cells = set()\n components = []\n for (r,c) in non_bg:\n if (r,c) in visited_cells:\n continue\n comp = []\n q = deque([(r,c)])\n visited_cells.add((r,c))\n while q:\n cr, cc = q.popleft()\n comp.append((cr, cc, non_bg[(cr,cc)]))\n for dr, dc in [(-1,0),(1,0),(0,-1),(0,1)]:\n nr, nc = cr+dr, cc+dc\n if (nr,nc) in non_bg and (nr,nc) not in visited_cells:\n visited_cells.add((nr,nc))\n q.append((nr,nc))\n components.append(comp)\n template_comp = max(components, key=len)\n template_color = template_comp[0][2]\n template_cells = [(r,c) for r,c,v in template_comp]\n min_r = min(r for r,c in template_cells)\n max_r = max(r for r,c in template_cells)\n min_c = min(c for r,c in template_cells)\n max_c = max(c for r,c in template_cells)\n t_height = max_r - min_r + 1\n t_width = max_c - min_c + 1\n center_r = (min_r + max_r) / 2.0\n center_c = (min_c + max_c) / 2.0\n template_rel = [(r - center_r, c - center_c) for r,c in template_cells]\n single_cells = [comp for comp in components if len(comp) == 1]\n ref_marker = None\n other_markers = []\n for comp in single_cells:\n r, c, v = comp[0]\n if v == template_color:\n ref_marker = (r, c)\n else:\n other_markers.append((r, c, v))\n if ref_marker is None:\n return grid\n marker_color = other_markers[0][2] if other_markers else None\n scale_r = t_height / 2.0\n scale_c = t_width / 2.0\n out = [row[:] for row in grid]\n for mr, mc, mv in other_markers:\n dr = mr - ref_marker[0]\n dc = mc - ref_marker[1]\n stamp_dr = dr * scale_r\n stamp_dc = dc * scale_c\n stamp_cr = center_r + stamp_dr\n stamp_cc = center_c + stamp_dc\n for tr, tc in template_rel:\n nr = int(round(stamp_cr + tr))\n nc = int(round(stamp_cc + tc))\n if 0 <= nr < rows and 0 <= nc < cols:\n out[nr][nc] = template_color\n for r, c in template_cells:\n out[r][c] = marker_color\n out[ref_marker[0]][ref_marker[1]] = bg\n for mr, mc, mv in other_markers:\n out[mr][mc] = bg\n return out" | |
| } |