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"
}