File size: 18,681 Bytes
31307d5 | 1 2 3 4 5 6 7 8 9 10 | {
"6cdd2623": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n color_positions = {}\n for r in range(rows):\n for c in range(cols):\n v = grid[r][c]\n if v != 0:\n color_positions.setdefault(v, []).append((r, c))\n cross_color = min(color_positions, key=lambda c: len(color_positions[c]))\n positions_set = set(color_positions[cross_color])\n h_rows = set()\n for r in range(rows):\n if (r, 0) in positions_set and (r, cols-1) in positions_set:\n h_rows.add(r)\n v_cols = set()\n for c in range(cols):\n if (0, c) in positions_set and (rows-1, c) in positions_set:\n v_cols.add(c)\n output = [[0]*cols for _ in range(rows)]\n for r in h_rows:\n for c in range(cols):\n output[r][c] = cross_color\n for c in v_cols:\n for r in range(rows):\n output[r][c] = cross_color\n return output\n",
"6cf79266": "def solve(grid):\n import copy\n rows = len(grid)\n cols = len(grid[0])\n output = copy.deepcopy(grid)\n\n # Find all NxN all-zero blocks for N from large to small\n # Find the right block size and fill all non-overlapping instances\n for N in range(min(rows, cols), 1, -1):\n blocks = []\n for r1 in range(rows - N + 1):\n for c1 in range(cols - N + 1):\n all_zero = True\n for r in range(r1, r1+N):\n for c in range(c1, c1+N):\n if grid[r][c] != 0:\n all_zero = False\n break\n if not all_zero:\n break\n if all_zero:\n blocks.append((r1, c1))\n if blocks:\n # Group overlapping blocks and take one representative per group\n def overlaps(b1, b2):\n r1, c1 = b1\n r2, c2 = b2\n return not (r1+N <= r2 or r2+N <= r1 or c1+N <= c2 or c2+N <= c1)\n groups = []\n for b in blocks:\n merged = False\n for g in groups:\n if any(overlaps(b, gb) for gb in g):\n g.append(b)\n merged = True\n break\n if not merged:\n groups.append([b])\n reps = []\n for g in groups:\n g.sort()\n reps.append(g[0])\n for r1, c1 in reps:\n for r in range(r1, r1+N):\n for c in range(c1, c1+N):\n output[r][c] = 1\n return output\n return output\n",
"6ecd11f4": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n from collections import Counter\n\n counts = Counter(v for r in grid for v in r if v != 0)\n block_color = counts.most_common(1)[0][0]\n\n # Find all non-zero cells and connected components\n nonzero = set((r,c) for r in range(rows) for c in range(cols) if grid[r][c] != 0)\n visited = set()\n components = []\n for r,c in nonzero:\n if (r,c) in visited:\n continue\n comp = set()\n q = [(r,c)]\n while q:\n cr,cc = q.pop(0)\n if (cr,cc) in visited:\n continue\n visited.add((cr,cc))\n comp.add((cr,cc))\n for dr,dc in [(0,1),(0,-1),(1,0),(-1,0)]:\n nr,nc = cr+dr, cc+dc\n if (nr,nc) in nonzero and (nr,nc) not in visited:\n q.append((nr,nc))\n components.append(comp)\n\n # Find legend component: small component with multiple non-block colors\n components.sort(key=len, reverse=True)\n legend_comp = None\n for comp in components:\n colors = set(grid[r][c] for r,c in comp)\n non_block = colors - {block_color}\n if len(non_block) >= 2 and len(comp) < 50:\n legend_comp = comp\n break\n if legend_comp is None:\n for comp in components:\n colors = set(grid[r][c] for r,c in comp)\n non_block = colors - {block_color}\n if len(non_block) >= 1 and len(comp) < 50:\n legend_comp = comp\n break\n\n if legend_comp is None:\n return [[0]]\n\n lr = [r for r,c in legend_comp]\n lc = [c for r,c in legend_comp]\n lr1, lr2 = min(lr), max(lr)\n lc1, lc2 = min(lc), max(lc)\n legend_rows = lr2 - lr1 + 1\n legend_cols = lc2 - lc1 + 1\n\n legend = []\n for r in range(lr1, lr2+1):\n row = []\n for c in range(lc1, lc2+1):\n row.append(grid[r][c])\n legend.append(row)\n\n # Block cells: all block_color cells NOT in legend area\n block_cells = set()\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] == block_color and not (lr1 <= r <= lr2 and lc1 <= c <= lc2):\n block_cells.add((r,c))\n\n if not block_cells:\n return [[0]*legend_cols]*legend_rows\n\n all_block_r = [r for r,c in block_cells]\n all_block_c = [c for r,c in block_cells]\n br1, br2 = min(all_block_r), max(all_block_r)\n bc1, bc2 = min(all_block_c), max(all_block_c)\n total_h = br2 - br1 + 1\n total_w = bc2 - bc1 + 1\n\n presence = []\n for bi in range(legend_rows):\n row = []\n for bj in range(legend_cols):\n cr = br1 + int((bi + 0.5) * total_h / legend_rows)\n cc = bc1 + int((bj + 0.5) * total_w / legend_cols)\n row.append((cr, cc) in block_cells)\n presence.append(row)\n\n output = []\n for i in range(legend_rows):\n row = []\n for j in range(legend_cols):\n if presence[i][j]:\n row.append(legend[i][j])\n else:\n row.append(0)\n output.append(row)\n return output\n",
"72322fa7": "def solve(grid):\n import copy\n rows = len(grid)\n cols = len(grid[0])\n output = copy.deepcopy(grid)\n\n all_nz = set()\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] != 0:\n all_nz.add((r,c))\n\n # Use 8-connectivity for finding components\n visited = set()\n components = []\n for r,c in all_nz:\n if (r,c) in visited:\n continue\n comp = set()\n queue = [(r,c)]\n while queue:\n cr,cc = queue.pop(0)\n if (cr,cc) in visited:\n continue\n visited.add((cr,cc))\n comp.add((cr,cc))\n for dr in [-1,0,1]:\n for dc in [-1,0,1]:\n if dr == 0 and dc == 0:\n continue\n nr,nc = cr+dr, cc+dc\n if (nr,nc) in all_nz and (nr,nc) not in visited:\n queue.append((nr,nc))\n components.append(comp)\n\n # Templates: multi-color components\n templates = []\n other_comps = []\n for comp in components:\n colors = set(grid[r][c] for r,c in comp)\n if len(colors) >= 2:\n templates.append(comp)\n else:\n other_comps.append(comp)\n\n # Extract template patterns\n template_patterns = []\n for tmpl in templates:\n colors_count = {}\n for r,c in tmpl:\n v = grid[r][c]\n colors_count[v] = colors_count.get(v, 0) + 1\n\n center_color = min(colors_count, key=lambda c: colors_count[c])\n surround_color = [c for c in colors_count if c != center_color][0]\n\n center_positions = [(r,c) for r,c in tmpl if grid[r][c] == center_color]\n cr, cc = center_positions[0]\n\n offsets = []\n for r,c in tmpl:\n offsets.append((r-cr, c-cc, grid[r][c]))\n\n template_patterns.append({\n 'center_color': center_color,\n 'surround_color': surround_color,\n 'offsets': offsets,\n })\n\n # For each non-template component, try to match and complete\n for comp in other_comps:\n comp_color = grid[list(comp)[0][0]][list(comp)[0][1]]\n comp_list = list(comp)\n\n for tp in template_patterns:\n if comp_color == tp['center_color'] and len(comp) == 1:\n # Single center cell - place full template\n r, c = comp_list[0]\n for dr, dc, v in tp['offsets']:\n nr, nc = r+dr, c+dc\n if 0 <= nr < rows and 0 <= nc < cols:\n if output[nr][nc] == 0:\n output[nr][nc] = v\n break\n elif comp_color == tp['surround_color']:\n # Multiple surround cells - find center and complete\n surround_offsets = [(dr,dc) for dr,dc,v in tp['offsets'] if v == tp['surround_color']]\n\n # For each possible alignment: try placing center at different positions\n for ref_r, ref_c in comp_list:\n for s_dr, s_dc in surround_offsets:\n # If ref cell is at offset (s_dr, s_dc) from center\n potential_cr = ref_r - s_dr\n potential_cc = ref_c - s_dc\n\n # Check if all surround offsets match existing cells\n match = True\n for s_dr2, s_dc2 in surround_offsets:\n nr = potential_cr + s_dr2\n nc = potential_cc + s_dc2\n if 0 <= nr < rows and 0 <= nc < cols:\n if grid[nr][nc] != tp['surround_color']:\n match = False\n break\n else:\n match = False\n break\n\n if match:\n # Complete the pattern\n for dr2, dc2, v2 in tp['offsets']:\n nr = potential_cr + dr2\n nc = potential_cc + dc2\n if 0 <= nr < rows and 0 <= nc < cols:\n if output[nr][nc] == 0:\n output[nr][nc] = v2\n break\n else:\n continue\n break\n break\n\n return output\n",
"776ffc46": "def solve(grid):\n import copy\n rows = len(grid)\n cols = len(grid[0])\n output = copy.deepcopy(grid)\n\n five_cells = set((r,c) for r in range(rows) for c in range(cols) if grid[r][c] == 5)\n visited = set()\n boxes = []\n for r,c in five_cells:\n if (r,c) in visited:\n continue\n comp = set()\n queue = [(r,c)]\n while queue:\n cr,cc = queue.pop(0)\n if (cr,cc) in visited:\n continue\n visited.add((cr,cc))\n comp.add((cr,cc))\n for dr,dc in [(0,1),(0,-1),(1,0),(-1,0)]:\n nr,nc = cr+dr,cc+dc\n if (nr,nc) in five_cells and (nr,nc) not in visited:\n queue.append((nr,nc))\n boxes.append(comp)\n\n template_shape = None\n template_color = None\n\n for box in boxes:\n br1 = min(r for r,c in box)\n br2 = max(r for r,c in box)\n bc1 = min(c for r,c in box)\n bc2 = max(c for r,c in box)\n\n inner_cells = []\n for r in range(br1+1, br2):\n for c in range(bc1+1, bc2):\n if grid[r][c] != 0 and grid[r][c] != 5:\n inner_cells.append((r, c))\n\n if not inner_cells:\n continue\n\n ir1 = min(r for r,c in inner_cells)\n ir2 = max(r for r,c in inner_cells)\n ic1 = min(c for r,c in inner_cells)\n ic2 = max(c for r,c in inner_cells)\n\n top_pad = ir1 - (br1 + 1)\n bot_pad = (br2 - 1) - ir2\n left_pad = ic1 - (bc1 + 1)\n right_pad = (bc2 - 1) - ic2\n\n if top_pad > 0 and bot_pad > 0 and left_pad > 0 and right_pad > 0:\n min_r = min(r for r,c in inner_cells)\n min_c = min(c for r,c in inner_cells)\n template_shape = set((r - min_r, c - min_c) for r,c in inner_cells)\n template_color = grid[inner_cells[0][0]][inner_cells[0][1]]\n break\n\n if template_shape is None:\n return output\n\n box_regions = set()\n for box in boxes:\n br1 = min(r for r,c in box)\n br2 = max(r for r,c in box)\n bc1 = min(c for r,c in box)\n bc2 = max(c for r,c in box)\n for r in range(br1, br2+1):\n for c in range(bc1, bc2+1):\n box_regions.add((r,c))\n\n free_cells = set()\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] != 0 and grid[r][c] != 5 and (r,c) not in box_regions:\n free_cells.add((r,c))\n\n vis = set()\n for r,c in free_cells:\n if (r,c) in vis:\n continue\n comp = set()\n queue = [(r,c)]\n while queue:\n cr,cc = queue.pop(0)\n if (cr,cc) in vis:\n continue\n vis.add((cr,cc))\n comp.add((cr,cc))\n for dr,dc in [(0,1),(0,-1),(1,0),(-1,0)]:\n nr,nc = cr+dr, cc+dc\n if (nr,nc) in free_cells and (nr,nc) not in vis:\n queue.append((nr,nc))\n\n min_r = min(r for r,c in comp)\n min_c = min(c for r,c in comp)\n comp_norm = set((r-min_r, c-min_c) for r,c in comp)\n\n if comp_norm == template_shape:\n for r,c in comp:\n output[r][c] = template_color\n\n return output\n",
"780d0b14": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n from collections import Counter\n\n sep_rows = set(r for r in range(rows) if all(grid[r][c] == 0 for c in range(cols)))\n sep_cols = set(c for c in range(cols) if all(grid[r][c] == 0 for r in range(rows)))\n\n row_ranges = []\n start = None\n for r in range(rows):\n if r not in sep_rows:\n if start is None:\n start = r\n else:\n if start is not None:\n row_ranges.append((start, r))\n start = None\n if start is not None:\n row_ranges.append((start, rows))\n\n col_ranges = []\n start = None\n for c in range(cols):\n if c not in sep_cols:\n if start is None:\n start = c\n else:\n if start is not None:\n col_ranges.append((start, c))\n start = None\n if start is not None:\n col_ranges.append((start, cols))\n\n output = []\n for r1, r2 in row_ranges:\n row = []\n for c1, c2 in col_ranges:\n counts = Counter()\n for r in range(r1, r2):\n for c in range(c1, c2):\n v = grid[r][c]\n if v != 0:\n counts[v] += 1\n if counts:\n row.append(counts.most_common(1)[0][0])\n else:\n row.append(0)\n output.append(row)\n return output\n",
"7b6016b9": "def solve(grid):\n import copy\n rows = len(grid)\n cols = len(grid[0])\n output = copy.deepcopy(grid)\n\n outside = set()\n queue = []\n for r in range(rows):\n for c in [0, cols-1]:\n if grid[r][c] == 0 and (r,c) not in outside:\n outside.add((r,c))\n queue.append((r,c))\n for c in range(cols):\n for r in [0, rows-1]:\n if grid[r][c] == 0 and (r,c) not in outside:\n outside.add((r,c))\n queue.append((r,c))\n\n while queue:\n r, c = queue.pop(0)\n for dr, dc in [(0,1),(0,-1),(1,0),(-1,0)]:\n nr, nc = r+dr, c+dc\n if 0 <= nr < rows and 0 <= nc < cols and (nr,nc) not in outside and grid[nr][nc] == 0:\n outside.add((nr,nc))\n queue.append((nr,nc))\n\n for r in range(rows):\n for c in range(cols):\n if grid[r][c] == 0:\n output[r][c] = 3 if (r,c) in outside else 2\n return output\n",
"7837ac64": "def solve(grid):\n rows = len(grid)\n cols = len(grid[0])\n from collections import Counter\n\n counts = Counter(v for r in grid for v in r)\n bg = counts.most_common(1)[0][0]\n\n if bg == 0:\n tile_color = max((c for c in counts if c != 0), key=lambda c: counts[c])\n else:\n tile_color = bg\n\n # Find grid line rows and columns\n full_rows = [r for r in range(rows) if all(grid[r][c] == tile_color for c in range(cols))]\n special_rows = [r for r in range(rows) if any(grid[r][c] != tile_color and grid[r][c] != 0 for c in range(cols))]\n all_grid_rows = sorted(set(full_rows + special_rows))\n\n full_cols = [c for c in range(cols) if all(grid[r][c] == tile_color for r in range(rows))]\n special_cols = [c for c in range(cols) if any(grid[r][c] != tile_color and grid[r][c] != 0 for r in range(rows))]\n all_grid_cols = sorted(set(full_cols + special_cols))\n\n # Get intersection colors (non-tile values at grid line crossings)\n int_grid = {}\n for ri, r in enumerate(all_grid_rows):\n for ci, c in enumerate(all_grid_cols):\n v = grid[r][c]\n if v != tile_color:\n int_grid[(ri, ci)] = v\n\n if not int_grid:\n return [[0]]\n\n gis = [gi for gi, gj in int_grid]\n gjs = [gj for gi, gj in int_grid]\n gi_min, gi_max = min(gis), max(gis)\n gj_min, gj_max = min(gjs), max(gjs)\n\n n_gi = gi_max - gi_min + 1\n n_gj = gj_max - gj_min + 1\n\n # Build 4x4 (or NxN) sub-grid of special values\n sub = [[0]*n_gj for _ in range(n_gi)]\n for (gi, gj), v in int_grid.items():\n sub[gi - gi_min][gj - gj_min] = v\n\n # Apply 2x2 sliding window: output (i,j) = value if all 4 cells same, else 0\n out_rows = n_gi - 1\n out_cols = n_gj - 1\n output = [[0]*out_cols for _ in range(out_rows)]\n for i in range(out_rows):\n for j in range(out_cols):\n vals = [sub[i][j], sub[i][j+1], sub[i+1][j], sub[i+1][j+1]]\n if vals[0] == vals[1] == vals[2] == vals[3]:\n output[i][j] = vals[0]\n else:\n output[i][j] = 0\n return output\n"
} |