| { | |
| "eb5a1d5d": "def solve(grid):\n rows, cols = len(grid), len(grid[0])\n bg = grid[0][0]\n color_boxes = {}\n for r in range(rows):\n for c in range(cols):\n v = grid[r][c]\n if v != bg:\n if v not in color_boxes:\n color_boxes[v] = [r, c, r, c]\n else:\n color_boxes[v][0] = min(color_boxes[v][0], r)\n color_boxes[v][1] = min(color_boxes[v][1], c)\n color_boxes[v][2] = max(color_boxes[v][2], r)\n color_boxes[v][3] = max(color_boxes[v][3], c)\n sorted_colors = sorted(color_boxes.keys(), key=lambda v: (color_boxes[v][2]-color_boxes[v][0]+1)*(color_boxes[v][3]-color_boxes[v][1]+1), reverse=True)\n all_layers = [bg] + sorted_colors\n n = len(all_layers)\n size = 2*n - 1\n output = [[0]*size for _ in range(size)]\n for i, color in enumerate(all_layers):\n for r in range(i, size-i):\n for c in range(i, size-i):\n output[r][c] = color\n return output", | |
| "ec883f72": "def solve(grid):\n rows, cols = len(grid), len(grid[0])\n output = [row[:] for row in grid]\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 if len(colors) < 2:\n return output\n color_list = list(colors.keys())\n def fill_ratio(cells):\n rr = [r for r, c in cells]\n cc = [c for r, c in cells]\n r1, c1, r2, c2 = min(rr), min(cc), max(rr), max(cc)\n area = (r2-r1+1) * (c2-c1+1)\n return len(cells) / area if area > 0 else 0\n c0, c1_val = color_list[0], color_list[1]\n fr0 = fill_ratio(colors[c0])\n fr1 = fill_ratio(colors[c1_val])\n if fr0 > fr1:\n inner_color = c0\n enc_color = c1_val\n else:\n inner_color = c1_val\n enc_color = c0\n enc_cells = set(colors[enc_color])\n inner_cells = set(colors[inner_color])\n corner_cells = []\n for r, c in enc_cells:\n adj = []\n for dr, dc in [(-1,0),(1,0),(0,-1),(0,1)]:\n if (r+dr, c+dc) in enc_cells:\n adj.append((dr, dc))\n if len(adj) == 2:\n d1, d2 = adj\n if d1[0] * d2[0] + d1[1] * d2[1] == 0:\n esc_dr = -(d1[0] + d2[0])\n esc_dc = -(d1[1] + d2[1])\n nr, nc = r + esc_dr, c + esc_dc\n if 0 <= nr < rows and 0 <= nc < cols:\n if (nr, nc) not in enc_cells and (nr, nc) not in inner_cells:\n corner_cells.append((r, c, esc_dr, esc_dc))\n for cr, cc, dr, dc in corner_cells:\n r, c = cr + dr, cc + dc\n while 0 <= r < rows and 0 <= c < cols:\n if output[r][c] == 0:\n output[r][c] = inner_color\n r += dr\n c += dc\n return output", | |
| "ecdecbb3": "def solve(grid):\n rows, cols = len(grid), len(grid[0])\n output = [row[:] for row in grid]\n h_lines = sorted([r for r in range(rows) if all(grid[r][c] == 8 for c in range(cols))])\n v_lines = sorted([c for c in range(cols) if all(grid[r][c] == 8 for r in range(rows))])\n dots = []\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] == 2:\n dots.append((r, c))\n connections = []\n for dr, dc in dots:\n above = [lr for lr in h_lines if lr < dr]\n below = [lr for lr in h_lines if lr > dr]\n if above:\n connections.append(((dr, dc), 'h', above[-1]))\n if below:\n connections.append(((dr, dc), 'h', below[0]))\n left = [lc for lc in v_lines if lc < dc]\n right = [lc for lc in v_lines if lc > dc]\n if left:\n connections.append(((dr, dc), 'v', left[-1]))\n if right:\n connections.append(((dr, dc), 'v', right[0]))\n intersections = []\n for (dr, dc), ltype, lpos in connections:\n if ltype == 'h':\n intersections.append((lpos, dc))\n else:\n intersections.append((dr, lpos))\n for ir, ic in intersections:\n for rr in range(ir - 1, ir + 2):\n for cc in range(ic - 1, ic + 2):\n if 0 <= rr < rows and 0 <= cc < cols and output[rr][cc] == 0:\n output[rr][cc] = 8\n for (dr, dc), ltype, lpos in connections:\n if ltype == 'h':\n col = dc\n output[lpos][col] = 2\n if dr < lpos:\n for r in range(dr + 1, lpos):\n if output[r][col] != 8:\n output[r][col] = 2\n else:\n for r in range(lpos + 1, dr):\n if output[r][col] != 8:\n output[r][col] = 2\n else:\n row = dr\n output[row][lpos] = 2\n if dc < lpos:\n for c in range(dc + 1, lpos):\n if output[row][c] != 8:\n output[row][c] = 2\n else:\n for c in range(lpos + 1, dc):\n if output[row][c] != 8:\n output[row][c] = 2\n return output", | |
| "f1cefba8": "def solve(grid):\n rows, cols = len(grid), len(grid[0])\n output = [row[:] for row in grid]\n bg = 0\n frame_cells = {}\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] != bg:\n v = grid[r][c]\n if v not in frame_cells:\n frame_cells[v] = []\n frame_cells[v].append((r, c))\n colors = sorted(frame_cells.keys(), key=lambda v: len(frame_cells[v]), reverse=True)\n frame_color = colors[0]\n fill_color = colors[1]\n all_cells = frame_cells[frame_color] + frame_cells[fill_color]\n struct_min_r = min(r for r, c in all_cells)\n struct_max_r = max(r for r, c in all_cells)\n struct_min_c = min(c for r, c in all_cells)\n struct_max_c = max(c for r, c in all_cells)\n from collections import Counter\n row_counts = Counter(r for r, c in frame_cells[fill_color])\n col_counts = Counter(c for r, c in frame_cells[fill_color])\n max_row_count = max(row_counts.values())\n max_col_count = max(col_counts.values())\n main_fill_rows = [r for r, cnt in row_counts.items() if cnt >= max_row_count - 1]\n main_fill_cols = [c for c, cnt in col_counts.items() if cnt >= max_col_count - 1]\n inner_min_r = min(main_fill_rows)\n inner_max_r = max(main_fill_rows)\n inner_min_c = min(main_fill_cols)\n inner_max_c = max(main_fill_cols)\n notch_cols = set()\n notch_rows = set()\n for r, c in frame_cells[fill_color]:\n if r < inner_min_r or r > inner_max_r:\n notch_cols.add(c)\n if c < inner_min_c or c > inner_max_c:\n notch_rows.add(r)\n for r in range(struct_min_r, struct_max_r + 1):\n for c in range(struct_min_c, struct_max_c + 1):\n output[r][c] = frame_color\n for r in range(inner_min_r, inner_max_r + 1):\n for c in range(inner_min_c, inner_max_c + 1):\n output[r][c] = fill_color\n for nc in notch_cols:\n for r in range(inner_min_r, inner_max_r + 1):\n output[r][nc] = frame_color\n for nr in notch_rows:\n for c in range(inner_min_c, inner_max_c + 1):\n output[nr][c] = frame_color\n for nc in notch_cols:\n for r in range(struct_min_r, struct_max_r + 1):\n output[r][nc] = frame_color\n for nr in notch_rows:\n for c in range(struct_min_c, struct_max_c + 1):\n output[nr][c] = frame_color\n for nc in notch_cols:\n for r in range(0, struct_min_r):\n output[r][nc] = fill_color\n for r in range(struct_max_r + 1, rows):\n output[r][nc] = fill_color\n for nr in notch_rows:\n for c in range(0, struct_min_c):\n output[nr][c] = fill_color\n for c in range(struct_max_c + 1, cols):\n output[nr][c] = fill_color\n return output", | |
| "f15e1fac": "def solve(grid):\n rows, cols = len(grid), len(grid[0])\n output = [[0]*cols for _ in range(rows)]\n eights = []\n twos = []\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] == 8:\n eights.append((r, c))\n elif grid[r][c] == 2:\n twos.append((r, c))\n for r, c in twos:\n output[r][c] = 2\n eight_rows = set(r for r, c in eights)\n eight_cols = set(c for r, c in eights)\n two_rows = set(r for r, c in twos)\n two_cols = set(c for r, c in twos)\n if len(eight_rows) == 1:\n pattern_cols = sorted(c for r, c in eights)\n marker_col = list(two_cols)[0]\n breakpoints = sorted(r for r, c in twos)\n if marker_col <= cols // 2:\n shift = 1\n else:\n shift = -1\n seg_starts = [0] + breakpoints\n seg_ends = breakpoints + [rows]\n for seg_idx in range(len(seg_starts)):\n seg_start = seg_starts[seg_idx]\n seg_end = seg_ends[seg_idx]\n shifted_cols = [pc + seg_idx * shift for pc in pattern_cols]\n for r in range(seg_start, seg_end):\n for sc in shifted_cols:\n if 0 <= sc < cols:\n output[r][sc] = 8\n elif len(eight_cols) == 1:\n pattern_rows = sorted(r for r, c in eights)\n marker_row = list(two_rows)[0]\n breakpoints = sorted(c for r, c in twos)\n shift = -1\n seg_starts = [0] + breakpoints\n seg_ends = breakpoints + [cols]\n for seg_idx in range(len(seg_starts)):\n seg_c_start = seg_starts[seg_idx]\n seg_c_end = seg_ends[seg_idx]\n for pr in pattern_rows:\n shifted_row = pr + seg_idx * shift\n if 0 <= shifted_row < rows:\n for c in range(seg_c_start, seg_c_end):\n output[shifted_row][c] = 8\n for r, c in twos:\n output[r][c] = 2\n return output", | |
| "fcc82909": "def solve(grid):\n rows, cols = len(grid), len(grid[0])\n output = [row[:] for row in grid]\n visited = [[False]*cols for _ in range(rows)]\n for r in range(rows-1):\n for c in range(cols-1):\n if (grid[r][c] != 0 and grid[r][c+1] != 0 and\n grid[r+1][c] != 0 and grid[r+1][c+1] != 0 and\n not visited[r][c]):\n visited[r][c] = visited[r][c+1] = visited[r+1][c] = visited[r+1][c+1] = True\n colors = {grid[r][c], grid[r][c+1], grid[r+1][c], grid[r+1][c+1]}\n shadow_len = len(colors)\n for dr in range(1, shadow_len + 1):\n nr = r + 1 + dr\n if nr < rows:\n output[nr][c] = 3\n output[nr][c+1] = 3\n return output" | |
| } |