File size: 13,543 Bytes
dce223b
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
{
  "2204b7a8": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\n    result = [row[:] for row in grid]\n    top_row = grid[0]\n    bottom_row = grid[rows-1]\n    left_col = [grid[r][0] for r in range(rows)]\n    right_col = [grid[r][cols-1] for r in range(rows)]\n    top_color = top_row[0] if all(c == top_row[0] and top_row[0] != 0 for c in top_row) else None\n    bottom_color = bottom_row[0] if all(c == bottom_row[0] and bottom_row[0] != 0 for c in bottom_row) else None\n    left_color = left_col[0] if all(c == left_col[0] and left_col[0] != 0 for c in left_col) else None\n    right_color = right_col[0] if all(c == right_col[0] and right_col[0] != 0 for c in right_col) else None\n    if top_color and bottom_color:\n        for r in range(rows):\n            for c in range(cols):\n                if grid[r][c] == 3:\n                    result[r][c] = top_color if r < rows / 2 else bottom_color\n    elif left_color and right_color:\n        for r in range(rows):\n            for c in range(cols):\n                if grid[r][c] == 3:\n                    result[r][c] = left_color if c < cols / 2 else right_color\n    return result\n",
  "22233c11": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\n    result = [row[:] for row in grid]\n    threes = set()\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] == 3:\n                threes.add((r, c))\n    # Find orthogonal connected components\n    visited = set()\n    components = []\n    for cell in threes:\n        if cell in visited:\n            continue\n        comp = []\n        stack = [cell]\n        while stack:\n            cr, cc = stack.pop()\n            if (cr, cc) in visited:\n                continue\n            visited.add((cr, cc))\n            comp.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 (nr, nc) in threes and (nr, nc) not in visited:\n                    stack.append((nr, nc))\n        components.append(comp)\n    # Pair components by nearest neighbor\n    centers = []\n    for comp in components:\n        cr = sum(r for r, c in comp) / len(comp)\n        cc = sum(c for r, c in comp) / len(comp)\n        centers.append((cr, cc))\n    paired = set()\n    pairs = []\n    for i in range(len(components)):\n        if i in paired:\n            continue\n        best_j = -1\n        best_dist = float('inf')\n        for j in range(len(components)):\n            if j == i or j in paired:\n                continue\n            dist = (centers[i][0]-centers[j][0])**2 + (centers[i][1]-centers[j][1])**2\n            if dist < best_dist:\n                best_dist = dist\n                best_j = j\n        if best_j >= 0:\n            pairs.append((i, best_j))\n            paired.add(i)\n            paired.add(best_j)\n    # For each pair, scale centers 3x around midpoint, rotate 90CW, place 8s\n    for i, j in pairs:\n        ci = centers[i]\n        cj = centers[j]\n        mid = ((ci[0]+cj[0])/2, (ci[1]+cj[1])/2)\n        # New center for component i: scale 3x and rotate 90CW around mid\n        rel_i = (ci[0]-mid[0], ci[1]-mid[1])\n        scaled_i = (rel_i[0]*3, rel_i[1]*3)\n        rot_i = (scaled_i[1], -scaled_i[0])  # 90CW: (r,c)->(c,-r)\n        new_ci = (mid[0]+rot_i[0], mid[1]+rot_i[1])\n        # Same for j\n        rel_j = (cj[0]-mid[0], cj[1]-mid[1])\n        scaled_j = (rel_j[0]*3, rel_j[1]*3)\n        rot_j = (scaled_j[1], -scaled_j[0])\n        new_cj = (mid[0]+rot_j[0], mid[1]+rot_j[1])\n        # Place component i shape at new_ci center\n        for r, c in components[i]:\n            nr = round(r - ci[0] + new_ci[0])\n            nc = round(c - ci[1] + new_ci[1])\n            if 0 <= nr < rows and 0 <= nc < cols:\n                result[nr][nc] = 8\n        # Place component j shape at new_cj center\n        for r, c in components[j]:\n            nr = round(r - cj[0] + new_cj[0])\n            nc = round(c - cj[1] + new_cj[1])\n            if 0 <= nr < rows and 0 <= nc < cols:\n                result[nr][nc] = 8\n    return result\n",
  "2281f1f4": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\n    result = [row[:] for row in grid]\n    pattern_cols = [c for c in range(cols) if grid[0][c] == 5]\n    trigger_rows = [r for r in range(rows) if grid[r][cols-1] == 5]\n    for r in trigger_rows:\n        for c in pattern_cols:\n            result[r][c] = 2\n    return result\n",
  "228f6490": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\n    result = [row[:] for row in grid]\n    # Find 5-rectangles (connected components of 5)\n    visited = set()\n    rectangles = []\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] == 5 and (r, c) not in visited:\n                comp = set()\n                stack = [(r, c)]\n                while stack:\n                    cr, cc = stack.pop()\n                    if (cr, cc) in comp:\n                        continue\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 and grid[nr][nc] == 5 and (nr, nc) not in comp:\n                            stack.append((nr, nc))\n                visited |= comp\n                min_r = min(cr for cr, cc in comp)\n                max_r = max(cr for cr, cc in comp)\n                min_c = min(cc for cr, cc in comp)\n                max_c = max(cc for cr, cc in comp)\n                holes = []\n                for hr in range(min_r, max_r+1):\n                    for hc in range(min_c, max_c+1):\n                        if grid[hr][hc] != 5 and (hr, hc) not in comp:\n                            holes.append((hr, hc))\n                if holes:\n                    rectangles.append({\n                        'cells': comp, 'holes': holes,\n                        'min_r': min_r, 'max_r': max_r, 'min_c': min_c, 'max_c': max_c\n                    })\n    # Find colored patches (non-0, non-5, not inside any rectangle)\n    rect_regions = set()\n    for rect in rectangles:\n        for r in range(rect['min_r'], rect['max_r']+1):\n            for c in range(rect['min_c'], rect['max_c']+1):\n                rect_regions.add((r, c))\n    color_visited = set()\n    patches = []\n    for r in range(rows):\n        for c in range(cols):\n            val = grid[r][c]\n            if val != 0 and val != 5 and val != 7 and (r, c) not in color_visited and (r, c) not in rect_regions:\n                comp = []\n                stack = [(r, c)]\n                while stack:\n                    cr, cc = stack.pop()\n                    if (cr, cc) in color_visited:\n                        continue\n                    if grid[cr][cc] != val:\n                        continue\n                    color_visited.add((cr, cc))\n                    comp.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 (nr, nc) not in color_visited:\n                            stack.append((nr, nc))\n                if comp:\n                    patches.append({\n                        'color': val, 'cells': comp,\n                        'min_r': min(cr for cr, cc in comp),\n                        'max_r': max(cr for cr, cc in comp),\n                        'min_c': min(cc for cr, cc in comp),\n                        'max_c': max(cc for cr, cc in comp)\n                    })\n    # Match patches to rectangles by hole shape\n    for patch in patches:\n        ph = patch['max_r'] - patch['min_r'] + 1\n        pw = patch['max_c'] - patch['min_c'] + 1\n        patch_shape = set()\n        for r, c in patch['cells']:\n            patch_shape.add((r - patch['min_r'], c - patch['min_c']))\n        for rect in rectangles:\n            hole_min_r = min(hr for hr, hc in rect['holes'])\n            hole_max_r = max(hr for hr, hc in rect['holes'])\n            hole_min_c = min(hc for hr, hc in rect['holes'])\n            hole_max_c = max(hc for hr, hc in rect['holes'])\n            hole_h = hole_max_r - hole_min_r + 1\n            hole_w = hole_max_c - hole_min_c + 1\n            if hole_h == ph and hole_w == pw:\n                hole_shape = set()\n                for hr, hc in rect['holes']:\n                    hole_shape.add((hr - hole_min_r, hc - hole_min_c))\n                if hole_shape == patch_shape:\n                    for hr, hc in rect['holes']:\n                        result[hr][hc] = patch['color']\n                    for r, c in patch['cells']:\n                        result[r][c] = 0\n                    break\n    return result\n",
  "23581191": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\n    result = [row[:] for row in grid]\n    pos8 = pos7 = None\n    for r in range(rows):\n        for c in range(cols):\n            if grid[r][c] == 8: pos8 = (r, c)\n            elif grid[r][c] == 7: pos7 = (r, c)\n    r8, c8 = pos8\n    r7, c7 = pos7\n    for c in range(cols):\n        if result[r8][c] == 0: result[r8][c] = 8\n    for r in range(rows):\n        if result[r][c8] == 0: result[r][c8] = 8\n    for c in range(cols):\n        if result[r7][c] == 0: result[r7][c] = 7\n    for r in range(rows):\n        if result[r][c7] == 0: result[r][c7] = 7\n    result[r8][c7] = 2\n    result[r7][c8] = 2\n    return result\n",
  "25d8a9c8": "def solve(grid):\n    result = []\n    for row in grid:\n        if all(v == row[0] for v in row):\n            result.append([5] * len(row))\n        else:\n            result.append([0] * len(row))\n    return result\n",
  "23b5c85d": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\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    # Find color with fewest cells - that's the answer\n    smallest_color = min(colors.keys(), key=lambda v: len(colors[v]))\n    cells = colors[smallest_color]\n    min_r = min(r for r, c in cells)\n    max_r = max(r for r, c in cells)\n    min_c = min(c for r, c in cells)\n    max_c = max(c for r, c in cells)\n    h = max_r - min_r + 1\n    w = max_c - min_c + 1\n    return [[smallest_color] * w for _ in range(h)]\n",
  "25d487eb": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\n    result = [row[:] for row in grid]\n    cells = {}\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 cells:\n                    cells[v] = []\n                cells[v].append((r, c))\n    colors = list(cells.keys())\n    if len(cells[colors[0]]) < len(cells[colors[1]]):\n        point_color, body_color = colors[0], colors[1]\n    else:\n        point_color, body_color = colors[1], colors[0]\n    pr, pc = cells[point_color][0]\n    body = cells[body_color]\n    body_cr = sum(r for r, c in body) / len(body)\n    body_cc = sum(c for r, c in body) / len(body)\n    # Direction from point toward body center (and beyond)\n    dr = body_cr - pr\n    dc = body_cc - pc\n    if abs(dr) > abs(dc):\n        direction = (1 if dr > 0 else -1, 0)\n    else:\n        direction = (0, 1 if dc > 0 else -1)\n    # Extend line from past the body to the edge of grid\n    nr, nc = pr + direction[0], pc + direction[1]\n    while 0 <= nr < rows and 0 <= nc < cols:\n        if result[nr][nc] == 0:\n            result[nr][nc] = point_color\n        nr += direction[0]\n        nc += direction[1]\n    return result\n",
  "239be575": "def solve(grid):\n    rows = len(grid)\n    cols = len(grid[0])\n    # Find 2x2 blocks of 2\n    blocks = []\n    block_cells = set()\n    for r in range(rows-1):\n        for c in range(cols-1):\n            if grid[r][c]==2 and grid[r][c+1]==2 and grid[r+1][c]==2 and grid[r+1][c+1]==2:\n                blocks.append((r,c))\n                block_cells.update([(r,c),(r,c+1),(r+1,c),(r+1,c+1)])\n    # BFS from block 0 through 8s to see if it reaches block 1\n    b2_cells = set()\n    br2, bc2 = blocks[1]\n    b2_cells = {(br2,bc2),(br2,bc2+1),(br2+1,bc2),(br2+1,bc2+1)}\n    # Get starting points: cells adjacent to block 0 that are 8\n    br, bc = blocks[0]\n    starts = set()\n    for r, c in [(br,bc),(br,bc+1),(br+1,bc),(br+1,bc+1)]:\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 and (nr,nc) not in block_cells and grid[nr][nc]==8:\n                starts.add((nr,nc))\n    visited = set()\n    stack = list(starts)\n    reached = False\n    while stack:\n        cr, cc = stack.pop()\n        if (cr, cc) in visited:\n            continue\n        visited.add((cr, cc))\n        # Check if adjacent to block 2\n        for dr, dc in [(-1,0),(1,0),(0,-1),(0,1)]:\n            if (cr+dr, cc+dc) in b2_cells:\n                reached = True\n                break\n        if reached:\n            break\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 (nr,nc) not in visited and (nr,nc) not in block_cells and grid[nr][nc]==8:\n                stack.append((nr,nc))\n    return [[8]] if reached else [[0]]\n"
}