{ "272f95fa": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n output = [row[:] for row in grid]\n h_lines = []\n v_lines = []\n for r in range(rows):\n if all(grid[r][c] == 8 for c in range(cols)):\n h_lines.append(r)\n for c in range(cols):\n if all(grid[r][c] == 8 for r in range(rows)):\n v_lines.append(c)\n row_bands = [(0, h_lines[0]-1), (h_lines[0]+1, h_lines[1]-1), (h_lines[1]+1, rows-1)]\n col_bands = [(0, v_lines[0]-1), (v_lines[0]+1, v_lines[1]-1), (v_lines[1]+1, cols-1)]\n color_map = {\n (0,0): 0, (0,1): 2, (0,2): 0,\n (1,0): 4, (1,1): 6, (1,2): 3,\n (2,0): 0, (2,1): 1, (2,2): 0,\n }\n for ri, (r1, r2) in enumerate(row_bands):\n for ci, (c1, c2) in enumerate(col_bands):\n color = color_map[(ri, ci)]\n for r in range(r1, r2+1):\n for c in range(c1, c2+1):\n if grid[r][c] == 0:\n output[r][c] = color\n return output", "29ec7d0e": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n output = [row[:] for row in grid]\n for rp in range(1, rows+1):\n for cp in range(1, cols+1):\n valid = True\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] != 0:\n for r2 in range(rows):\n for c2 in range(cols):\n if grid[r2][c2] != 0 and r % rp == r2 % rp and c % cp == c2 % cp:\n if grid[r][c] != grid[r2][c2]:\n valid = False\n break\n if not valid:\n break\n if not valid:\n break\n if not valid:\n break\n if valid:\n tile = {}\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] != 0:\n tile[(r % rp, c % cp)] = grid[r][c]\n if len(tile) == rp * cp:\n for r in range(rows):\n for c in range(cols):\n key = (r % rp, c % cp)\n if key in tile:\n output[r][c] = tile[key]\n return output\n return output", "32597951": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n output = [row[:] for row in grid]\n eight_cells = set()\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] == 8:\n eight_cells.add((r, c))\n if not eight_cells:\n return output\n rs = [c[0] for c in eight_cells]\n cs = [c[1] for c in eight_cells]\n rmin, rmax = min(rs), max(rs)\n cmin, cmax = min(cs), max(cs)\n for r in range(rmin, rmax + 1):\n for c in range(cmin, cmax + 1):\n if grid[r][c] not in (0, 8):\n output[r][c] = 3\n return output", "3345333e": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n output = [row[:] for row in grid]\n color_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 color_cells:\n color_cells[v] = []\n color_cells[v].append((r, c))\n if len(color_cells) < 2:\n return output\n def is_rectangle(cells):\n if not cells:\n return False\n rs = [c[0] for c in cells]\n cs = [c[1] for c in cells]\n rmin, rmax = min(rs), max(rs)\n cmin, cmax = min(cs), max(cs)\n return len(cells) == (rmax - rmin + 1) * (cmax - cmin + 1)\n overlay_color = None\n shape_color = None\n for color, cells in color_cells.items():\n if is_rectangle(cells):\n overlay_color = color\n else:\n shape_color = color\n if overlay_color is None or shape_color is None:\n return output\n overlay_cells = set(color_cells[overlay_color])\n shape_cells = set(color_cells[shape_color])\n for r, c in overlay_cells:\n output[r][c] = 0\n shape_cs = [c[1] for c in shape_cells]\n shape_rs = [c[0] for c in shape_cells]\n c_center = (min(shape_cs) + max(shape_cs)) / 2.0\n r_center = (min(shape_rs) + max(shape_rs)) / 2.0\n lr_valid = True\n for r, c in shape_cells:\n mirror_c = round(2 * c_center - c)\n if 0 <= mirror_c < cols:\n if (r, mirror_c) not in shape_cells and (r, mirror_c) not in overlay_cells:\n lr_valid = False\n break\n tb_valid = True\n for r, c in shape_cells:\n mirror_r = round(2 * r_center - r)\n if 0 <= mirror_r < rows:\n if (mirror_r, c) not in shape_cells and (mirror_r, c) not in overlay_cells:\n tb_valid = False\n break\n if lr_valid:\n for r, c in shape_cells:\n mirror_c = round(2 * c_center - c)\n if 0 <= mirror_c < cols and (r, mirror_c) in overlay_cells:\n output[r][mirror_c] = shape_color\n if tb_valid:\n for r, c in shape_cells:\n mirror_r = round(2 * r_center - r)\n if 0 <= mirror_r < rows and (mirror_r, c) in overlay_cells:\n output[mirror_r][c] = shape_color\n if lr_valid and tb_valid:\n for r, c in shape_cells:\n mirror_r = round(2 * r_center - r)\n mirror_c = round(2 * c_center - c)\n if 0 <= mirror_r < rows and 0 <= mirror_c < cols and (mirror_r, mirror_c) in overlay_cells:\n output[mirror_r][mirror_c] = shape_color\n return output", "36fdfd69": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n output = [row[:] for row in grid]\n two_cells = set()\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] == 2:\n two_cells.add((r, c))\n parent = {}\n for cell in two_cells:\n parent[cell] = cell\n def find(x):\n while parent[x] != x:\n parent[x] = parent[parent[x]]\n x = parent[x]\n return x\n def union(a, b):\n a, b = find(a), find(b)\n if a != b:\n parent[a] = b\n two_list = list(two_cells)\n for i in range(len(two_list)):\n for j in range(i+1, len(two_list)):\n r1, c1 = two_list[i]\n r2, c2 = two_list[j]\n dr = abs(r1 - r2)\n dc = abs(c1 - c2)\n if max(dr, dc) <= 2:\n rmin, rmax = min(r1, r2), max(r1, r2)\n cmin, cmax = min(c1, c2), max(c1, c2)\n all_nonzero = True\n for r in range(rmin, rmax + 1):\n for c in range(cmin, cmax + 1):\n if grid[r][c] == 0:\n all_nonzero = False\n break\n if not all_nonzero:\n break\n if all_nonzero:\n union(two_list[i], two_list[j])\n elif max(dr, dc) <= 3 and min(dr, dc) <= 1:\n rmin, rmax = min(r1, r2), max(r1, r2)\n cmin, cmax = min(c1, c2), max(c1, c2)\n all_nonzero = True\n for r in range(rmin, rmax + 1):\n for c in range(cmin, cmax + 1):\n if grid[r][c] == 0:\n all_nonzero = False\n break\n if not all_nonzero:\n break\n if all_nonzero:\n union(two_list[i], two_list[j])\n from collections import defaultdict\n groups = defaultdict(set)\n for cell in two_cells:\n groups[find(cell)].add(cell)\n for cluster in groups.values():\n rs = [c[0] for c in cluster]\n cs = [c[1] for c in cluster]\n rmin, rmax = min(rs), max(rs)\n cmin, cmax = min(cs), max(cs)\n for r in range(rmin, rmax + 1):\n for c in range(cmin, cmax + 1):\n if grid[r][c] != 2:\n output[r][c] = 4\n return output", "39e1d7f9": "def solve(grid):\n rows, cols = len(grid), len(grid[0])\n output = [row[:] for row in grid]\n sep_color = None\n for test_color in range(10):\n h_count = sum(1 for r in range(rows) if all(grid[r][c] == test_color for c in range(cols)))\n v_count = sum(1 for c in range(cols) if all(grid[r][c] == test_color for r in range(rows)))\n if h_count >= 2 and v_count >= 2:\n sep_color = test_color\n break\n if sep_color is None:\n return output\n h_lines = [r for r in range(rows) if all(grid[r][c] == sep_color for c in range(cols))]\n v_lines = [c for c in range(cols) if all(grid[r][c] == sep_color for r in range(rows))]\n row_bands = []\n prev = 0\n for hl in h_lines:\n if hl > prev:\n row_bands.append((prev, hl - 1))\n prev = hl + 1\n if prev < rows:\n row_bands.append((prev, rows - 1))\n col_bands = []\n prev = 0\n for vl in v_lines:\n if vl > prev:\n col_bands.append((prev, vl - 1))\n prev = vl + 1\n if prev < cols:\n col_bands.append((prev, cols - 1))\n n_rows = len(row_bands)\n n_cols = len(col_bands)\n cell_colors = {}\n for ri in range(n_rows):\n for ci in range(n_cols):\n r1, r2 = row_bands[ri]\n c1, c2 = col_bands[ci]\n colors = set()\n for r in range(r1, r2 + 1):\n for c in range(c1, c2 + 1):\n if grid[r][c] not in (0, sep_color):\n colors.add(grid[r][c])\n if colors:\n cell_colors[(ri, ci)] = list(colors)[0]\n else:\n cell_colors[(ri, ci)] = 0\n nonzero_cells = {k: v for k, v in cell_colors.items() if v != 0}\n visited = set()\n components = []\n for cell in nonzero_cells:\n if cell in visited:\n continue\n comp = {}\n queue = [cell]\n while queue:\n cr, cc = queue.pop(0)\n if (cr, cc) in visited:\n continue\n visited.add((cr, cc))\n comp[(cr, cc)] = nonzero_cells[(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 nonzero_cells and (nr, nc) not in visited:\n queue.append((nr, nc))\n components.append(comp)\n stamp_comp = max(components, key=len)\n dots = [list(comp.keys())[0] for comp in components if len(comp) == 1]\n if not dots:\n return output\n dot_color = cell_colors[dots[0]]\n stamp_center = None\n for pos, color in stamp_comp.items():\n if color == dot_color:\n stamp_center = pos\n break\n if stamp_center is None:\n return output\n stamp_pattern = {}\n for pos, color in stamp_comp.items():\n dr = pos[0] - stamp_center[0]\n dc = pos[1] - stamp_center[1]\n stamp_pattern[(dr, dc)] = color\n for dot in dots:\n for (dr, dc), color in stamp_pattern.items():\n nr, nc = dot[0] + dr, dot[1] + dc\n if 0 <= nr < n_rows and 0 <= nc < n_cols:\n r1, r2 = row_bands[nr]\n c1, c2 = col_bands[nc]\n for r in range(r1, r2 + 1):\n for c in range(c1, c2 + 1):\n if grid[r][c] == 0:\n output[r][c] = color\n return output", "2dd70a9a": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n output = [row[:] for row in grid]\n markers = {}\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] not in (0, 8):\n color = grid[r][c]\n if color not in markers:\n markers[color] = []\n markers[color].append((r, c))\n colors = list(markers.keys())\n cells_a = set(markers[colors[0]])\n cells_b = set(markers[colors[1]])\n def get_max_ext(start_r, start_c, dr, dc):\n ext = []\n nr, nc = start_r + dr, start_c + dc\n while 0 <= nr < rows and 0 <= nc < cols and grid[nr][nc] == 0:\n ext.append((nr, nc))\n nr += dr\n nc += dc\n return ext\n best_path = None\n best_score = None\n for d_a in [(-1,0),(1,0),(0,-1),(0,1)]:\n d_b = (-d_a[0], -d_a[1])\n for ra, ca in cells_a:\n a_full = get_max_ext(ra, ca, d_a[0], d_a[1])\n if not a_full:\n continue\n for rb, cb in cells_b:\n b_full = get_max_ext(rb, cb, d_b[0], d_b[1])\n if not b_full:\n continue\n for ai in range(len(a_full)):\n ap = a_full[ai]\n for bi in range(len(b_full)):\n bp = b_full[bi]\n if d_a[0] == 0:\n if ap[1] != bp[1]:\n continue\n rmin, rmax = min(ap[0], bp[0]), max(ap[0], bp[0])\n connector = []\n valid = True\n for rr in range(rmin + 1, rmax):\n if grid[rr][ap[1]] == 0:\n connector.append((rr, ap[1]))\n else:\n valid = False\n break\n else:\n if ap[0] != bp[0]:\n continue\n cmin, cmax = min(ap[1], bp[1]), max(ap[1], bp[1])\n connector = []\n valid = True\n for cc in range(cmin + 1, cmax):\n if grid[ap[0]][cc] == 0:\n connector.append((ap[0], cc))\n else:\n valid = False\n break\n if not valid:\n continue\n connector_len = len(connector)\n a_len = ai + 1\n path = set(a_full[:ai+1] + b_full[:bi+1] + connector)\n total_len = len(path)\n score = (connector_len, total_len, a_len)\n if best_score is None or score < best_score:\n best_path = path\n best_score = score\n if best_path:\n for r, c in best_path:\n output[r][c] = 3\n return output\n best_score = None\n for d in [(-1,0),(1,0),(0,-1),(0,1)]:\n for ra, ca in cells_a:\n a_full = get_max_ext(ra, ca, d[0], d[1])\n if not a_full:\n continue\n for rb, cb in cells_b:\n b_full = get_max_ext(rb, cb, d[0], d[1])\n if not b_full:\n continue\n if len(a_full) <= len(b_full):\n pivot = a_full[-1]\n else:\n pivot = b_full[-1]\n if d[0] == 0:\n target_col = pivot[1]\n if len(a_full) <= len(b_full):\n a_used = a_full\n b_used = None\n for bi, bpt in enumerate(b_full):\n if bpt[1] == target_col:\n b_used = b_full[:bi+1]\n bp = bpt\n break\n if b_used is None:\n continue\n ap = pivot\n else:\n b_used = b_full\n a_used = None\n for ai, apt in enumerate(a_full):\n if apt[1] == target_col:\n a_used = a_full[:ai+1]\n ap = apt\n break\n if a_used is None:\n continue\n bp = pivot\n else:\n target_row = pivot[0]\n if len(a_full) <= len(b_full):\n a_used = a_full\n b_used = None\n for bi, bpt in enumerate(b_full):\n if bpt[0] == target_row:\n b_used = b_full[:bi+1]\n bp = bpt\n break\n if b_used is None:\n continue\n ap = pivot\n else:\n b_used = b_full\n a_used = None\n for ai, apt in enumerate(a_full):\n if apt[0] == target_row:\n a_used = a_full[:ai+1]\n ap = apt\n break\n if a_used is None:\n continue\n bp = pivot\n if d[0] == 0:\n if ap[1] != bp[1]:\n continue\n rmin, rmax = min(ap[0], bp[0]), max(ap[0], bp[0])\n connector = []\n valid = True\n for rr in range(rmin + 1, rmax):\n if grid[rr][ap[1]] == 0:\n connector.append((rr, ap[1]))\n else:\n valid = False\n break\n else:\n if ap[0] != bp[0]:\n continue\n cmin, cmax = min(ap[1], bp[1]), max(ap[1], bp[1])\n connector = []\n valid = True\n for cc in range(cmin + 1, cmax):\n if grid[ap[0]][cc] == 0:\n connector.append((ap[0], cc))\n else:\n valid = False\n break\n if not valid:\n continue\n connector_len = len(connector)\n path = set(list(a_used) + list(b_used) + connector)\n total_len = len(path)\n score = (connector_len, total_len)\n if best_score is None or score < best_score:\n best_path = path\n best_score = score\n if best_path:\n for r, c in best_path:\n output[r][c] = 3\n return output" }