File size: 17,822 Bytes
61d4897
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
{
  "d0f5fe59": "def solve(grid):\n    rows, cols = len(grid), len(grid[0])\n    visited = set()\n    count = 0\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] == 8 and (r,c) not in visited:\n                count += 1\n                stack = [(r,c)]\n                while stack:\n                    cr, cc = stack.pop()\n                    if (cr,cc) in visited:\n                        continue\n                    visited.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 and grid[nr][nc]==8 and (nr,nc) not in visited:\n                            stack.append((nr,nc))\n    return [[8 if i==j else 0 for j in range(count)] for i in range(count)]",
  "dc0a314f": "def solve(grid):\n    rows, cols = len(grid), len(grid[0])\n    cr, cc = (rows-1)/2.0, (cols-1)/2.0\n    threes = [(r,c) for r in range(rows) for c in range(cols) if grid[r][c] == 3]\n    min_r = min(r for r,c in threes)\n    max_r = max(r for r,c in threes)\n    min_c = min(c for r,c in threes)\n    max_c = max(c for r,c in threes)\n    output = []\n    for r in range(min_r, max_r+1):\n        row = []\n        for c in range(min_c, max_c+1):\n            sr, sc = round(2*cr - r), round(2*cc - c)\n            row.append(grid[sr][sc])\n        output.append(row)\n    return output",
  "de1cd16c": "def solve(grid):\n    from collections import defaultdict\n    rows, cols = len(grid), len(grid[0])\n    colors = set()\n    for r in range(rows):\n        for c in range(cols):\n            colors.add(grid[r][c])\n    visited = set()\n    components = []\n    for r in range(rows):\n        for c in range(cols):\n            if (r,c) not in visited:\n                color = grid[r][c]\n                cells = []\n                stack = [(r,c)]\n                while stack:\n                    cr, cc = stack.pop()\n                    if (cr,cc) in visited:\n                        continue\n                    visited.add((cr,cc))\n                    cells.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<rows and 0<=nc<cols and grid[nr][nc]==color and (nr,nc) not in visited:\n                            stack.append((nr,nc))\n                components.append((color, len(cells), cells))\n    color_total = defaultdict(int)\n    for color, size, cells in components:\n        color_total[color] += size\n    noise_color = min(colors, key=lambda c: color_total[c])\n    bg_regions = []\n    seen_bg = set()\n    for color in colors:\n        if color == noise_color or color in seen_bg:\n            continue\n        seen_bg.add(color)\n        all_cells = []\n        for c2, s2, cells2 in components:\n            if c2 == color:\n                all_cells.extend(cells2)\n        min_r = min(r for r,c in all_cells)\n        max_r = max(r for r,c in all_cells)\n        min_c = min(c for r,c in all_cells)\n        max_c = max(c for r,c in all_cells)\n        noise_count = 0\n        for r in range(min_r, max_r+1):\n            for c in range(min_c, max_c+1):\n                if grid[r][c] == noise_color:\n                    noise_count += 1\n        bg_regions.append((color, noise_count))\n    bg_regions.sort(key=lambda x: -x[1])\n    return [[bg_regions[0][0]]]",
  "e26a3af2": "def solve(grid):\n    from collections import Counter\n    rows, cols = len(grid), len(grid[0])\n    col_colors = []\n    col_agree = 0\n    for c in range(cols):\n        vals = [grid[r][c] for r in range(rows)]\n        maj = Counter(vals).most_common(1)[0][0]\n        col_colors.append(maj)\n        col_agree += sum(1 for r in range(rows) if grid[r][c] == maj)\n    row_colors = []\n    row_agree = 0\n    for r in range(rows):\n        maj = Counter(grid[r]).most_common(1)[0][0]\n        row_colors.append(maj)\n        row_agree += sum(1 for c in range(cols) if grid[r][c] == maj)\n    if col_agree >= row_agree:\n        return [[col_colors[c] for c in range(cols)] for r in range(rows)]\n    else:\n        return [[row_colors[r] for c in range(cols)] for r in range(rows)]",
  "e509e548": "def solve(grid):\n    rows, cols = len(grid), len(grid[0])\n    output = [row[:] for row in grid]\n    visited = set()\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] == 3 and (r,c) not in visited:\n                cells = []\n                stack = [(r,c)]\n                while stack:\n                    cr, cc = stack.pop()\n                    if (cr,cc) in visited:\n                        continue\n                    visited.add((cr,cc))\n                    cells.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<rows and 0<=nc<cols and grid[nr][nc]==3 and (nr,nc) not in visited:\n                            stack.append((nr,nc))\n                cell_set = set(cells)\n                corners = 0\n                t_junctions = 0\n                for cr2, cc2 in cells:\n                    neighbors = [(cr2+dr,cc2+dc) for dr,dc in [(-1,0),(1,0),(0,-1),(0,1)] if (cr2+dr,cc2+dc) in cell_set]\n                    if len(neighbors) == 2:\n                        (r1,c1), (r2,c2) = neighbors\n                        if r1 != r2 and c1 != c2:\n                            corners += 1\n                    elif len(neighbors) == 3:\n                        t_junctions += 1\n                if t_junctions >= 1:\n                    color = 2\n                elif corners >= 2:\n                    color = 6\n                else:\n                    color = 1\n                for cr2, cc2 in cells:\n                    output[cr2][cc2] = color\n    return output",
  "e6721834": "def solve(grid):\n    from collections import Counter, defaultdict\n    rows, cols = len(grid), len(grid[0])\n    v_split = None\n    for c in range(1, cols):\n        all_diff = True\n        for r in range(rows):\n            if grid[r][c-1] == grid[r][c]:\n                all_diff = False\n                break\n        if all_diff:\n            v_split = c\n            break\n    h_split = None\n    for r in range(1, rows):\n        all_diff = True\n        for c in range(cols):\n            if grid[r-1][c] == grid[r][c]:\n                all_diff = False\n                break\n        if all_diff:\n            h_split = r\n            break\n    if h_split is not None:\n        half1_bg = Counter(grid[0]).most_common(1)[0][0]\n        half2_bg = Counter(grid[h_split]).most_common(1)[0][0]\n        half1_nonbg = sum(1 for r in range(h_split) for c in range(cols) if grid[r][c] != half1_bg)\n        half2_nonbg = sum(1 for r in range(h_split, rows) for c in range(cols) if grid[r][c] != half2_bg)\n        if half1_nonbg > half2_nonbg:\n            pat_r_range = (0, h_split)\n            pat_bg = half1_bg\n            mark_r_range = (h_split, rows)\n            mark_bg = half2_bg\n        else:\n            pat_r_range = (h_split, rows)\n            pat_bg = half2_bg\n            mark_r_range = (0, h_split)\n            mark_bg = half1_bg\n        out_rows = mark_r_range[1] - mark_r_range[0]\n        out_cols = cols\n        output = [[mark_bg]*out_cols for _ in range(out_rows)]\n        visited = set()\n        patterns = []\n        for r in range(pat_r_range[0], pat_r_range[1]):\n            for c in range(cols):\n                if grid[r][c] != pat_bg and (r,c) not in visited:\n                    cells = []\n                    stack = [(r,c)]\n                    while stack:\n                        cr, cc = stack.pop()\n                        if (cr,cc) in visited: continue\n                        visited.add((cr,cc))\n                        cells.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 pat_r_range[0]<=nr<pat_r_range[1] and 0<=nc<cols and grid[nr][nc]!=pat_bg and (nr,nc) not in visited:\n                                stack.append((nr,nc))\n                    patterns.append(cells)\n        markers = []\n        for r in range(mark_r_range[0], mark_r_range[1]):\n            for c in range(cols):\n                if grid[r][c] != mark_bg:\n                    markers.append((r - mark_r_range[0], c, grid[r][c]))\n        markers_by_color = defaultdict(list)\n        for mr, mc, mcolor in markers:\n            markers_by_color[mcolor].append((mr, mc))\n        for pat in patterns:\n            pat_marker_cells = []\n            for r, c in pat:\n                color = grid[r][c]\n                if color in markers_by_color:\n                    pat_marker_cells.append((r, c, color))\n            if not pat_marker_cells: continue\n            pat_markers_by_color = defaultdict(list)\n            for r, c, color in pat_marker_cells:\n                pat_markers_by_color[color].append((r, c))\n            for mcolor, mark_positions in markers_by_color.items():\n                if mcolor not in pat_markers_by_color: continue\n                pat_positions = pat_markers_by_color[mcolor]\n                if len(mark_positions) == len(pat_positions):\n                    mark_sorted = sorted(mark_positions)\n                    pat_sorted = sorted(pat_positions)\n                    dr = mark_sorted[0][0] - (pat_sorted[0][0] - pat_r_range[0])\n                    dc = mark_sorted[0][1] - pat_sorted[0][1]\n                    match = True\n                    for k in range(1, len(mark_sorted)):\n                        expected_r = pat_sorted[k][0] - pat_r_range[0] + dr\n                        expected_c = pat_sorted[k][1] + dc\n                        if (expected_r, expected_c) != mark_sorted[k]:\n                            match = False\n                            break\n                    if match:\n                        for pr, pc in pat:\n                            nr = pr - pat_r_range[0] + dr\n                            nc = pc + dc\n                            if 0 <= nr < out_rows and 0 <= nc < out_cols:\n                                output[nr][nc] = grid[pr][pc]\n                        break\n        return output\n    else:\n        half1_bg = Counter(grid[r][0] for r in range(rows)).most_common(1)[0][0]\n        half2_bg = Counter(grid[r][v_split] for r in range(rows)).most_common(1)[0][0]\n        half1_nonbg = sum(1 for r in range(rows) for c in range(v_split) if grid[r][c] != half1_bg)\n        half2_nonbg = sum(1 for r in range(rows) for c in range(v_split, cols) if grid[r][c] != half2_bg)\n        if half1_nonbg > half2_nonbg:\n            pat_c_range = (0, v_split)\n            pat_bg = half1_bg\n            mark_c_range = (v_split, cols)\n            mark_bg = half2_bg\n        else:\n            pat_c_range = (v_split, cols)\n            pat_bg = half2_bg\n            mark_c_range = (0, v_split)\n            mark_bg = half1_bg\n        out_rows = rows\n        out_cols = mark_c_range[1] - mark_c_range[0]\n        output = [[mark_bg]*out_cols for _ in range(out_rows)]\n        visited = set()\n        patterns = []\n        for r in range(rows):\n            for c in range(pat_c_range[0], pat_c_range[1]):\n                if grid[r][c] != pat_bg and (r,c) not in visited:\n                    cells = []\n                    stack = [(r,c)]\n                    while stack:\n                        cr, cc = stack.pop()\n                        if (cr,cc) in visited: continue\n                        visited.add((cr,cc))\n                        cells.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<rows and pat_c_range[0]<=nc<pat_c_range[1] and grid[nr][nc]!=pat_bg and (nr,nc) not in visited:\n                                stack.append((nr,nc))\n                    patterns.append(cells)\n        markers = []\n        for r in range(rows):\n            for c in range(mark_c_range[0], mark_c_range[1]):\n                if grid[r][c] != mark_bg:\n                    markers.append((r, c - mark_c_range[0], grid[r][c]))\n        markers_by_color = defaultdict(list)\n        for mr, mc, mcolor in markers:\n            markers_by_color[mcolor].append((mr, mc))\n        for pat in patterns:\n            pat_marker_cells = []\n            for r, c in pat:\n                color = grid[r][c]\n                if color in markers_by_color:\n                    pat_marker_cells.append((r, c, color))\n            if not pat_marker_cells: continue\n            pat_markers_by_color = defaultdict(list)\n            for r, c, color in pat_marker_cells:\n                pat_markers_by_color[color].append((r, c))\n            for mcolor, mark_positions in markers_by_color.items():\n                if mcolor not in pat_markers_by_color: continue\n                pat_positions = pat_markers_by_color[mcolor]\n                if len(mark_positions) == len(pat_positions):\n                    mark_sorted = sorted(mark_positions)\n                    pat_sorted = sorted(pat_positions)\n                    dr = mark_sorted[0][0] - pat_sorted[0][0]\n                    dc = mark_sorted[0][1] - (pat_sorted[0][1] - pat_c_range[0])\n                    match = True\n                    for k in range(1, len(mark_sorted)):\n                        expected_r = pat_sorted[k][0] + dr\n                        expected_c = pat_sorted[k][1] - pat_c_range[0] + dc\n                        if (expected_r, expected_c) != mark_sorted[k]:\n                            match = False\n                            break\n                    if match:\n                        for pr, pc in pat:\n                            nr = pr + dr\n                            nc = (pc - pat_c_range[0]) + dc\n                            if 0 <= nr < out_rows and 0 <= nc < out_cols:\n                                output[nr][nc] = grid[pr][pc]\n                        break\n        return output",
  "e73095fd": "def solve(grid):\n    rows, cols = len(grid), len(grid[0])\n    output = [row[:] for row in grid]\n    fives = set()\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] == 5:\n                fives.add((r,c))\n    for r1 in range(rows):\n        for r2 in range(r1+2, rows):\n            for c1 in range(cols):\n                for c2 in range(c1+2, cols):\n                    top_ok = all((r1, c) in fives for c in range(c1, c2+1))\n                    if not top_ok: continue\n                    bot_ok = all((r2, c) in fives for c in range(c1, c2+1))\n                    if not bot_ok: continue\n                    left_ok = all((r, c1) in fives for r in range(r1, r2+1))\n                    if not left_ok: continue\n                    right_ok = all((r, c2) in fives for r in range(r1, r2+1))\n                    if not right_ok: continue\n                    for r in range(r1+1, r2):\n                        for c in range(c1+1, c2):\n                            if output[r][c] == 0:\n                                output[r][c] = 4\n    c = cols - 1\n    for r1 in range(rows):\n        if (r1, c) not in fives: continue\n        for r2 in range(r1+2, rows):\n            if (r2, c) not in fives: continue\n            if not all((r, c-1) in fives for r in range(r1, r2+1)): continue\n            if all(grid[r][c] == 0 for r in range(r1+1, r2)):\n                for r in range(r1+1, r2):\n                    output[r][c] = 4\n    c = 0\n    for r1 in range(rows):\n        if (r1, c) not in fives: continue\n        for r2 in range(r1+2, rows):\n            if (r2, c) not in fives: continue\n            if not all((r, c+1) in fives for r in range(r1, r2+1)): continue\n            if all(grid[r][c] == 0 for r in range(r1+1, r2)):\n                for r in range(r1+1, r2):\n                    output[r][c] = 4\n    r = 0\n    for c1 in range(cols):\n        if (r, c1) not in fives: continue\n        for c2 in range(c1+2, cols):\n            if (r, c2) not in fives: continue\n            if not all((r+1, c) in fives for c in range(c1, c2+1)): continue\n            if all(grid[r][c] == 0 for c in range(c1+1, c2)):\n                for c in range(c1+1, c2):\n                    output[r][c] = 4\n    r = rows - 1\n    for c1 in range(cols):\n        if (r, c1) not in fives: continue\n        for c2 in range(c1+2, cols):\n            if (r, c2) not in fives: continue\n            if not all((r-1, c) in fives for c in range(c1, c2+1)): continue\n            if all(grid[r][c] == 0 for c in range(c1+1, c2)):\n                for c in range(c1+1, c2):\n                    output[r][c] = 4\n    changed = True\n    while changed:\n        changed = False\n        for r in range(rows):\n            for c in range(cols):\n                if output[r][c] == 0:\n                    enclosed = True\n                    for dr, dc in [(-1,0),(1,0),(0,-1),(0,1)]:\n                        nr, nc = r+dr, c+dc\n                        if 0 <= nr < rows and 0 <= nc < cols:\n                            if output[nr][nc] == 0:\n                                enclosed = False\n                                break\n                    if enclosed:\n                        output[r][c] = 4\n                        changed = True\n    return output",
  "eb281b96": "def solve(grid):\n    n = len(grid)\n    out_rows = 4*n - 3\n    period = list(range(n)) + list(range(n-2, 0, -1))\n    indices = []\n    while len(indices) < out_rows:\n        indices.extend(period)\n    indices = indices[:out_rows]\n    return [grid[i][:] for i in indices]"
}