File size: 20,781 Bytes
c8a2aeb
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
{
  "0a938d79": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\n    output = [[0]*cols for _ in range(rows)]\n\n    points = []\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] != 0:\n                points.append((r, c, grid[r][c]))\n\n    r1, c1, v1 = points[0]\n    r2, c2, v2 = points[1]\n\n    dr = abs(r2 - r1)\n    dc = abs(c2 - c1)\n\n    if dc == 0 or dr > dc:\n        if dc > 0:\n            # Vertical stripes\n            if c1 < c2:\n                first_c, first_v = c1, v1\n                second_c, second_v = c2, v2\n            else:\n                first_c, first_v = c2, v2\n                second_c, second_v = c1, v1\n            spacing = second_c - first_c\n            for c in range(cols):\n                if c >= first_c:\n                    rel = (c - first_c) % (spacing * 2)\n                    if rel == 0:\n                        for r in range(rows):\n                            output[r][c] = first_v\n                    elif rel == spacing:\n                        for r in range(rows):\n                            output[r][c] = second_v\n            return output\n        # Horizontal stripes\n        if r1 < r2:\n            first_r, first_v = r1, v1\n            second_r, second_v = r2, v2\n        else:\n            first_r, first_v = r2, v2\n            second_r, second_v = r1, v1\n        spacing = second_r - first_r\n        for r in range(rows):\n            if r >= first_r:\n                rel = (r - first_r) % (spacing * 2)\n                if rel == 0:\n                    for c in range(cols):\n                        output[r][c] = first_v\n                elif rel == spacing:\n                    for c in range(cols):\n                        output[r][c] = second_v\n    else:\n        # dr <= dc: horizontal stripes\n        if r1 < r2:\n            first_r, first_v = r1, v1\n            second_r, second_v = r2, v2\n        else:\n            first_r, first_v = r2, v2\n            second_r, second_v = r1, v1\n        spacing = second_r - first_r\n        if spacing == 0:\n            # Same row -> vertical stripes\n            if c1 < c2:\n                first_c, first_v = c1, v1\n                second_c, second_v = c2, v2\n            else:\n                first_c, first_v = c2, v2\n                second_c, second_v = c1, v1\n            sp = second_c - first_c\n            for c in range(cols):\n                if c >= first_c:\n                    rel = (c - first_c) % (sp * 2)\n                    if rel == 0:\n                        for r in range(rows):\n                            output[r][c] = first_v\n                    elif rel == sp:\n                        for r in range(rows):\n                            output[r][c] = second_v\n        else:\n            for r in range(rows):\n                if r >= first_r:\n                    rel = (r - first_r) % (spacing * 2)\n                    if rel == 0:\n                        for c in range(cols):\n                            output[r][c] = first_v\n                    elif rel == spacing:\n                        for c in range(cols):\n                            output[r][c] = second_v\n    return output\n",
  "0b148d64": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\n\n    sep_rows = set()\n    for r in range(rows):\n        if all(grid[r][c] == 0 for c in range(cols)):\n            sep_rows.add(r)\n\n    sep_cols = set()\n    for c in range(cols):\n        if all(grid[r][c] == 0 for r in range(rows)):\n            sep_cols.add(c)\n\n    sorted_sep_rows = sorted(sep_rows)\n    row_groups = []\n    if sorted_sep_rows:\n        start = sorted_sep_rows[0]\n        for i in range(1, len(sorted_sep_rows)):\n            if sorted_sep_rows[i] != sorted_sep_rows[i-1] + 1:\n                row_groups.append((start, sorted_sep_rows[i-1]))\n                start = sorted_sep_rows[i]\n        row_groups.append((start, sorted_sep_rows[-1]))\n\n    sorted_sep_cols = sorted(sep_cols)\n    col_groups = []\n    if sorted_sep_cols:\n        start = sorted_sep_cols[0]\n        for i in range(1, len(sorted_sep_cols)):\n            if sorted_sep_cols[i] != sorted_sep_cols[i-1] + 1:\n                col_groups.append((start, sorted_sep_cols[i-1]))\n                start = sorted_sep_cols[i]\n        col_groups.append((start, sorted_sep_cols[-1]))\n\n    row_ranges = []\n    prev = 0\n    for rg in row_groups:\n        if prev < rg[0]:\n            row_ranges.append((prev, rg[0] - 1))\n        prev = rg[1] + 1\n    if prev < rows:\n        row_ranges.append((prev, rows - 1))\n\n    col_ranges = []\n    prev = 0\n    for cg in col_groups:\n        if prev < cg[0]:\n            col_ranges.append((prev, cg[0] - 1))\n        prev = cg[1] + 1\n    if prev < cols:\n        col_ranges.append((prev, cols - 1))\n\n    regions = []\n    for rr in row_ranges:\n        for cr in col_ranges:\n            region = []\n            colors = set()\n            for r in range(rr[0], rr[1]+1):\n                row = []\n                for c in range(cr[0], cr[1]+1):\n                    row.append(grid[r][c])\n                    if grid[r][c] != 0:\n                        colors.add(grid[r][c])\n                region.append(row)\n            regions.append((region, colors))\n\n    from collections import Counter\n    color_count = Counter()\n    for region, colors in regions:\n        for c in colors:\n            color_count[c] += 1\n\n    unique_color = None\n    for c, cnt in color_count.items():\n        if cnt == 1:\n            unique_color = c\n            break\n\n    if unique_color is None:\n        unique_color = min(color_count, key=color_count.get)\n\n    for region, colors in regions:\n        if unique_color in colors:\n            return region\n\n    return regions[0][0]\n",
  "0dfd9992": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\n    output = [row[:] for row in grid]\n\n    for pr in range(1, rows):\n        for pc in range(1, cols):\n            pattern = [[None]*pc for _ in range(pr)]\n            ok = True\n            for r in range(rows):\n                for c in range(cols):\n                    pr_idx = r % pr\n                    pc_idx = c % pc\n                    if grid[r][c] != 0:\n                        if pattern[pr_idx][pc_idx] is None:\n                            pattern[pr_idx][pc_idx] = grid[r][c]\n                        elif pattern[pr_idx][pc_idx] != grid[r][c]:\n                            ok = False\n                            break\n                if not ok:\n                    break\n            if ok:\n                all_filled = all(pattern[r][c] is not None for r in range(pr) for c in range(pc))\n                if all_filled:\n                    for r in range(rows):\n                        for c in range(cols):\n                            output[r][c] = pattern[r % pr][c % pc]\n                    return output\n    return output\n",
  "1a07d186": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\n\n    h_lines = {}\n    for r in range(rows):\n        vals = set(grid[r])\n        if len(vals) == 1 and 0 not in vals:\n            h_lines[r] = grid[r][0]\n\n    v_lines = {}\n    for c in range(cols):\n        vals = set(grid[r][c] for r in range(rows))\n        if len(vals) == 1 and 0 not in vals:\n            v_lines[c] = grid[0][c]\n\n    color_to_hline = {}\n    color_to_vline = {}\n    for r, color in h_lines.items():\n        color_to_hline[color] = r\n    for c, color in v_lines.items():\n        color_to_vline[color] = c\n\n    output = [[0]*cols for _ in range(rows)]\n    for r, color in h_lines.items():\n        for c in range(cols):\n            output[r][c] = color\n    for c, color in v_lines.items():\n        for r in range(rows):\n            output[r][c] = color\n\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] != 0 and r not in h_lines and c not in v_lines:\n                dot_color = grid[r][c]\n\n                if dot_color in color_to_vline:\n                    lc = color_to_vline[dot_color]\n                    if c > lc:\n                        output[r][lc + 1] = dot_color\n                    else:\n                        output[r][lc - 1] = dot_color\n                elif dot_color in color_to_hline:\n                    lr = color_to_hline[dot_color]\n                    if r > lr:\n                        output[lr + 1][c] = dot_color\n                    else:\n                        output[lr - 1][c] = dot_color\n\n    return output\n",
  "1c786137": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\n\n    for border_color in set(grid[r][c] for r in range(rows) for c in range(cols)) - {0}:\n        min_r = min_c = float('inf')\n        max_r = max_c = -1\n        for r in range(rows):\n            for c in range(cols):\n                if grid[r][c] == border_color:\n                    min_r = min(min_r, r)\n                    max_r = max(max_r, r)\n                    min_c = min(min_c, c)\n                    max_c = max(max_c, c)\n\n        top_ok = all(grid[min_r][c] == border_color for c in range(min_c, max_c + 1))\n        bot_ok = all(grid[max_r][c] == border_color for c in range(min_c, max_c + 1))\n        left_ok = all(grid[r][min_c] == border_color for r in range(min_r, max_r + 1))\n        right_ok = all(grid[r][max_c] == border_color for r in range(min_r, max_r + 1))\n\n        if top_ok and bot_ok and left_ok and right_ok:\n            interior = []\n            for r in range(min_r + 1, max_r):\n                row = []\n                for c in range(min_c + 1, max_c):\n                    row.append(grid[r][c])\n                interior.append(row)\n            return interior\n    return grid\n",
  "1e32b0e9": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\n    output = [row[:] for row in grid]\n\n    div_color = None\n    div_rows = []\n    div_cols = []\n\n    for r in range(rows):\n        if len(set(grid[r])) == 1 and grid[r][0] != 0:\n            div_rows.append(r)\n            div_color = grid[r][0]\n\n    for c in range(cols):\n        col_vals = set(grid[r][c] for r in range(rows))\n        if len(col_vals) == 1 and list(col_vals)[0] == div_color:\n            div_cols.append(c)\n\n    all_row_bounds = [0] + div_rows + [rows]\n    all_col_bounds = [0] + div_cols + [cols]\n\n    sec_rows = []\n    for i in range(len(all_row_bounds) - 1):\n        rs = all_row_bounds[i]\n        re = all_row_bounds[i+1]\n        if rs in div_rows:\n            rs += 1\n        if re - 1 in div_rows:\n            re -= 1\n        if rs < re:\n            sec_rows.append((rs, re))\n\n    sec_cols = []\n    for i in range(len(all_col_bounds) - 1):\n        cs = all_col_bounds[i]\n        ce = all_col_bounds[i+1]\n        if cs in div_cols:\n            cs += 1\n        if ce - 1 in div_cols:\n            ce -= 1\n        if cs < ce:\n            sec_cols.append((cs, ce))\n\n    sec_h = sec_rows[0][1] - sec_rows[0][0]\n    sec_w = sec_cols[0][1] - sec_cols[0][0]\n\n    union_mask = [[False]*sec_w for _ in range(sec_h)]\n\n    section_data = []\n    for sr, (rs, re) in enumerate(sec_rows):\n        for sc, (cs, ce) in enumerate(sec_cols):\n            sec = []\n            for r in range(rs, re):\n                row = []\n                for c in range(cs, ce):\n                    row.append(grid[r][c])\n                    if grid[r][c] != 0:\n                        union_mask[r-rs][c-cs] = True\n                sec.append(row)\n            section_data.append((sr, sc, sec, rs, cs))\n\n    for sr, sc, sec, rs, cs in section_data:\n        for r in range(sec_h):\n            for c in range(sec_w):\n                if union_mask[r][c]:\n                    if sec[r][c] == 0:\n                        output[rs+r][cs+c] = div_color\n\n    return output\n",
  "1f85a75f": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\n    from collections import Counter\n\n    cc = Counter()\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] != 0:\n                cc[grid[r][c]] += 1\n\n    for color in sorted(cc, key=cc.get):\n        positions = []\n        for r in range(rows):\n            for c in range(cols):\n                if grid[r][c] == color:\n                    positions.append((r, c))\n\n        min_r = min(p[0] for p in positions)\n        max_r = max(p[0] for p in positions)\n        min_c = min(p[1] for p in positions)\n        max_c = max(p[1] for p in positions)\n\n        bbox_area = (max_r - min_r + 1) * (max_c - min_c + 1)\n        density = len(positions) / bbox_area\n        if density > 0.4 and bbox_area <= rows * cols / 4:\n            result = []\n            for r in range(min_r, max_r + 1):\n                row = []\n                for c in range(min_c, max_c + 1):\n                    if grid[r][c] == color:\n                        row.append(color)\n                    else:\n                        row.append(0)\n                result.append(row)\n            return result\n    return grid\n",
  "045e512c": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\n    output = [row[:] for row in grid]\n\n    visited = [[False]*cols for _ in range(rows)]\n    def flood(r, c):\n        stack = [(r,c)]\n        comp = []\n        while stack:\n            cr, cc = stack.pop()\n            if cr<0 or cr>=rows or cc<0 or cc>=cols: continue\n            if visited[cr][cc] or grid[cr][cc] == 0: continue\n            visited[cr][cc] = True\n            comp.append((cr,cc,grid[cr][cc]))\n            for dr,dc in [(-1,0),(1,0),(0,-1),(0,1)]:\n                stack.append((cr+dr,cc+dc))\n        return comp\n\n    components = []\n    for r in range(rows):\n        for c in range(cols):\n            if not visited[r][c] and grid[r][c] != 0:\n                comp = flood(r, c)\n                if comp:\n                    components.append(comp)\n\n    from collections import defaultdict\n    color_comps = defaultdict(list)\n    for comp in components:\n        color = comp[0][2]\n        color_comps[color].append(comp)\n\n    main_color = max(color_comps, key=lambda c: sum(len(comp) for comp in color_comps[c]))\n    main_cells = []\n    for comp in color_comps[main_color]:\n        main_cells.extend(comp)\n\n    min_r = min(c[0] for c in main_cells)\n    max_r = max(c[0] for c in main_cells)\n    min_c = min(c[1] for c in main_cells)\n    max_c = max(c[1] for c in main_cells)\n    shape_h = max_r - min_r + 1\n    shape_w = max_c - min_c + 1\n\n    shape_cells = [(r - min_r, c - min_c) for r, c, v in main_cells]\n    shape_cr = (min_r + max_r) / 2\n    shape_cc = (min_c + max_c) / 2\n\n    arrow_groups = []\n    for color, comps in color_comps.items():\n        if color == main_color:\n            continue\n        if len(comps) == 1:\n            arrow_groups.append(comps[0])\n        else:\n            centers = []\n            for comp in comps:\n                cr = sum(c[0] for c in comp) / len(comp)\n                cc = sum(c[1] for c in comp) / len(comp)\n                centers.append((cr, cc))\n\n            directions = []\n            for cr, cc in centers:\n                dr = cr - shape_cr\n                dc = cc - shape_cc\n                dr_d = 0 if abs(dr) < 0.5 else (1 if dr > 0 else -1)\n                dc_d = 0 if abs(dc) < 0.5 else (1 if dc > 0 else -1)\n                directions.append((dr_d, dc_d))\n\n            if len(set(directions)) == 1:\n                merged = []\n                for comp in comps:\n                    merged.extend(comp)\n                arrow_groups.append(merged)\n            else:\n                for comp in comps:\n                    arrow_groups.append(comp)\n\n    for arrow_cells in arrow_groups:\n        arrow_color = arrow_cells[0][2]\n        ar = sum(c[0] for c in arrow_cells) / len(arrow_cells)\n        ac = sum(c[1] for c in arrow_cells) / len(arrow_cells)\n\n        dr = ar - shape_cr\n        dc = ac - shape_cc\n\n        step_r = 0\n        step_c = 0\n\n        if abs(dr) > 0.5:\n            if dr > 0:\n                arrow_min_r = min(c[0] for c in arrow_cells)\n                step_r = arrow_min_r - min_r\n            else:\n                arrow_max_r = max(c[0] for c in arrow_cells)\n                step_r = -(max_r - arrow_max_r)\n\n        if abs(dc) > 0.5:\n            if dc > 0:\n                arrow_min_c = min(c[1] for c in arrow_cells)\n                step_c = arrow_min_c - min_c\n            else:\n                arrow_max_c = max(c[1] for c in arrow_cells)\n                step_c = -(max_c - arrow_max_c)\n\n        if step_r == 0 and step_c == 0:\n            continue\n\n        k = 1\n        while True:\n            placed = False\n            for sr, sc in shape_cells:\n                nr = min_r + sr + k * step_r\n                nc = min_c + sc + k * step_c\n                if 0 <= nr < rows and 0 <= nc < cols:\n                    output[nr][nc] = arrow_color\n                    placed = True\n            if not placed:\n                break\n            k += 1\n\n    return output\n",
  "06df4c85": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\n    output = [row[:] for row in grid]\n\n    grid_color = None\n    grid_rows_set = set()\n    for r in range(rows):\n        vals = set(grid[r])\n        if len(vals) == 1 and 0 not in vals:\n            grid_rows_set.add(r)\n            grid_color = grid[r][0]\n\n    if grid_color is None:\n        return output\n\n    non_grid_rows = [r for r in range(rows) if r not in grid_rows_set]\n\n    grid_cols_set = set()\n    for c in range(cols):\n        if all(grid[r][c] == grid_color for r in non_grid_rows):\n            grid_cols_set.add(c)\n\n    def get_bands(indices, total):\n        non_div = sorted(set(range(total)) - indices)\n        bands = []\n        if not non_div:\n            return bands\n        start = non_div[0]\n        for i in range(1, len(non_div)):\n            if non_div[i] != non_div[i-1] + 1:\n                bands.append((start, non_div[i-1]))\n                start = non_div[i]\n        bands.append((start, non_div[-1]))\n        return bands\n\n    row_bands = get_bands(grid_rows_set, rows)\n    col_bands = get_bands(grid_cols_set, cols)\n\n    cell_colors = {}\n\n    for ci, (rs, re) in enumerate(row_bands):\n        for cj, (cs, ce) in enumerate(col_bands):\n            colors = set()\n            for r in range(rs, re+1):\n                for c in range(cs, ce+1):\n                    v = grid[r][c]\n                    if v != grid_color and v != 0:\n                        colors.add(v)\n            if colors:\n                cell_colors[(ci, cj)] = list(colors)[0]\n\n    from collections import defaultdict\n    color_cells = defaultdict(list)\n    for (ci, cj), color in cell_colors.items():\n        color_cells[color].append((ci, cj))\n\n    filled_cells = dict(cell_colors)\n\n    for color, cells in color_cells.items():\n        row_groups = defaultdict(list)\n        col_groups = defaultdict(list)\n        for ci, cj in cells:\n            row_groups[ci].append(cj)\n            col_groups[cj].append(ci)\n\n        for ci, cj_list in row_groups.items():\n            if len(cj_list) >= 2:\n                min_cj = min(cj_list)\n                max_cj = max(cj_list)\n                for cj in range(min_cj, max_cj + 1):\n                    if (ci, cj) not in filled_cells:\n                        filled_cells[(ci, cj)] = color\n\n        for cj, ci_list in col_groups.items():\n            if len(ci_list) >= 2:\n                min_ci = min(ci_list)\n                max_ci = max(ci_list)\n                for ci in range(min_ci, max_ci + 1):\n                    if (ci, cj) not in filled_cells:\n                        filled_cells[(ci, cj)] = color\n\n    for (ci, cj), color in filled_cells.items():\n        if (ci, cj) in cell_colors:\n            continue\n        rs, re = row_bands[ci]\n        cs, ce = col_bands[cj]\n\n        src = None\n        for (sci, scj), sc in cell_colors.items():\n            if sc == color:\n                src = (sci, scj)\n                break\n        if src is None:\n            continue\n        src_rs, src_re = row_bands[src[0]]\n        src_cs, src_ce = col_bands[src[1]]\n\n        for dr in range(re - rs + 1):\n            for dc in range(ce - cs + 1):\n                sr = src_rs + dr\n                sc2 = src_cs + dc\n                if sr <= src_re and sc2 <= src_ce:\n                    if grid[sr][sc2] != grid_color and grid[sr][sc2] != 0:\n                        output[rs + dr][cs + dc] = color\n\n    return output\n"
}