| { | |
| "2204b7a8": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n result = [row[:] for row in grid]\n top_row = grid[0]\n bottom_row = grid[rows-1]\n left_col = [grid[r][0] for r in range(rows)]\n right_col = [grid[r][cols-1] for r in range(rows)]\n top_color = top_row[0] if all(c == top_row[0] and top_row[0] != 0 for c in top_row) else None\n bottom_color = bottom_row[0] if all(c == bottom_row[0] and bottom_row[0] != 0 for c in bottom_row) else None\n left_color = left_col[0] if all(c == left_col[0] and left_col[0] != 0 for c in left_col) else None\n right_color = right_col[0] if all(c == right_col[0] and right_col[0] != 0 for c in right_col) else None\n if top_color and bottom_color:\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] == 3:\n result[r][c] = top_color if r < rows / 2 else bottom_color\n elif left_color and right_color:\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] == 3:\n result[r][c] = left_color if c < cols / 2 else right_color\n return result\n", | |
| "22233c11": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n result = [row[:] for row in grid]\n threes = set()\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] == 3:\n threes.add((r, c))\n # Find orthogonal connected components\n visited = set()\n components = []\n for cell in threes:\n if cell in visited:\n continue\n comp = []\n stack = [cell]\n while stack:\n cr, cc = stack.pop()\n if (cr, cc) in visited:\n continue\n visited.add((cr, cc))\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, nc) in threes and (nr, nc) not in visited:\n stack.append((nr, nc))\n components.append(comp)\n # Pair components by nearest neighbor\n centers = []\n for comp in components:\n cr = sum(r for r, c in comp) / len(comp)\n cc = sum(c for r, c in comp) / len(comp)\n centers.append((cr, cc))\n paired = set()\n pairs = []\n for i in range(len(components)):\n if i in paired:\n continue\n best_j = -1\n best_dist = float('inf')\n for j in range(len(components)):\n if j == i or j in paired:\n continue\n dist = (centers[i][0]-centers[j][0])**2 + (centers[i][1]-centers[j][1])**2\n if dist < best_dist:\n best_dist = dist\n best_j = j\n if best_j >= 0:\n pairs.append((i, best_j))\n paired.add(i)\n paired.add(best_j)\n # For each pair, scale centers 3x around midpoint, rotate 90CW, place 8s\n for i, j in pairs:\n ci = centers[i]\n cj = centers[j]\n mid = ((ci[0]+cj[0])/2, (ci[1]+cj[1])/2)\n # New center for component i: scale 3x and rotate 90CW around mid\n rel_i = (ci[0]-mid[0], ci[1]-mid[1])\n scaled_i = (rel_i[0]*3, rel_i[1]*3)\n rot_i = (scaled_i[1], -scaled_i[0]) # 90CW: (r,c)->(c,-r)\n new_ci = (mid[0]+rot_i[0], mid[1]+rot_i[1])\n # Same for j\n rel_j = (cj[0]-mid[0], cj[1]-mid[1])\n scaled_j = (rel_j[0]*3, rel_j[1]*3)\n rot_j = (scaled_j[1], -scaled_j[0])\n new_cj = (mid[0]+rot_j[0], mid[1]+rot_j[1])\n # Place component i shape at new_ci center\n for r, c in components[i]:\n nr = round(r - ci[0] + new_ci[0])\n nc = round(c - ci[1] + new_ci[1])\n if 0 <= nr < rows and 0 <= nc < cols:\n result[nr][nc] = 8\n # Place component j shape at new_cj center\n for r, c in components[j]:\n nr = round(r - cj[0] + new_cj[0])\n nc = round(c - cj[1] + new_cj[1])\n if 0 <= nr < rows and 0 <= nc < cols:\n result[nr][nc] = 8\n return result\n", | |
| "2281f1f4": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n result = [row[:] for row in grid]\n pattern_cols = [c for c in range(cols) if grid[0][c] == 5]\n trigger_rows = [r for r in range(rows) if grid[r][cols-1] == 5]\n for r in trigger_rows:\n for c in pattern_cols:\n result[r][c] = 2\n return result\n", | |
| "228f6490": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n result = [row[:] for row in grid]\n # Find 5-rectangles (connected components of 5)\n visited = set()\n rectangles = []\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] == 5 and (r, c) not in visited:\n comp = set()\n stack = [(r, c)]\n while stack:\n cr, cc = stack.pop()\n if (cr, cc) in comp:\n continue\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 < rows and 0 <= nc < cols and grid[nr][nc] == 5 and (nr, nc) not in comp:\n stack.append((nr, nc))\n visited |= comp\n min_r = min(cr for cr, cc in comp)\n max_r = max(cr for cr, cc in comp)\n min_c = min(cc for cr, cc in comp)\n max_c = max(cc for cr, cc in comp)\n holes = []\n for hr in range(min_r, max_r+1):\n for hc in range(min_c, max_c+1):\n if grid[hr][hc] != 5 and (hr, hc) not in comp:\n holes.append((hr, hc))\n if holes:\n rectangles.append({\n 'cells': comp, 'holes': holes,\n 'min_r': min_r, 'max_r': max_r, 'min_c': min_c, 'max_c': max_c\n })\n # Find colored patches (non-0, non-5, not inside any rectangle)\n rect_regions = set()\n for rect in rectangles:\n for r in range(rect['min_r'], rect['max_r']+1):\n for c in range(rect['min_c'], rect['max_c']+1):\n rect_regions.add((r, c))\n color_visited = set()\n patches = []\n for r in range(rows):\n for c in range(cols):\n val = grid[r][c]\n if val != 0 and val != 5 and val != 7 and (r, c) not in color_visited and (r, c) not in rect_regions:\n comp = []\n stack = [(r, c)]\n while stack:\n cr, cc = stack.pop()\n if (cr, cc) in color_visited:\n continue\n if grid[cr][cc] != val:\n continue\n color_visited.add((cr, cc))\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 0 <= nr < rows and 0 <= nc < cols and (nr, nc) not in color_visited:\n stack.append((nr, nc))\n if comp:\n patches.append({\n 'color': val, 'cells': comp,\n 'min_r': min(cr for cr, cc in comp),\n 'max_r': max(cr for cr, cc in comp),\n 'min_c': min(cc for cr, cc in comp),\n 'max_c': max(cc for cr, cc in comp)\n })\n # Match patches to rectangles by hole shape\n for patch in patches:\n ph = patch['max_r'] - patch['min_r'] + 1\n pw = patch['max_c'] - patch['min_c'] + 1\n patch_shape = set()\n for r, c in patch['cells']:\n patch_shape.add((r - patch['min_r'], c - patch['min_c']))\n for rect in rectangles:\n hole_min_r = min(hr for hr, hc in rect['holes'])\n hole_max_r = max(hr for hr, hc in rect['holes'])\n hole_min_c = min(hc for hr, hc in rect['holes'])\n hole_max_c = max(hc for hr, hc in rect['holes'])\n hole_h = hole_max_r - hole_min_r + 1\n hole_w = hole_max_c - hole_min_c + 1\n if hole_h == ph and hole_w == pw:\n hole_shape = set()\n for hr, hc in rect['holes']:\n hole_shape.add((hr - hole_min_r, hc - hole_min_c))\n if hole_shape == patch_shape:\n for hr, hc in rect['holes']:\n result[hr][hc] = patch['color']\n for r, c in patch['cells']:\n result[r][c] = 0\n break\n return result\n", | |
| "23581191": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n result = [row[:] for row in grid]\n pos8 = pos7 = None\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] == 8: pos8 = (r, c)\n elif grid[r][c] == 7: pos7 = (r, c)\n r8, c8 = pos8\n r7, c7 = pos7\n for c in range(cols):\n if result[r8][c] == 0: result[r8][c] = 8\n for r in range(rows):\n if result[r][c8] == 0: result[r][c8] = 8\n for c in range(cols):\n if result[r7][c] == 0: result[r7][c] = 7\n for r in range(rows):\n if result[r][c7] == 0: result[r][c7] = 7\n result[r8][c7] = 2\n result[r7][c8] = 2\n return result\n", | |
| "25d8a9c8": "def solve(grid):\n result = []\n for row in grid:\n if all(v == row[0] for v in row):\n result.append([5] * len(row))\n else:\n result.append([0] * len(row))\n return result\n", | |
| "23b5c85d": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n colors = {}\n for r in range(rows):\n for c in range(cols):\n v = grid[r][c]\n if v != 0:\n if v not in colors:\n colors[v] = []\n colors[v].append((r, c))\n # Find color with fewest cells - that's the answer\n smallest_color = min(colors.keys(), key=lambda v: len(colors[v]))\n cells = colors[smallest_color]\n min_r = min(r for r, c in cells)\n max_r = max(r for r, c in cells)\n min_c = min(c for r, c in cells)\n max_c = max(c for r, c in cells)\n h = max_r - min_r + 1\n w = max_c - min_c + 1\n return [[smallest_color] * w for _ in range(h)]\n", | |
| "25d487eb": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n result = [row[:] for row in grid]\n cells = {}\n for r in range(rows):\n for c in range(cols):\n v = grid[r][c]\n if v != 0:\n if v not in cells:\n cells[v] = []\n cells[v].append((r, c))\n colors = list(cells.keys())\n if len(cells[colors[0]]) < len(cells[colors[1]]):\n point_color, body_color = colors[0], colors[1]\n else:\n point_color, body_color = colors[1], colors[0]\n pr, pc = cells[point_color][0]\n body = cells[body_color]\n body_cr = sum(r for r, c in body) / len(body)\n body_cc = sum(c for r, c in body) / len(body)\n # Direction from point toward body center (and beyond)\n dr = body_cr - pr\n dc = body_cc - pc\n if abs(dr) > abs(dc):\n direction = (1 if dr > 0 else -1, 0)\n else:\n direction = (0, 1 if dc > 0 else -1)\n # Extend line from past the body to the edge of grid\n nr, nc = pr + direction[0], pc + direction[1]\n while 0 <= nr < rows and 0 <= nc < cols:\n if result[nr][nc] == 0:\n result[nr][nc] = point_color\n nr += direction[0]\n nc += direction[1]\n return result\n", | |
| "239be575": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n # Find 2x2 blocks of 2\n blocks = []\n block_cells = set()\n for r in range(rows-1):\n for c in range(cols-1):\n if grid[r][c]==2 and grid[r][c+1]==2 and grid[r+1][c]==2 and grid[r+1][c+1]==2:\n blocks.append((r,c))\n block_cells.update([(r,c),(r,c+1),(r+1,c),(r+1,c+1)])\n # BFS from block 0 through 8s to see if it reaches block 1\n b2_cells = set()\n br2, bc2 = blocks[1]\n b2_cells = {(br2,bc2),(br2,bc2+1),(br2+1,bc2),(br2+1,bc2+1)}\n # Get starting points: cells adjacent to block 0 that are 8\n br, bc = blocks[0]\n starts = set()\n for r, c in [(br,bc),(br,bc+1),(br+1,bc),(br+1,bc+1)]:\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 block_cells and grid[nr][nc]==8:\n starts.add((nr,nc))\n visited = set()\n stack = list(starts)\n reached = False\n while stack:\n cr, cc = stack.pop()\n if (cr, cc) in visited:\n continue\n visited.add((cr, cc))\n # Check if adjacent to block 2\n for dr, dc in [(-1,0),(1,0),(0,-1),(0,1)]:\n if (cr+dr, cc+dc) in b2_cells:\n reached = True\n break\n if reached:\n break\n for dr, dc in [(-1,0),(1,0),(0,-1),(0,1)]:\n nr, nc = cr+dr, cc+dc\n if 0<=nr<rows and 0<=nc<cols and (nr,nc) not in visited and (nr,nc) not in block_cells and grid[nr][nc]==8:\n stack.append((nr,nc))\n return [[8]] if reached else [[0]]\n" | |
| } |