Step 4 (S-14691)

From Stepik Wiki
Revision as of 04:48, 31 July 2017 by Valeriy Shagur (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/3369/step/4

S-14691-2.png

Сегодня мы рассмотрим задачу, связанную с известной игрой - "Сапер". А именно, мы будем рисовать поле для этой игры. На вход нашей программе будут поступать: размер поля и координаты расположения мин. На выходе наша программа будет выдавать само поле, где в каждой клетке будет указано, находится в нем мина, либо сколько мин находится в клетках по соседству. Напомним, как выглядит поле для игры "Сапер"

S-14691-1.png

Наша программа будет упрощенно отображать поле, как показано на схеме. Давайте сначала разберемся, как происходит ввод данных. Первой строкой пользователь вводит три целых числа a, b, m, разделенных пробелом (размер поля: количество строк (a) и столбцов (b), и количество мин (m)). В следующих m строках вводятся пары чисел x, y: координаты мины (номер строки (x), номер столбца(y))


Формат вывода: программа должна вывести а строк по b символов. Мина помечается символом "*" (звездочка), если количество мин в соседних полях равно 0 - вывести символ "." (точка). В остальных случаях вывести количество мин, стоящих на соседних позициях нашего поля.


Теперь, когда мы разобрались с вводом-выводом, приступим к рассмотрению решения задачи. Создадим двумерный список, размер этого списка будет - а x b (где а, b - размеры поля, введенные пользователем). Изначально наш двумерный список будет заполнен нулями. Далее мы прочитаем координаты мин и занесем их в наш список. Для каждой пары координат мы поместим в элемент списка с соответствующими индексами значение "-1". После этого мы пройдем по всем элементам нашего списка, и если элемент списка равен 0, будем по очереди проверять соседние клетки на наличие мины, и при обнаружении мины (-1) увеличивать значение нашего элемента на 1 . Количество соседних клеток может варьироваться от 3 до 8.