Home > Mobile >  2D List Minesweeper Task? [Python]
2D List Minesweeper Task? [Python]

Time:01-02

I am trying to create a minesweeper where I create a function of a grid of # and - where each # is a mine and - is a mine-free spot, then return a grid where each dash is replaced by a digit indicating the mines around it

Eg: Input:

[["-", "-", "-", "#", "#"],
["-", "#", "-", "-", "-"]] etc. etc.

Eg. Output:

[["1","1","2","#","#"],
["1","#","2","2","2"]]

(I was hoping that the grid would actually be a 5x5)

I am absolutely lost on how to do this at all so any help would be greatly appreciated.

CodePudding user response:

You can use nested for-loops to loop over every element in the 2d list, then if the element is not a mine, count how many neighbors are a mine. Just like this:

def genPuzzle(grid):
    puzzle = []
    for i in range(len(grid)):
        puzzle.append(grid[i][:])
        for j in range(len(grid[i])):
            if grid[i][j] == '#':
                continue
            neighbors = 0
            for d in [(1, 0), (-1, 0), (0, 1), (0, -1), (1, 1), (-1, -1),
                      (1, -1), (-1, 1)]:
                di, dj = i   d[0], j   d[1]
                try:
                    if di >= 0 and dj >= 0 and grid[di][dj] == '#':
                        neighbors  = 1
                except IndexError:
                    pass
            puzzle[i][j] = neighbors
    return puzzle


grid = [["-", "-", "-", "#", "#"],
        ["-", "#", "-", "-", "-"]]
print(genPuzzle(grid))
  • Related