Сапёр

Кодинг-марафон. Задача № 8.

Эта задача основана на игре «Сапёр».

Создайте функцию, которая принимает сетку из «#» и «-«. В этой сетке каждая решетка (#) представляет мину, а каждое тире (-) — место без мин.

Верните список, в котором каждое тире заменено цифрой, обозначающей количество мин, непосредственно примыкающих к тире (по горизонтали, вертикали и диагоналям).

Примеры

num_grid ([
  [«-», «-», «-», «-», «-»],
  [«-», «-», «-», «-», «-»],
  [«-», «-», «#», «-», «-»],
  [«-», «-», «-», «-», «-»],
  [«-», «-», «-», «-», «-»]
]) ➞ [
  [«0», «0», «0», «0», «0»],
  [«0», «1», «1», «1», «0»],
  [«0», «1», «#», «1», «0»],
  [«0», «1», «1», «1», «0»],
  [«0», «0», «0», «0», «0»],
]

num_grid ([
  [«-», «-», «-», «-», «#»],
  [«-», «-», «-», «-», «-»],
  [«-», «-», «#», «-», «-»],
  [«-», «-», «-», «-», «-»],
  ["#", "-", "-", "-", "-"]
]) ➞ [
  [«0», «0», «0», «1», «#»],
  [«0», «1», «1», «2», «1»],
  [«0», «1», «#», «1», «0»],
  [«1», «2», «1», «1», «0»],
  [«#», «1», «0», «0», «0»]
]

num_grid ([
  [«-», «-», «-», «#», «#»],
  [«-», «#», «-», «-», «-»],
  [«-», «-», «#», «-», «-»],
  [«-», «#», «#», «-», «-»],
  [«-», «-», «-», «-», «-»]
]) ➞ [
  [«1», «1», «2», «#», «#»],
  [«1», «#», «3», «3», «2»],
  [«2», «4», «#», «2», «0»],
  [«1», «#», «#», «2», «0»],
  [«1», «2», «2», «1», «0»],
]

Решение

def num_grid(lst):
    for i in range(len(lst)):
        for j in range(len(lst[i])):
            if lst[i][j] != "#":
                lst[i][j] = "0"
    for i in range(len(lst)):
        for j in range(len(lst[i])):
            if lst[i][j] == "#":
                for x in range(-1, 2):
                    for y in range(-1, 2):
                        if i + x >= 0 and j + y >= 0 and i + x < len(lst) and j + y < len(lst[i]):
                            if lst[i + x][j + y] != "#":
                                lst[i + x][j + y] = str(int(lst[i + x][j + y]) + 1)
    return lst