• + 0 comments

    Python3, straightforward, nothing smart; Python is not the best tool here, as its for loops cost a lot and replacing single string means recreating whole row

    def is_cavity(grid, i, j):
        max_adjacent = max(
            grid[i-1][j],
            grid[i+1][j],
            grid[i][j-1],
            grid[i][j+1]
        )
        return grid[i][j] > max_adjacent
    
    def mark_cavity(grid, i, j):
        row: str = grid[i]
        grid[i] = row[:j] + 'X' + row[j+1:]
    
    def cavityMap(grid):
        n = len(grid)
        cavity_mapped_grid = [row[:] for row in grid] 
        for i in range(1, n-1):
            for j in range(1, n-1):
                if is_cavity(grid, i, j):
                    mark_cavity(cavity_mapped_grid, i, j)
        return cavity_mapped_grid