File size: 11,073 Bytes
04d5692
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
{
  "eb5a1d5d": "def solve(grid):\n    rows, cols = len(grid), len(grid[0])\n    bg = grid[0][0]\n    color_boxes = {}\n    for r in range(rows):\n        for c in range(cols):\n            v = grid[r][c]\n            if v != bg:\n                if v not in color_boxes:\n                    color_boxes[v] = [r, c, r, c]\n                else:\n                    color_boxes[v][0] = min(color_boxes[v][0], r)\n                    color_boxes[v][1] = min(color_boxes[v][1], c)\n                    color_boxes[v][2] = max(color_boxes[v][2], r)\n                    color_boxes[v][3] = max(color_boxes[v][3], c)\n    sorted_colors = sorted(color_boxes.keys(), key=lambda v: (color_boxes[v][2]-color_boxes[v][0]+1)*(color_boxes[v][3]-color_boxes[v][1]+1), reverse=True)\n    all_layers = [bg] + sorted_colors\n    n = len(all_layers)\n    size = 2*n - 1\n    output = [[0]*size for _ in range(size)]\n    for i, color in enumerate(all_layers):\n        for r in range(i, size-i):\n            for c in range(i, size-i):\n                output[r][c] = color\n    return output",
  "ec883f72": "def solve(grid):\n    rows, cols = len(grid), len(grid[0])\n    output = [row[:] for row in grid]\n    colors = {}\n    for r in range(rows):\n        for c in range(cols):\n            v = grid[r][c]\n            if v != 0:\n                if v not in colors:\n                    colors[v] = []\n                colors[v].append((r, c))\n    if len(colors) < 2:\n        return output\n    color_list = list(colors.keys())\n    def fill_ratio(cells):\n        rr = [r for r, c in cells]\n        cc = [c for r, c in cells]\n        r1, c1, r2, c2 = min(rr), min(cc), max(rr), max(cc)\n        area = (r2-r1+1) * (c2-c1+1)\n        return len(cells) / area if area > 0 else 0\n    c0, c1_val = color_list[0], color_list[1]\n    fr0 = fill_ratio(colors[c0])\n    fr1 = fill_ratio(colors[c1_val])\n    if fr0 > fr1:\n        inner_color = c0\n        enc_color = c1_val\n    else:\n        inner_color = c1_val\n        enc_color = c0\n    enc_cells = set(colors[enc_color])\n    inner_cells = set(colors[inner_color])\n    corner_cells = []\n    for r, c in enc_cells:\n        adj = []\n        for dr, dc in [(-1,0),(1,0),(0,-1),(0,1)]:\n            if (r+dr, c+dc) in enc_cells:\n                adj.append((dr, dc))\n        if len(adj) == 2:\n            d1, d2 = adj\n            if d1[0] * d2[0] + d1[1] * d2[1] == 0:\n                esc_dr = -(d1[0] + d2[0])\n                esc_dc = -(d1[1] + d2[1])\n                nr, nc = r + esc_dr, c + esc_dc\n                if 0 <= nr < rows and 0 <= nc < cols:\n                    if (nr, nc) not in enc_cells and (nr, nc) not in inner_cells:\n                        corner_cells.append((r, c, esc_dr, esc_dc))\n    for cr, cc, dr, dc in corner_cells:\n        r, c = cr + dr, cc + dc\n        while 0 <= r < rows and 0 <= c < cols:\n            if output[r][c] == 0:\n                output[r][c] = inner_color\n            r += dr\n            c += dc\n    return output",
  "ecdecbb3": "def solve(grid):\n    rows, cols = len(grid), len(grid[0])\n    output = [row[:] for row in grid]\n    h_lines = sorted([r for r in range(rows) if all(grid[r][c] == 8 for c in range(cols))])\n    v_lines = sorted([c for c in range(cols) if all(grid[r][c] == 8 for r in range(rows))])\n    dots = []\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] == 2:\n                dots.append((r, c))\n    connections = []\n    for dr, dc in dots:\n        above = [lr for lr in h_lines if lr < dr]\n        below = [lr for lr in h_lines if lr > dr]\n        if above:\n            connections.append(((dr, dc), 'h', above[-1]))\n        if below:\n            connections.append(((dr, dc), 'h', below[0]))\n        left = [lc for lc in v_lines if lc < dc]\n        right = [lc for lc in v_lines if lc > dc]\n        if left:\n            connections.append(((dr, dc), 'v', left[-1]))\n        if right:\n            connections.append(((dr, dc), 'v', right[0]))\n    intersections = []\n    for (dr, dc), ltype, lpos in connections:\n        if ltype == 'h':\n            intersections.append((lpos, dc))\n        else:\n            intersections.append((dr, lpos))\n    for ir, ic in intersections:\n        for rr in range(ir - 1, ir + 2):\n            for cc in range(ic - 1, ic + 2):\n                if 0 <= rr < rows and 0 <= cc < cols and output[rr][cc] == 0:\n                    output[rr][cc] = 8\n    for (dr, dc), ltype, lpos in connections:\n        if ltype == 'h':\n            col = dc\n            output[lpos][col] = 2\n            if dr < lpos:\n                for r in range(dr + 1, lpos):\n                    if output[r][col] != 8:\n                        output[r][col] = 2\n            else:\n                for r in range(lpos + 1, dr):\n                    if output[r][col] != 8:\n                        output[r][col] = 2\n        else:\n            row = dr\n            output[row][lpos] = 2\n            if dc < lpos:\n                for c in range(dc + 1, lpos):\n                    if output[row][c] != 8:\n                        output[row][c] = 2\n            else:\n                for c in range(lpos + 1, dc):\n                    if output[row][c] != 8:\n                        output[row][c] = 2\n    return output",
  "f1cefba8": "def solve(grid):\n    rows, cols = len(grid), len(grid[0])\n    output = [row[:] for row in grid]\n    bg = 0\n    frame_cells = {}\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] != bg:\n                v = grid[r][c]\n                if v not in frame_cells:\n                    frame_cells[v] = []\n                frame_cells[v].append((r, c))\n    colors = sorted(frame_cells.keys(), key=lambda v: len(frame_cells[v]), reverse=True)\n    frame_color = colors[0]\n    fill_color = colors[1]\n    all_cells = frame_cells[frame_color] + frame_cells[fill_color]\n    struct_min_r = min(r for r, c in all_cells)\n    struct_max_r = max(r for r, c in all_cells)\n    struct_min_c = min(c for r, c in all_cells)\n    struct_max_c = max(c for r, c in all_cells)\n    from collections import Counter\n    row_counts = Counter(r for r, c in frame_cells[fill_color])\n    col_counts = Counter(c for r, c in frame_cells[fill_color])\n    max_row_count = max(row_counts.values())\n    max_col_count = max(col_counts.values())\n    main_fill_rows = [r for r, cnt in row_counts.items() if cnt >= max_row_count - 1]\n    main_fill_cols = [c for c, cnt in col_counts.items() if cnt >= max_col_count - 1]\n    inner_min_r = min(main_fill_rows)\n    inner_max_r = max(main_fill_rows)\n    inner_min_c = min(main_fill_cols)\n    inner_max_c = max(main_fill_cols)\n    notch_cols = set()\n    notch_rows = set()\n    for r, c in frame_cells[fill_color]:\n        if r < inner_min_r or r > inner_max_r:\n            notch_cols.add(c)\n        if c < inner_min_c or c > inner_max_c:\n            notch_rows.add(r)\n    for r in range(struct_min_r, struct_max_r + 1):\n        for c in range(struct_min_c, struct_max_c + 1):\n            output[r][c] = frame_color\n    for r in range(inner_min_r, inner_max_r + 1):\n        for c in range(inner_min_c, inner_max_c + 1):\n            output[r][c] = fill_color\n    for nc in notch_cols:\n        for r in range(inner_min_r, inner_max_r + 1):\n            output[r][nc] = frame_color\n    for nr in notch_rows:\n        for c in range(inner_min_c, inner_max_c + 1):\n            output[nr][c] = frame_color\n    for nc in notch_cols:\n        for r in range(struct_min_r, struct_max_r + 1):\n            output[r][nc] = frame_color\n    for nr in notch_rows:\n        for c in range(struct_min_c, struct_max_c + 1):\n            output[nr][c] = frame_color\n    for nc in notch_cols:\n        for r in range(0, struct_min_r):\n            output[r][nc] = fill_color\n        for r in range(struct_max_r + 1, rows):\n            output[r][nc] = fill_color\n    for nr in notch_rows:\n        for c in range(0, struct_min_c):\n            output[nr][c] = fill_color\n        for c in range(struct_max_c + 1, cols):\n            output[nr][c] = fill_color\n    return output",
  "f15e1fac": "def solve(grid):\n    rows, cols = len(grid), len(grid[0])\n    output = [[0]*cols for _ in range(rows)]\n    eights = []\n    twos = []\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] == 8:\n                eights.append((r, c))\n            elif grid[r][c] == 2:\n                twos.append((r, c))\n    for r, c in twos:\n        output[r][c] = 2\n    eight_rows = set(r for r, c in eights)\n    eight_cols = set(c for r, c in eights)\n    two_rows = set(r for r, c in twos)\n    two_cols = set(c for r, c in twos)\n    if len(eight_rows) == 1:\n        pattern_cols = sorted(c for r, c in eights)\n        marker_col = list(two_cols)[0]\n        breakpoints = sorted(r for r, c in twos)\n        if marker_col <= cols // 2:\n            shift = 1\n        else:\n            shift = -1\n        seg_starts = [0] + breakpoints\n        seg_ends = breakpoints + [rows]\n        for seg_idx in range(len(seg_starts)):\n            seg_start = seg_starts[seg_idx]\n            seg_end = seg_ends[seg_idx]\n            shifted_cols = [pc + seg_idx * shift for pc in pattern_cols]\n            for r in range(seg_start, seg_end):\n                for sc in shifted_cols:\n                    if 0 <= sc < cols:\n                        output[r][sc] = 8\n    elif len(eight_cols) == 1:\n        pattern_rows = sorted(r for r, c in eights)\n        marker_row = list(two_rows)[0]\n        breakpoints = sorted(c for r, c in twos)\n        shift = -1\n        seg_starts = [0] + breakpoints\n        seg_ends = breakpoints + [cols]\n        for seg_idx in range(len(seg_starts)):\n            seg_c_start = seg_starts[seg_idx]\n            seg_c_end = seg_ends[seg_idx]\n            for pr in pattern_rows:\n                shifted_row = pr + seg_idx * shift\n                if 0 <= shifted_row < rows:\n                    for c in range(seg_c_start, seg_c_end):\n                        output[shifted_row][c] = 8\n    for r, c in twos:\n        output[r][c] = 2\n    return output",
  "fcc82909": "def solve(grid):\n    rows, cols = len(grid), len(grid[0])\n    output = [row[:] for row in grid]\n    visited = [[False]*cols for _ in range(rows)]\n    for r in range(rows-1):\n        for c in range(cols-1):\n            if (grid[r][c] != 0 and grid[r][c+1] != 0 and\n                grid[r+1][c] != 0 and grid[r+1][c+1] != 0 and\n                not visited[r][c]):\n                visited[r][c] = visited[r][c+1] = visited[r+1][c] = visited[r+1][c+1] = True\n                colors = {grid[r][c], grid[r][c+1], grid[r+1][c], grid[r+1][c+1]}\n                shadow_len = len(colors)\n                for dr in range(1, shadow_len + 1):\n                    nr = r + 1 + dr\n                    if nr < rows:\n                        output[nr][c] = 3\n                        output[nr][c+1] = 3\n    return output"
}