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