Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/88: Рейтинг темы: голосов - 88, средняя оценка - 4.60
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310

Игра сапер

05.11.2018, 21:13. Показов 17832. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Поле для игры сапёр представляет собой сетку размером n×m. В ячейке сетки может находиться или отсутствовать мина.

Напишите программу, которая выводит "решённое" поле, т.е. для каждой ячейки, не являющейся миной, указывается число мин, находящихся в соседних ячейках (учитывая диагональные направления)

Формат ввода:
На первой строке указываются два натуральных числа 1≤n,m≤100, после чего в n строках содержится описание поля в виде последовательности точек '.' и звёздочек '*', где точка означает пустую ячейку, а звёздочка − ячейку с миной.

Формат вывода:
n строк поля, в каждой ячейке которого будет либо число от 0 до 8, либо мина (обозначенная символом "*"), при этом число означает количество мин в соседних ячейках поля.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def flanker(line, column):
    
    left_top =[line - 1, column - 1] # лев верхнее поле
    top = [line - 1, column] # верх
    right_top = [line - 1, column + 1] # прав верхнее поле
    left = [line, column - 1] # левое поле
    right = [line, column + 1] # правое поле
    left_bott = [line + 1, column - 1] # левое нижнее поле
    bott = [line +1, column] # нижнее поле
    right_bott = [line+1, column + 1] # правое нижнее поле
    res = 0
    for i in (left_top, top, right_top, left, right, left_bott, bott, right_bott):
        a,b = i
        try:
            if p[a][b] == '*':
                res += 1
        except:
            pass
    return str(res) 
            
n,m = map(int,input().split())
p = [[i for i in input()] for _ in range(n)]
for line in range(n):
    res = ''
    for column in range(m):
        if p[line][column] == '.':
            res += flanker(line, column)
        else:
            res += '*'
    print(res)
Sample Input:

4 4
..*.
**..
..*.
....
Sample Output:

23*1
**32
23*1
0111
при таких входных данных верный результат но при входных
2 2
.*
..
выдает
2*
21
хотя должно
1*
11
где я запутался?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.11.2018, 21:13
Ответы с готовыми решениями:

Игра Сапер
Здравствуйте! Вот все не могу добить.... надо было написать код для поля игры Сапер. Вроде есть, но еще требовалось что бы поле было не...

Сапер
https://repl.it/@panacealove/DesertedColdCommand#main.py в чем ошибка я не понмаю

Сапёр
Сапёр — известная игра-головоломка для одного игрока на прямоугольном поле. В некоторых точках поля расположены мины. Цель игрока — открыть...

4
119 / 103 / 53
Регистрация: 13.04.2014
Сообщений: 233
05.11.2018, 22:04
Лучший ответ Сообщение было отмечено Semen-Semenich как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def flanker(line, column):
    left_top = [line - 1, column - 1]  # лев верхнее поле
    top = [line - 1, column]  # верх
    right_top = [line - 1, column + 1]  # прав верхнее поле
    left = [line, column - 1]  # левое поле
    right = [line, column + 1]  # правое поле
    left_bott = [line + 1, column - 1]  # левое нижнее поле
    bott = [line + 1, column]  # нижнее поле
    right_bott = [line + 1, column + 1]  # правое нижнее поле
    res = 0
    for i in (left_top, top, right_top, left, right, left_bott, bott, right_bott):
        a, b = i
        if 0 <= a < n and 0 <= b < m and p[a][b] == '*':
            res += 1
    return str(res)
 
 
n, m = map(int, input().split())
p = [[i for i in input()] for _ in range(n)]
print(p)
for line in range(n):
    res = ''
    for column in range(m):
        if p[line][column] == '.':
            res += flanker(line, column)
        else:
            res += '*'
    print(res)
python не возбуждает ошибку при обращению по отрицательному индексу.

Добавлено через 2 минуты
Крайне тонкая ошибка, я минут 15 искал

Не по теме:

А вообще эту тему надо закрепить, чтобы все в обязательном порядке читали и смотрели, как надо задавать вопросы по задачам.

2
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
05.11.2018, 22:21  [ТС]
orAnd, понятно. блок try использовал что бы при проверке полей за пределами данного поля не вылетала ошибка при отсутствии такого.
0
119 / 103 / 53
Регистрация: 13.04.2014
Сообщений: 233
05.11.2018, 22:36
Понятно. Но в случае python это работает только с верхней границей. А так красивая реализация принципа EAFP получалась...
0
 Аватар для STAR WARS
34 / 40 / 3
Регистрация: 24.11.2016
Сообщений: 159
12.11.2018, 17:56
САПЁР
Вложения
Тип файла: zip LUNA.zip (948 байт, 106 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.11.2018, 17:56
Помогаю со студенческими работами здесь

Сапёр на python
помогите сделать обычный сапер на питоне, где можно выбирать координаты и выбирать что сделать с этой точкой (обезвредить, открыть) поле...

Написать генератор карт для игры «сапёр».
Написать генератор карт для игры «сапёр». Карта размером NxM. Формат ввода Каждая строка содержит два натуральных числа разделённых...

Оптимизация алгоритма по выводу поля игры сапёр
Всем хай! Написал код для решения следующей задачи. Текст задачи: Вам дан размер прямоугольного поля и координаты всех мин,...

Сапер. Нужно сделать чтобы рандом не ставил бомбу на одно и тоже место
from tkinter import* from random import randint def player_win(): for y in range(len(w)): for x in range(len(w)): ...

Сапёр
Здравствуйте. Помогите, пожалуйста, решить задачу: На поле для игры в сапер клеточки с минами обозначаются символом “*”, а в каждой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru