{ "90c28cc7": "def solve(grid):\n rows, cols = len(grid), len(grid[0])\n min_r, max_r, min_c, max_c = rows, 0, cols, 0\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] != 0:\n min_r = min(min_r, r)\n max_r = max(max_r, r)\n min_c = min(min_c, c)\n max_c = max(max_c, c)\n col_boundaries = set()\n for r in range(min_r, max_r+1):\n for c in range(min_c+1, max_c+1):\n if grid[r][c] != grid[r][c-1]:\n col_boundaries.add(c)\n row_boundaries = set()\n for c in range(min_c, max_c+1):\n for r in range(min_r+1, max_r+1):\n if grid[r][c] != grid[r-1][c]:\n row_boundaries.add(r)\n col_breaks = sorted([min_c] + list(col_boundaries) + [max_c+1])\n row_breaks = sorted([min_r] + list(row_boundaries) + [max_r+1])\n out = []\n for ri in range(len(row_breaks)-1):\n row = []\n for ci in range(len(col_breaks)-1):\n row.append(grid[row_breaks[ri]][col_breaks[ci]])\n out.append(row)\n return out", "91714a58": "def solve(grid):\n rows, cols = len(grid), len(grid[0])\n best = None\n best_area = 0\n for val in range(1, 10):\n for r1 in range(rows):\n for c1 in range(cols):\n if grid[r1][c1] != val:\n continue\n max_c2 = cols - 1\n for r2 in range(r1, rows):\n if grid[r2][c1] != val:\n break\n c2 = c1\n while c2 + 1 <= max_c2 and grid[r2][c2+1] == val:\n c2 += 1\n max_c2 = min(max_c2, c2)\n area = (r2 - r1 + 1) * (max_c2 - c1 + 1)\n if area > best_area:\n best_area = area\n best = (val, r1, r2, c1, max_c2)\n output = [[0]*cols for _ in range(rows)]\n if best:\n val, r1, r2, c1, c2 = best\n for r in range(r1, r2+1):\n for c in range(c1, c2+1):\n output[r][c] = val\n return output", "97a05b5b": "def solve(grid):\n rows, cols = len(grid), len(grid[0])\n visited = set()\n components = []\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] == 2 and (r,c) not in visited:\n comp = set()\n queue = [(r,c)]\n while queue:\n cr,cc = queue.pop(0)\n if (cr,cc) in visited or grid[cr][cc] != 2:\n continue\n visited.add((cr,cc))\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= rh or cc < 0 or cc >= rw:\n ok = False\n break\n if rect[rr][cc] != 2:\n ok = False\n break\n if ok:\n min_bd = float('inf')\n for nr, nc, nv in non2s:\n rr, cc = nr+off_r, nc+off_c\n d = min(rr, rh-1-rr, cc, rw-1-cc)\n min_bd = min(min_bd, d)\n placements.append((min_bd, pi, variant, off_r, off_c, mapped_zeros))\n break\n placements.sort(key=lambda x: -x[0])\n for score, pi, variant, off_r, off_c, mapped_zeros in placements:\n if pi in used:\n continue\n if not mapped_zeros.issubset(remaining_zeros):\n continue\n vh, vw = len(variant), len(variant[0])\n for r in range(vh):\n for c in range(vw):\n if variant[r][c] != 2:\n output[r+off_r][c+off_c] = variant[r][c]\n remaining_zeros -= mapped_zeros\n used.add(pi)\n return output", "98cf29f8": "def solve(grid):\n rows, cols = len(grid), len(grid[0])\n from collections import Counter\n colors = Counter()\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] != 0:\n colors[grid[r][c]] += 1\n color_list = list(colors.keys())\n color_info = {}\n for col_val in color_list:\n positions = [(r,c) for r in range(rows) for c in range(cols) if grid[r][c] == col_val]\n min_r = min(p[0] for p in positions)\n max_r = max(p[0] for p in positions)\n min_c = min(p[1] for p in positions)\n max_c = max(p[1] for p in positions)\n area = (max_r-min_r+1)*(max_c-min_c+1)\n is_rect = len(positions) == area\n color_info[col_val] = {\n 'positions': set(positions), 'count': len(positions),\n 'bbox': (min_r, max_r, min_c, max_c), 'area': area, 'is_rect': is_rect\n }\n anchor_color = None\n mover_color = None\n for col_val in color_list:\n if color_info[col_val]['is_rect']:\n anchor_color = col_val\n else:\n mover_color = col_val\n if anchor_color is None or mover_color is None:\n sorted_colors = sorted(color_list, key=lambda c: color_info[c]['count'], reverse=True)\n anchor_color = sorted_colors[0]\n mover_color = sorted_colors[1] if len(sorted_colors) > 1 else sorted_colors[0]\n mover_positions = color_info[mover_color]['positions']\n best_rect = None\n best_rect_area = 0\n mr1, mr2, mc1, mc2 = color_info[mover_color]['bbox']\n for r1 in range(mr1, mr2+1):\n for c1 in range(mc1, mc2+1):\n if (r1, c1) not in mover_positions:\n continue\n max_c2 = mc2\n for r2 in range(r1, mr2+1):\n if (r2, c1) not in mover_positions:\n break\n c2 = c1\n while c2 + 1 <= max_c2 and (r2, c2+1) in mover_positions:\n c2 += 1\n max_c2 = min(max_c2, c2)\n area = (r2 - r1 + 1) * (max_c2 - c1 + 1)\n if area > best_rect_area:\n best_rect_area = area\n best_rect = (r1, r2, c1, max_c2)\n rect_r1, rect_r2, rect_c1, rect_c2 = best_rect\n rect_h = rect_r2 - rect_r1 + 1\n rect_w = rect_c2 - rect_c1 + 1\n rect_set = set()\n for r in range(rect_r1, rect_r2+1):\n for c in range(rect_c1, rect_c2+1):\n rect_set.add((r,c))\n line_positions = mover_positions - rect_set\n anc_r1, anc_r2, anc_c1, anc_c2 = color_info[anchor_color]['bbox']\n if len(line_positions) > 0:\n if all(c == list(line_positions)[0][1] for r,c in line_positions):\n if rect_r1 > anc_r2:\n new_r1 = anc_r2 + 1\n new_c1 = rect_c1\n else:\n new_r1 = anc_r1 - rect_h\n new_c1 = rect_c1\n else:\n if rect_c1 > anc_c2:\n new_r1 = rect_r1\n new_c1 = anc_c2 + 1\n else:\n new_r1 = rect_r1\n new_c1 = anc_c1 - rect_w\n output = [[0]*cols for _ in range(rows)]\n for r in range(anc_r1, anc_r2+1):\n for c in range(anc_c1, anc_c2+1):\n output[r][c] = anchor_color\n for dr in range(rect_h):\n for dc in range(rect_w):\n output[new_r1+dr][new_c1+dc] = mover_color\n return output", "9aec4887": "def solve(grid):\n rows, cols = len(grid), len(grid[0])\n eight_pos = []\n non_eight = {}\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] == 8:\n eight_pos.append((r,c))\n elif grid[r][c] != 0:\n if grid[r][c] not in non_eight:\n non_eight[grid[r][c]] = []\n non_eight[grid[r][c]].append((r,c))\n frame_colors = {}\n for color, positions in non_eight.items():\n rs = [p[0] for p in positions]\n cs = [p[1] for p in positions]\n if len(set(rs)) == 1:\n frame_colors[color] = ('h', min(rs), min(cs), max(cs))\n elif len(set(cs)) == 1:\n frame_colors[color] = ('v', min(rs), max(rs), min(cs))\n h_colors = [(c, info) for c, info in frame_colors.items() if info[0] == 'h']\n v_colors = [(c, info) for c, info in frame_colors.items() if info[0] == 'v']\n h_colors.sort(key=lambda x: x[1][1])\n v_colors.sort(key=lambda x: x[1][3])\n top_color = h_colors[0][0]\n bottom_color = h_colors[1][0]\n left_color = v_colors[0][0]\n right_color = v_colors[1][0]\n pat_min_r = min(p[0] for p in eight_pos)\n pat_min_c = min(p[1] for p in eight_pos)\n pat_max_r = max(p[0] for p in eight_pos)\n pat_max_c = max(p[1] for p in eight_pos)\n pat_h = pat_max_r - pat_min_r + 1\n pat_w = pat_max_c - pat_min_c + 1\n n = pat_h\n out_h = n + 2\n out_w = pat_w + 2\n output = [[0] * out_w for _ in range(out_h)]\n for c in range(1, out_w - 1):\n output[0][c] = top_color\n for c in range(1, out_w - 1):\n output[out_h-1][c] = bottom_color\n for r in range(1, out_h - 1):\n output[r][0] = left_color\n for r in range(1, out_h - 1):\n output[r][out_w-1] = right_color\n for r, c in eight_pos:\n pr = r - pat_min_r\n pc = c - pat_min_c\n if pr == pc or pr + pc == n - 1:\n output[pr+1][pc+1] = 8\n elif pr < pc and pr + pc < n - 1:\n output[pr+1][pc+1] = top_color\n elif pr < pc and pr + pc > n - 1:\n output[pr+1][pc+1] = right_color\n elif pr >= pc and pr + pc < n - 1:\n output[pr+1][pc+1] = left_color\n elif pr >= pc and pr + pc > n - 1:\n output[pr+1][pc+1] = bottom_color\n else:\n output[pr+1][pc+1] = 8\n return output", "9d9215db": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n output = [[0]*cols for _ in range(rows)]\n values = {}\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] != 0:\n dr = min(r, rows-1-r)\n dc = min(c, cols-1-c)\n values[(dr, dc)] = grid[r][c]\n for (dr, dc), val in values.items():\n if dr == dc:\n for rr in [dr, rows-1-dr]:\n for cc in [dc, cols-1-dc]:\n output[rr][cc] = val\n elif dr < dc:\n for cc in range(dc, cols-dc, 2):\n output[dr][cc] = val\n output[rows-1-dr][cc] = val\n else:\n for rr in range(dr, rows-dr, 2):\n output[rr][dc] = val\n output[rr][cols-1-dc] = val\n return output", "9ecd008a": "def solve(grid):\n rows, cols = len(grid), len(grid[0])\n zeros = [(r,c) for r in range(rows) for c in range(cols) if grid[r][c] == 0]\n min_r = min(r for r,c in zeros)\n min_c = min(c for r,c in zeros)\n max_r = max(r for r,c in zeros)\n max_c = max(c for r,c in zeros)\n out_h = max_r - min_r + 1\n out_w = max_c - min_c + 1\n output = [[0]*out_w for _ in range(out_h)]\n for r,c in zeros:\n mr = rows - 1 - r\n mc = cols - 1 - c\n output[r-min_r][c-min_c] = grid[mr][mc]\n return output", "9f236235": "def solve(grid):\n rows, cols = len(grid), len(grid[0])\n sep_color = None\n for r in range(rows):\n if all(grid[r][c] == grid[r][0] for c in range(cols)) and grid[r][0] != 0:\n sep_color = grid[r][0]\n break\n sep_rows = [r for r in range(rows) if all(grid[r][c] == sep_color for c in range(cols))]\n sep_cols = [c for c in range(cols) if all(grid[r][c] == sep_color for r in range(rows))]\n row_ranges = []\n prev = 0\n for sr in sep_rows:\n if sr > prev:\n row_ranges.append((prev, sr-1))\n prev = sr + 1\n if prev < rows:\n row_ranges.append((prev, rows-1))\n col_ranges = []\n prev = 0\n for sc in sep_cols:\n if sc > prev:\n col_ranges.append((prev, sc-1))\n prev = sc + 1\n if prev < cols:\n col_ranges.append((prev, cols-1))\n n_rows = len(row_ranges)\n n_cols = len(col_ranges)\n cell_grid = [[0]*n_cols for _ in range(n_rows)]\n for ri, (r1,r2) in enumerate(row_ranges):\n for ci, (c1,c2) in enumerate(col_ranges):\n val = grid[r1][c1]\n if val != 0 and val != sep_color:\n cell_grid[ri][ci] = val\n output = [row[::-1] for row in cell_grid]\n return output" }