File size: 12,355 Bytes
ab2cbda
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
{
  "469497ad": "def solve(grid):\n    main = [row[:4] for row in grid[:4]]\n    border_col = [grid[r][4] for r in range(4)]\n    border_row = grid[4][:4]\n    corner = grid[4][4]\n\n    border_colors = set(border_col + border_row + [corner])\n    scale = len(border_colors) + 1\n\n    out_size = 5 * scale\n    output = [[0]*out_size for _ in range(out_size)]\n\n    # Fill border column (col 4 scaled)\n    for r in range(4):\n        for dr in range(scale):\n            for dc in range(scale):\n                output[r*scale + dr][4*scale + dc] = border_col[r]\n    # Fill border row (row 4 scaled)\n    for c in range(4):\n        for dr in range(scale):\n            for dc in range(scale):\n                output[4*scale + dr][c*scale + dc] = border_row[c]\n    # Corner\n    for dr in range(scale):\n        for dc in range(scale):\n            output[4*scale + dr][4*scale + dc] = corner\n\n    # Fill main colored cells\n    colored_cells = set()\n    for r in range(4):\n        for c in range(4):\n            if main[r][c] != 0:\n                colored_cells.add((r,c))\n                for dr in range(scale):\n                    for dc in range(scale):\n                        output[r*scale + dr][c*scale + dc] = main[r][c]\n\n    # Find block bounds\n    min_r = min(r for r,c in colored_cells)\n    max_r = max(r for r,c in colored_cells)\n    min_c = min(c for r,c in colored_cells)\n    max_c = max(c for r,c in colored_cells)\n\n    # Add diagonal of 2s in cells diagonally adjacent to the block\n    for r in range(4):\n        for c in range(4):\n            if main[r][c] != 0:\n                continue\n            # Check if diagonally adjacent to block\n            is_diag = False\n            if r == min_r - 1 and c == min_c - 1:\n                # top-left: diagonal from (0,0) to (scale-1,scale-1)\n                for d in range(scale):\n                    output[r*scale+d][c*scale+d] = 2\n            elif r == min_r - 1 and c == max_c + 1:\n                # top-right: diagonal from (0,scale-1) to (scale-1,0)\n                for d in range(scale):\n                    output[r*scale+d][c*scale+(scale-1-d)] = 2\n            elif r == max_r + 1 and c == min_c - 1:\n                # bottom-left: diagonal from (scale-1,0) to (0,scale-1)\n                for d in range(scale):\n                    output[r*scale+(scale-1-d)][c*scale+d] = 2\n            elif r == max_r + 1 and c == max_c + 1:\n                # bottom-right: diagonal from (0,0) to (scale-1,scale-1)\n                for d in range(scale):\n                    output[r*scale+d][c*scale+d] = 2\n\n    return output\n",
  "46f33fce": "def solve(grid):\n    H, W = len(grid), len(grid[0])\n    out = [[0]*(W*2) for _ in range(H*2)]\n    for r in range(H):\n        for c in range(W):\n            if grid[r][c] != 0:\n                # Place 4x4 block at (r*2-2, c*2-2)\n                tr, tc = r*2-2, c*2-2\n                for dr in range(4):\n                    for dc in range(4):\n                        rr, cc = tr+dr, tc+dc\n                        if 0 <= rr < H*2 and 0 <= cc < W*2:\n                            out[rr][cc] = grid[r][c]\n    return out\n",
  "47c1f68c": "def solve(grid):\n    H, W = len(grid), len(grid[0])\n    # Find cross lines\n    cross_row = -1\n    cross_col = -1\n    cross_color = 0\n    for r in range(H):\n        if all(grid[r][c] != 0 for c in range(W)):\n            cross_row = r\n            cross_color = grid[r][0]\n            break\n    for c in range(W):\n        if all(grid[r][c] != 0 for r in range(H)):\n            cross_col = c\n            break\n\n    # Extract shape from the quadrant that has it (non-zero, non-cross-color)\n    shape = []\n    for r in range(H):\n        if r == cross_row:\n            continue\n        for c in range(W):\n            if c == cross_col:\n                continue\n            if grid[r][c] != 0 and grid[r][c] != cross_color:\n                # Map to quadrant coordinates\n                qr = r if r < cross_row else r - 1\n                qc = c if c < cross_col else c - 1\n                shape.append((qr, qc))\n\n    out_H = H - 1\n    out_W = W - 1\n    output = [[0]*out_W for _ in range(out_H)]\n\n    # Place shape in 4 quadrants with cross_color\n    for qr, qc in shape:\n        # Original (top-left assumed)\n        output[qr][qc] = cross_color\n        # Horizontal mirror\n        output[qr][out_W - 1 - qc] = cross_color\n        # Vertical mirror\n        output[out_H - 1 - qr][qc] = cross_color\n        # Both mirrors\n        output[out_H - 1 - qr][out_W - 1 - qc] = cross_color\n\n    return output\n",
  "484b58aa": "def solve(grid):\n    import copy\n    H, W = len(grid), len(grid[0])\n    out = copy.deepcopy(grid)\n\n    # Find the repeating period by trying all (pr, pc) combinations\n    # Prioritize smaller periods\n    def try_period(pr, pc):\n        tile = [[None]*pc for _ in range(pr)]\n        for r in range(H):\n            for c in range(W):\n                if grid[r][c] != 0:\n                    tr, tc = r % pr, c % pc\n                    if tile[tr][tc] is None:\n                        tile[tr][tc] = grid[r][c]\n                    elif tile[tr][tc] != grid[r][c]:\n                        return None\n        # Check all tile cells filled\n        for r in range(pr):\n            for c in range(pc):\n                if tile[r][c] is None:\n                    return None\n        return tile\n\n    # Try periods in order of total area (smallest first)\n    best_tile = None\n    best_pr = None\n    best_pc = None\n    candidates = []\n    for pr in range(1, H+1):\n        for pc in range(1, W+1):\n            candidates.append((pr * pc, pr, pc))\n    candidates.sort()\n\n    for _, pr, pc in candidates:\n        tile = try_period(pr, pc)\n        if tile is not None:\n            best_tile = tile\n            best_pr = pr\n            best_pc = pc\n            break\n\n    if best_tile is not None:\n        for r in range(H):\n            for c in range(W):\n                out[r][c] = best_tile[r % best_pr][c % best_pc]\n\n    return out\n",
  "48d8fb45": "def solve(grid):\n    H, W = len(grid), len(grid[0])\n    # Find 5 position\n    pos5 = None\n    color = 0\n    for r in range(H):\n        for c in range(W):\n            if grid[r][c] == 5:\n                pos5 = (r, c)\n            elif grid[r][c] != 0:\n                color = grid[r][c]\n\n    r5, c5 = pos5\n\n    # Find all non-zero, non-5 cells\n    cells = [(r, c) for r in range(H) for c in range(W) if grid[r][c] != 0 and grid[r][c] != 5]\n\n    # Find the cell closest to the 5 marker\n    cells.sort(key=lambda rc: abs(rc[0]-r5) + abs(rc[1]-c5))\n\n    # The closest cell tells us which group to extract\n    # Use BFS/flood fill with the 5 as seed - find all cells near 5\n    # Actually, just find the cluster nearest to 5\n    # Group cells by connected components (8-connectivity? or spatial proximity?)\n\n    # Approach: find connected components, then pick the one closest to 5\n    from collections import deque\n    visited = set()\n    components = []\n    for r, c in cells:\n        if (r,c) in visited:\n            continue\n        # BFS with 8-connectivity\n        comp = []\n        queue = deque([(r,c)])\n        visited.add((r,c))\n        while queue:\n            cr, cc = queue.popleft()\n            comp.append((cr,cc))\n            for dr in [-1,0,1]:\n                for dc in [-1,0,1]:\n                    if dr == 0 and dc == 0:\n                        continue\n                    nr, nc = cr+dr, cc+dc\n                    if (nr,nc) not in visited and 0 <= nr < H and 0 <= nc < W and grid[nr][nc] != 0 and grid[nr][nc] != 5:\n                        visited.add((nr,nc))\n                        queue.append((nr,nc))\n        components.append(comp)\n\n    # Pick component closest to 5\n    best_comp = None\n    best_dist = float('inf')\n    for comp in components:\n        d = min(abs(r-r5)+abs(c-c5) for r,c in comp)\n        if d < best_dist:\n            best_dist = d\n            best_comp = comp\n\n    # Extract bounding box\n    min_r = min(r for r,c in best_comp)\n    max_r = max(r for r,c in best_comp)\n    min_c = min(c for r,c in best_comp)\n    max_c = max(c for r,c in best_comp)\n\n    output = [[0]*(max_c-min_c+1) for _ in range(max_r-min_r+1)]\n    for r, c in best_comp:\n        output[r-min_r][c-min_c] = grid[r][c]\n\n    return output\n",
  "4938f0c2": "def solve(grid):\n    import copy\n    H, W = len(grid), len(grid[0])\n    output = copy.deepcopy(grid)\n\n    # Find 3-cells (connector)\n    threes = [(r,c) for r in range(H) for c in range(W) if grid[r][c] == 3]\n    # Find 2-cells (shape)\n    twos = [(r,c) for r in range(H) for c in range(W) if grid[r][c] == 2]\n\n    if not threes or not twos:\n        return output\n\n    # Connector bounding box\n    min_r3 = min(r for r,c in threes)\n    max_r3 = max(r for r,c in threes)\n    min_c3 = min(c for r,c in threes)\n    max_c3 = max(c for r,c in threes)\n\n    # Center of connector\n    cr = (min_r3 + max_r3) / 2.0\n    cc = (min_c3 + max_c3) / 2.0\n\n    # Reflect each 2-cell in all 4 ways\n    for r, c in twos:\n        # Original\n        output[r][c] = 2\n        # Horizontal reflection (across vertical center of connector)\n        nr, nc = r, int(2*cc - c)\n        if 0 <= nr < H and 0 <= nc < W:\n            output[nr][nc] = 2\n        # Vertical reflection (across horizontal center of connector)\n        nr, nc = int(2*cr - r), c\n        if 0 <= nr < H and 0 <= nc < W:\n            output[nr][nc] = 2\n        # Both\n        nr, nc = int(2*cr - r), int(2*cc - c)\n        if 0 <= nr < H and 0 <= nc < W:\n            output[nr][nc] = 2\n\n    return output\n",
  "496994bd": "def solve(grid):\n    import copy\n    H, W = len(grid), len(grid[0])\n    output = copy.deepcopy(grid)\n\n    # Find the non-zero rows at top\n    non_zero_rows = []\n    for r in range(H):\n        if any(grid[r][c] != 0 for c in range(W)):\n            non_zero_rows.append(r)\n        else:\n            break\n\n    # Mirror them at the bottom\n    n = len(non_zero_rows)\n    for i, r in enumerate(non_zero_rows):\n        target_r = H - 1 - i\n        output[target_r] = list(grid[r])\n\n    return output\n",
  "49d1d64f": "def solve(grid):\n    H, W = len(grid), len(grid[0])\n    out_H = H + 2\n    out_W = W + 2\n    output = [[0]*out_W for _ in range(out_H)]\n\n    # Top row\n    for c in range(W):\n        output[0][c+1] = grid[0][c]\n\n    # Bottom row\n    for c in range(W):\n        output[out_H-1][c+1] = grid[H-1][c]\n\n    # Middle rows\n    for r in range(H):\n        output[r+1][0] = grid[r][0]\n        for c in range(W):\n            output[r+1][c+1] = grid[r][c]\n        output[r+1][out_W-1] = grid[r][W-1]\n\n    return output\n",
  "4be741c5": "def solve(grid):\n    H, W = len(grid), len(grid[0])\n    from collections import Counter\n\n    # Check if bands are horizontal or vertical\n    # For horizontal: each row should be mostly one color\n    # For vertical: each column should be mostly one color\n\n    # Check rows\n    row_colors = []\n    for r in range(H):\n        c = Counter(grid[r])\n        row_colors.append(c.most_common(1)[0][0])\n\n    # Check columns\n    col_colors = []\n    for c in range(W):\n        vals = [grid[r][c] for r in range(H)]\n        cnt = Counter(vals)\n        col_colors.append(cnt.most_common(1)[0][0])\n\n    # If all rows have same color -> vertical bands\n    # If many different row colors -> horizontal bands\n    row_unique = len(set(row_colors))\n    col_unique = len(set(col_colors))\n\n    if col_unique > row_unique:\n        # Vertical bands - list distinct colors in column order\n        bands = []\n        prev = None\n        for c in col_colors:\n            if c != prev:\n                bands.append(c)\n                prev = c\n        return [bands]\n    else:\n        # Horizontal bands\n        bands = []\n        prev = None\n        for c in row_colors:\n            if c != prev:\n                bands.append(c)\n                prev = c\n        return [[b] for b in bands]\n",
  "4c4377d9": "def solve(grid):\n    H = len(grid)\n    reversed_grid = list(reversed(grid))\n    return [list(row) for row in reversed_grid] + [list(row) for row in grid]\n"
}