File size: 11,600 Bytes
b2139f3 | 1 2 3 4 5 6 7 8 | {
"56dc2b01": "def solve(grid):\n import copy\n R = len(grid)\n C = len(grid[0])\n two_cells = [(r,c) for r in range(R) for c in range(C) if grid[r][c] == 2]\n three_cells = [(r,c) for r in range(R) for c in range(C) if grid[r][c] == 3]\n two_rows = set(r for r,c in two_cells)\n two_cols = set(c for r,c in two_cells)\n out = [[0]*C for _ in range(R)]\n for r,c in two_cells:\n out[r][c] = 2\n if len(two_rows) == 1:\n line_row = list(two_rows)[0]\n shape_rows = set(r for r,c in three_cells)\n min_r = min(r for r,c in three_cells)\n max_r = max(r for r,c in three_cells)\n shape_h = max_r - min_r + 1\n if all(r < line_row for r in shape_rows):\n new_start_r = line_row - shape_h\n eight_row = new_start_r - 1\n else:\n new_start_r = line_row + 1\n eight_row = new_start_r + shape_h\n for r,c in three_cells:\n new_r = r - min_r + new_start_r\n out[new_r][c] = 3\n for c in range(C):\n if 0 <= eight_row < R:\n out[eight_row][c] = 8\n else:\n line_col = list(two_cols)[0]\n shape_cols = set(c for r,c in three_cells)\n min_c = min(c for r,c in three_cells)\n max_c = max(c for r,c in three_cells)\n shape_w = max_c - min_c + 1\n if all(c < line_col for c in shape_cols):\n new_start_c = line_col - shape_w\n eight_col = new_start_c - 1\n else:\n new_start_c = line_col + 1\n eight_col = new_start_c + shape_w\n for r,c in three_cells:\n new_c = c - min_c + new_start_c\n out[r][new_c] = 3\n for r in range(R):\n if 0 <= eight_col < C:\n out[r][eight_col] = 8\n return out",
"57aa92db": "def solve(grid):\n import copy\n R=len(grid); C=len(grid[0]); out=copy.deepcopy(grid)\n visited=set(); objects=[]\n for r in range(R):\n for c in range(C):\n if grid[r][c]!=0 and (r,c) not in visited:\n obj=[]\n stk=[(r,c)]; visited.add((r,c))\n while stk:\n cr,cc=stk.pop(); obj.append((cr,cc,grid[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<R and 0<=nc<C and grid[nr][nc]!=0 and (nr,nc) not in visited:\n visited.add((nr,nc)); stk.append((nr,nc))\n objects.append(obj)\n h2=[o for o in objects if any(v==2 for _,_,v in o)]\n n2=[o for o in objects if not any(v==2 for _,_,v in o)]\n if len(n2)==2:\n n2.sort(key=len); tobj=n2[0]; lobj=n2[1]\n tc={}; lc={}\n for r,c,v in tobj: tc.setdefault(v,[]).append((r,c))\n for r,c,v in lobj: lc.setdefault(v,[]).append((r,c))\n kc=(set(tc)&set(lc)).pop(); lo=(set(lc)-{kc}).pop()\n ta=[(r,c) for r,c,v in tobj]; tmr=min(r for r,c in ta); tmc=min(c for r,c in ta)\n txr=max(r for r,c in ta); txc=max(c for r,c in ta); th=txr-tmr+1; tw=txc-tmc+1\n tg=[[0]*tw for _ in range(th)]\n for r,c,v in tobj: tg[r-tmr][c-tmc]=v\n kp=None\n for tr in range(th):\n for tcc in range(tw):\n if tg[tr][tcc]==kc: kp=(tr,tcc); break\n if kp: break\n lkc=lc[kc]; lkmr=min(r for r,c in lkc); lkmc=min(c for r,c in lkc)\n lkxr=max(r for r,c in lkc); lkxc=max(c for r,c in lkc)\n bh=lkxr-lkmr+1; bw=lkxc-lkmc+1\n for tr in range(th):\n for tcc in range(tw):\n if tg[tr][tcc]==0: continue\n dr=tr-kp[0]; dc=tcc-kp[1]\n cl=kc if tg[tr][tcc]==kc else lo\n for rr in range(bh):\n for cc in range(bw):\n tr2=lkmr+dr*bh+rr; tc2=lkmc+dc*bw+cc\n if 0<=tr2<R and 0<=tc2<C: out[tr2][tc2]=cl\n elif h2:\n best_ratio=-1; tobj=None\n for o in h2:\n ic={}\n for r,c,v in o: ic.setdefault(v,[]).append((r,c))\n n2c=sum(len(v) for k,v in ic.items() if k!=2)\n n2cnt=len(ic.get(2,[]))\n ratio=n2c/max(n2cnt,1)\n if ratio>best_ratio: best_ratio=ratio; tobj=o\n iobjs=[o for o in h2 if o is not tobj]\n tc={}\n for r,c,v in tobj: tc.setdefault(v,[]).append((r,c))\n t2=tc[2]; t2r,t2c=t2[0]; toc=(set(tc)-{2}).pop()\n rp=[(r-t2r,c-t2c) for r,c in tc[toc]]\n for io in iobjs:\n ic={}\n for r,c,v in io: ic.setdefault(v,[]).append((r,c))\n if 2 not in ic: continue\n i2=ic[2]; ioc=(set(ic)-{2}).pop()\n i2mr=min(r for r,c in i2); i2mc=min(c for r,c in i2)\n i2xr=max(r for r,c in i2); i2xc=max(c for r,c in i2)\n bh=i2xr-i2mr+1; bw=i2xc-i2mc+1\n if bh==1 and bw==1:\n for dr,dc in rp:\n tr2=i2mr+dr; tc2=i2mc+dc\n if 0<=tr2<R and 0<=tc2<C: out[tr2][tc2]=ioc\n else:\n for dr,dc in rp:\n for rr in range(bh):\n for cc in range(bw):\n tr2=i2mr+dr*bh+rr; tc2=i2mc+dc*bw+cc\n if 0<=tr2<R and 0<=tc2<C: out[tr2][tc2]=ioc\n return out",
"5ad4f10b": "def solve(grid):\n R = len(grid)\n C = len(grid[0])\n colors = {}\n for r in range(R):\n for c in range(C):\n v = grid[r][c]\n if v != 0:\n colors.setdefault(v, []).append((r,c))\n for struct_color in colors:\n cells = set(colors[struct_color])\n other_colors = [c for c in colors if c != struct_color]\n if not other_colors: continue\n noise_color = other_colors[0]\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 oR, oC = 3, 3\n if h % oR != 0 or w % oC != 0: continue\n bh = h // oR\n bw = w // oC\n valid = True\n out = [[0]*oC for _ in range(oR)]\n for br in range(oR):\n for bc in range(oC):\n rs = min_r + br*bh\n cs = min_c + bc*bw\n block_cells = set()\n for r in range(rs, rs+bh):\n for c in range(cs, cs+bw):\n if (r,c) in cells:\n block_cells.add((r,c))\n if len(block_cells) == bh * bw:\n out[br][bc] = noise_color\n elif len(block_cells) == 0:\n out[br][bc] = 0\n else:\n valid = False; break\n if not valid: break\n if valid: return out\n return grid",
"6455b5f5": "def solve(grid):\n import copy\n R = len(grid)\n C = len(grid[0])\n out = copy.deepcopy(grid)\n visited = [[False]*C for _ in range(R)]\n components = []\n for r in range(R):\n for c in range(C):\n if grid[r][c] == 0 and not visited[r][c]:\n comp = []\n stack = [(r,c)]\n visited[r][c] = True\n while stack:\n cr, cc = stack.pop()\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<R and 0<=nc<C and not visited[nr][nc] and grid[nr][nc] == 0:\n visited[nr][nc] = True\n stack.append((nr,nc))\n components.append(comp)\n if not components: return out\n sizes = [len(c) for c in components]\n max_size = max(sizes)\n min_size = min(sizes)\n for comp in components:\n if len(comp) == max_size:\n for r,c in comp: out[r][c] = 1\n elif len(comp) == min_size:\n for r,c in comp: out[r][c] = 8\n return out",
"673ef223": "def solve(grid):\n import copy\n R = len(grid); C = len(grid[0]); out = copy.deepcopy(grid)\n twos = [(r,c) for r in range(R) for c in range(C) if grid[r][c] == 2]\n eights = [(r,c) for r in range(R) for c in range(C) if grid[r][c] == 8]\n two_set = set(twos); visited = set(); groups = []\n for r,c in twos:\n if (r,c) not in visited:\n group = []\n stack = [(r,c)]; visited.add((r,c))\n while stack:\n cr,cc = stack.pop(); group.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 two_set and (nr,nc) not in visited:\n visited.add((nr,nc)); stack.append((nr,nc))\n groups.append(group)\n gwm = None; gwom = None\n for gi, group in enumerate(groups):\n group_rows = set(r for r,c in group)\n markers = [(r,c) for r,c in eights if r in group_rows]\n if markers: gwm = (gi, group, group[0][1])\n else: gwom = (gi, group, group[0][1])\n if gwm is None or gwom is None: return out\n gi1, g1, g1_col = gwm\n gi2, g2, g2_col = gwom\n g1_rows = sorted(set(r for r,c in g1))\n g2_rows = sorted(set(r for r,c in g2))\n g1_min_row = min(g1_rows); g2_min_row = min(g2_rows)\n for er, ec in eights:\n if er in set(g1_rows):\n out[er][ec] = 4\n if g1_col == 0:\n for c in range(1, ec): out[er][c] = 8\n else:\n for c in range(ec+1, g1_col): out[er][c] = 8\n marker_offsets = sorted([er - g1_min_row for er, ec in eights if er in set(g1_rows)])\n for offset in marker_offsets:\n target_row = g2_min_row + offset\n if g2_col == 0:\n for c in range(1, C): out[target_row][c] = 8\n else:\n for c in range(0, g2_col): out[target_row][c] = 8\n return out",
"6b9890af": "def solve(grid):\n R = len(grid); C = len(grid[0])\n twos = [(r,c) for r in range(R) for c in range(C) if grid[r][c] == 2]\n rect_min_r = min(r for r,c in twos); rect_max_r = max(r for r,c in twos)\n rect_min_c = min(c for r,c in twos); rect_max_c = max(c for r,c in twos)\n int_h = rect_max_r - rect_min_r - 1; int_w = rect_max_c - rect_min_c - 1\n shape_cells = [(r,c,grid[r][c]) for r in range(R) for c in range(C) if grid[r][c] not in (0, 2)]\n if not shape_cells:\n return [grid[r][rect_min_c:rect_max_c+1] for r in range(rect_min_r, rect_max_r+1)]\n sh_min_r = min(r for r,c,v in shape_cells); sh_max_r = max(r for r,c,v in shape_cells)\n sh_min_c = min(c for r,c,v in shape_cells); sh_max_c = max(c for r,c,v in shape_cells)\n sh_h = sh_max_r - sh_min_r + 1; sh_w = sh_max_c - sh_min_c + 1\n shape = [[0]*sh_w for _ in range(sh_h)]\n for r,c,v in shape_cells: shape[r-sh_min_r][c-sh_min_c] = v\n scale_r = int_h // sh_h; scale_c = int_w // sh_w\n out_h = rect_max_r - rect_min_r + 1; out_w = rect_max_c - rect_min_c + 1\n out = [[0]*out_w for _ in range(out_h)]\n for r in range(out_h):\n for c in range(out_w): out[r][c] = grid[rect_min_r+r][rect_min_c+c]\n for sr in range(sh_h):\n for sc in range(sh_w):\n val = shape[sr][sc]\n for dr in range(scale_r):\n for dc in range(scale_c):\n out[1 + sr*scale_r + dr][1 + sc*scale_c + dc] = val\n return out"
} |