File size: 16,317 Bytes
322f06a
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
{
  "90c28cc7": "def solve(grid):\n    rows, cols = len(grid), len(grid[0])\n    min_r, max_r, min_c, max_c = rows, 0, cols, 0\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] != 0:\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    col_boundaries = set()\n    for r in range(min_r, max_r+1):\n        for c in range(min_c+1, max_c+1):\n            if grid[r][c] != grid[r][c-1]:\n                col_boundaries.add(c)\n    row_boundaries = set()\n    for c in range(min_c, max_c+1):\n        for r in range(min_r+1, max_r+1):\n            if grid[r][c] != grid[r-1][c]:\n                row_boundaries.add(r)\n    col_breaks = sorted([min_c] + list(col_boundaries) + [max_c+1])\n    row_breaks = sorted([min_r] + list(row_boundaries) + [max_r+1])\n    out = []\n    for ri in range(len(row_breaks)-1):\n        row = []\n        for ci in range(len(col_breaks)-1):\n            row.append(grid[row_breaks[ri]][col_breaks[ci]])\n        out.append(row)\n    return out",
  "91714a58": "def solve(grid):\n    rows, cols = len(grid), len(grid[0])\n    best = None\n    best_area = 0\n    for val in range(1, 10):\n        for r1 in range(rows):\n            for c1 in range(cols):\n                if grid[r1][c1] != val:\n                    continue\n                max_c2 = cols - 1\n                for r2 in range(r1, rows):\n                    if grid[r2][c1] != val:\n                        break\n                    c2 = c1\n                    while c2 + 1 <= max_c2 and grid[r2][c2+1] == val:\n                        c2 += 1\n                    max_c2 = min(max_c2, c2)\n                    area = (r2 - r1 + 1) * (max_c2 - c1 + 1)\n                    if area > best_area:\n                        best_area = area\n                        best = (val, r1, r2, c1, max_c2)\n    output = [[0]*cols for _ in range(rows)]\n    if best:\n        val, r1, r2, c1, c2 = best\n        for r in range(r1, r2+1):\n            for c in range(c1, c2+1):\n                output[r][c] = val\n    return output",
  "97a05b5b": "def solve(grid):\n    rows, cols = len(grid), len(grid[0])\n    visited = set()\n    components = []\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] == 2 and (r,c) not in visited:\n                comp = set()\n                queue = [(r,c)]\n                while queue:\n                    cr,cc = queue.pop(0)\n                    if (cr,cc) in visited or grid[cr][cc] != 2:\n                        continue\n                    visited.add((cr,cc))\n                    comp.add((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<rows and 0<=nc<cols:\n                            queue.append((nr,nc))\n                components.append(comp)\n    main_comp = max(components, key=len)\n    mr1 = min(r for r,c in main_comp)\n    mr2 = max(r for r,c in main_comp)\n    mc1 = min(c for r,c in main_comp)\n    mc2 = max(c for r,c in main_comp)\n    rh = mr2-mr1+1\n    rw = mc2-mc1+1\n    rect = [[grid[r+mr1][c+mc1] for c in range(rw)] for r in range(rh)]\n    all_zeros = set()\n    for r in range(rh):\n        for c in range(rw):\n            if rect[r][c] == 0:\n                all_zeros.add((r,c))\n    patch_visited = set()\n    patch_grids = []\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] != 0 and (r,c) not in patch_visited:\n                if mr1 <= r <= mr2 and mc1 <= c <= mc2:\n                    continue\n                patch = {}\n                queue = [(r,c)]\n                while queue:\n                    cr,cc = queue.pop(0)\n                    if (cr,cc) in patch_visited or grid[cr][cc] == 0:\n                        continue\n                    if mr1 <= cr <= mr2 and mc1 <= cc <= mc2:\n                        continue\n                    patch_visited.add((cr,cc))\n                    patch[(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<rows and 0<=nc<cols:\n                            queue.append((nr,nc))\n                if patch:\n                    pr1 = min(r for r,c in patch)\n                    pc1 = min(c for r,c in patch)\n                    pr2 = max(r for r,c in patch)\n                    pc2 = max(c for r,c in patch)\n                    g = [[2]*(pc2-pc1+1) for _ in range(pr2-pr1+1)]\n                    for (rr,cc), v in patch.items():\n                        g[rr-pr1][cc-pc1] = v\n                    patch_grids.append(g)\n    def get_variants(g):\n        variants = []\n        cur = g\n        for _ in range(4):\n            variants.append([row[:] for row in cur])\n            variants.append([row[::-1] for row in cur])\n            ch, cw = len(cur), len(cur[0])\n            cur = [[cur[ch-1-c][r] for c in range(ch)] for r in range(cw)]\n        unique = []\n        seen = set()\n        for v in variants:\n            key = tuple(tuple(row) for row in v)\n            if key not in seen:\n                seen.add(key)\n                unique.append(v)\n        return unique\n    output = [row[:] for row in rect]\n    for r,c in all_zeros:\n        output[r][c] = 2\n    remaining_zeros = set(all_zeros)\n    used = set()\n    placements = []\n    for pi, pg in enumerate(patch_grids):\n        for variant in get_variants(pg):\n            vh, vw = len(variant), len(variant[0])\n            twos = [(r,c) for r in range(vh) for c in range(vw) if variant[r][c] == 2]\n            non2s = [(r,c,variant[r][c]) for r in range(vh) for c in range(vw) if variant[r][c] != 2]\n            for tz_r, tz_c in twos:\n                for z_r, z_c in all_zeros:\n                    off_r = z_r - tz_r\n                    off_c = z_c - tz_c\n                    ok = True\n                    mapped_zeros = set()\n                    for tr, tc in twos:\n                        rr, cc = tr+off_r, tc+off_c\n                        if (rr,cc) not in all_zeros:\n                            ok = False\n                            break\n                        mapped_zeros.add((rr,cc))\n                    if not ok:\n                        continue\n                    for nr, nc, nv in non2s:\n                        rr, cc = nr+off_r, nc+off_c\n                        if rr < 0 or rr >= rh or cc < 0 or cc >= rw:\n                            ok = False\n                            break\n                        if rect[rr][cc] != 2:\n                            ok = False\n                            break\n                    if ok:\n                        min_bd = float('inf')\n                        for nr, nc, nv in non2s:\n                            rr, cc = nr+off_r, nc+off_c\n                            d = min(rr, rh-1-rr, cc, rw-1-cc)\n                            min_bd = min(min_bd, d)\n                        placements.append((min_bd, pi, variant, off_r, off_c, mapped_zeros))\n                    break\n    placements.sort(key=lambda x: -x[0])\n    for score, pi, variant, off_r, off_c, mapped_zeros in placements:\n        if pi in used:\n            continue\n        if not mapped_zeros.issubset(remaining_zeros):\n            continue\n        vh, vw = len(variant), len(variant[0])\n        for r in range(vh):\n            for c in range(vw):\n                if variant[r][c] != 2:\n                    output[r+off_r][c+off_c] = variant[r][c]\n        remaining_zeros -= mapped_zeros\n        used.add(pi)\n    return output",
  "98cf29f8": "def solve(grid):\n    rows, cols = len(grid), len(grid[0])\n    from collections import Counter\n    colors = Counter()\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] != 0:\n                colors[grid[r][c]] += 1\n    color_list = list(colors.keys())\n    color_info = {}\n    for col_val in color_list:\n        positions = [(r,c) for r in range(rows) for c in range(cols) if grid[r][c] == col_val]\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        area = (max_r-min_r+1)*(max_c-min_c+1)\n        is_rect = len(positions) == area\n        color_info[col_val] = {\n            'positions': set(positions), 'count': len(positions),\n            'bbox': (min_r, max_r, min_c, max_c), 'area': area, 'is_rect': is_rect\n        }\n    anchor_color = None\n    mover_color = None\n    for col_val in color_list:\n        if color_info[col_val]['is_rect']:\n            anchor_color = col_val\n        else:\n            mover_color = col_val\n    if anchor_color is None or mover_color is None:\n        sorted_colors = sorted(color_list, key=lambda c: color_info[c]['count'], reverse=True)\n        anchor_color = sorted_colors[0]\n        mover_color = sorted_colors[1] if len(sorted_colors) > 1 else sorted_colors[0]\n    mover_positions = color_info[mover_color]['positions']\n    best_rect = None\n    best_rect_area = 0\n    mr1, mr2, mc1, mc2 = color_info[mover_color]['bbox']\n    for r1 in range(mr1, mr2+1):\n        for c1 in range(mc1, mc2+1):\n            if (r1, c1) not in mover_positions:\n                continue\n            max_c2 = mc2\n            for r2 in range(r1, mr2+1):\n                if (r2, c1) not in mover_positions:\n                    break\n                c2 = c1\n                while c2 + 1 <= max_c2 and (r2, c2+1) in mover_positions:\n                    c2 += 1\n                max_c2 = min(max_c2, c2)\n                area = (r2 - r1 + 1) * (max_c2 - c1 + 1)\n                if area > best_rect_area:\n                    best_rect_area = area\n                    best_rect = (r1, r2, c1, max_c2)\n    rect_r1, rect_r2, rect_c1, rect_c2 = best_rect\n    rect_h = rect_r2 - rect_r1 + 1\n    rect_w = rect_c2 - rect_c1 + 1\n    rect_set = set()\n    for r in range(rect_r1, rect_r2+1):\n        for c in range(rect_c1, rect_c2+1):\n            rect_set.add((r,c))\n    line_positions = mover_positions - rect_set\n    anc_r1, anc_r2, anc_c1, anc_c2 = color_info[anchor_color]['bbox']\n    if len(line_positions) > 0:\n        if all(c == list(line_positions)[0][1] for r,c in line_positions):\n            if rect_r1 > anc_r2:\n                new_r1 = anc_r2 + 1\n                new_c1 = rect_c1\n            else:\n                new_r1 = anc_r1 - rect_h\n                new_c1 = rect_c1\n        else:\n            if rect_c1 > anc_c2:\n                new_r1 = rect_r1\n                new_c1 = anc_c2 + 1\n            else:\n                new_r1 = rect_r1\n                new_c1 = anc_c1 - rect_w\n    output = [[0]*cols for _ in range(rows)]\n    for r in range(anc_r1, anc_r2+1):\n        for c in range(anc_c1, anc_c2+1):\n            output[r][c] = anchor_color\n    for dr in range(rect_h):\n        for dc in range(rect_w):\n            output[new_r1+dr][new_c1+dc] = mover_color\n    return output",
  "9aec4887": "def solve(grid):\n    rows, cols = len(grid), len(grid[0])\n    eight_pos = []\n    non_eight = {}\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] == 8:\n                eight_pos.append((r,c))\n            elif grid[r][c] != 0:\n                if grid[r][c] not in non_eight:\n                    non_eight[grid[r][c]] = []\n                non_eight[grid[r][c]].append((r,c))\n    frame_colors = {}\n    for color, positions in non_eight.items():\n        rs = [p[0] for p in positions]\n        cs = [p[1] for p in positions]\n        if len(set(rs)) == 1:\n            frame_colors[color] = ('h', min(rs), min(cs), max(cs))\n        elif len(set(cs)) == 1:\n            frame_colors[color] = ('v', min(rs), max(rs), min(cs))\n    h_colors = [(c, info) for c, info in frame_colors.items() if info[0] == 'h']\n    v_colors = [(c, info) for c, info in frame_colors.items() if info[0] == 'v']\n    h_colors.sort(key=lambda x: x[1][1])\n    v_colors.sort(key=lambda x: x[1][3])\n    top_color = h_colors[0][0]\n    bottom_color = h_colors[1][0]\n    left_color = v_colors[0][0]\n    right_color = v_colors[1][0]\n    pat_min_r = min(p[0] for p in eight_pos)\n    pat_min_c = min(p[1] for p in eight_pos)\n    pat_max_r = max(p[0] for p in eight_pos)\n    pat_max_c = max(p[1] for p in eight_pos)\n    pat_h = pat_max_r - pat_min_r + 1\n    pat_w = pat_max_c - pat_min_c + 1\n    n = pat_h\n    out_h = n + 2\n    out_w = pat_w + 2\n    output = [[0] * out_w for _ in range(out_h)]\n    for c in range(1, out_w - 1):\n        output[0][c] = top_color\n    for c in range(1, out_w - 1):\n        output[out_h-1][c] = bottom_color\n    for r in range(1, out_h - 1):\n        output[r][0] = left_color\n    for r in range(1, out_h - 1):\n        output[r][out_w-1] = right_color\n    for r, c in eight_pos:\n        pr = r - pat_min_r\n        pc = c - pat_min_c\n        if pr == pc or pr + pc == n - 1:\n            output[pr+1][pc+1] = 8\n        elif pr < pc and pr + pc < n - 1:\n            output[pr+1][pc+1] = top_color\n        elif pr < pc and pr + pc > n - 1:\n            output[pr+1][pc+1] = right_color\n        elif pr >= pc and pr + pc < n - 1:\n            output[pr+1][pc+1] = left_color\n        elif pr >= pc and pr + pc > n - 1:\n            output[pr+1][pc+1] = bottom_color\n        else:\n            output[pr+1][pc+1] = 8\n    return output",
  "9d9215db": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\n    output = [[0]*cols for _ in range(rows)]\n    values = {}\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] != 0:\n                dr = min(r, rows-1-r)\n                dc = min(c, cols-1-c)\n                values[(dr, dc)] = grid[r][c]\n    for (dr, dc), val in values.items():\n        if dr == dc:\n            for rr in [dr, rows-1-dr]:\n                for cc in [dc, cols-1-dc]:\n                    output[rr][cc] = val\n        elif dr < dc:\n            for cc in range(dc, cols-dc, 2):\n                output[dr][cc] = val\n                output[rows-1-dr][cc] = val\n        else:\n            for rr in range(dr, rows-dr, 2):\n                output[rr][dc] = val\n                output[rr][cols-1-dc] = val\n    return output",
  "9ecd008a": "def solve(grid):\n    rows, cols = len(grid), len(grid[0])\n    zeros = [(r,c) for r in range(rows) for c in range(cols) if grid[r][c] == 0]\n    min_r = min(r for r,c in zeros)\n    min_c = min(c for r,c in zeros)\n    max_r = max(r for r,c in zeros)\n    max_c = max(c for r,c in zeros)\n    out_h = max_r - min_r + 1\n    out_w = max_c - min_c + 1\n    output = [[0]*out_w for _ in range(out_h)]\n    for r,c in zeros:\n        mr = rows - 1 - r\n        mc = cols - 1 - c\n        output[r-min_r][c-min_c] = grid[mr][mc]\n    return output",
  "9f236235": "def solve(grid):\n    rows, cols = len(grid), len(grid[0])\n    sep_color = None\n    for r in range(rows):\n        if all(grid[r][c] == grid[r][0] for c in range(cols)) and grid[r][0] != 0:\n            sep_color = grid[r][0]\n            break\n    sep_rows = [r for r in range(rows) if all(grid[r][c] == sep_color for c in range(cols))]\n    sep_cols = [c for c in range(cols) if all(grid[r][c] == sep_color for r in range(rows))]\n    row_ranges = []\n    prev = 0\n    for sr in sep_rows:\n        if sr > prev:\n            row_ranges.append((prev, sr-1))\n        prev = sr + 1\n    if prev < rows:\n        row_ranges.append((prev, rows-1))\n    col_ranges = []\n    prev = 0\n    for sc in sep_cols:\n        if sc > prev:\n            col_ranges.append((prev, sc-1))\n        prev = sc + 1\n    if prev < cols:\n        col_ranges.append((prev, cols-1))\n    n_rows = len(row_ranges)\n    n_cols = len(col_ranges)\n    cell_grid = [[0]*n_cols for _ in range(n_rows)]\n    for ri, (r1,r2) in enumerate(row_ranges):\n        for ci, (c1,c2) in enumerate(col_ranges):\n            val = grid[r1][c1]\n            if val != 0 and val != sep_color:\n                cell_grid[ri][ci] = val\n    output = [row[::-1] for row in cell_grid]\n    return output"
}