generate functionThu, 13 Apr 2023

«Морской бой» - игра для двух участников, в которой игроки по очереди называют координаты на неизвестной им карте соперника. Если у соперника по этим координатам имеется корабль, то корабль или его часть «топится», а попавший получает право сделать еще один ход. Цель игрока - первым поразить все корабли противника. «Морской бой» очень популярен среди учеников одной физико-математической школы. Ребята очень любят в него играть на переменах. Вот и сейчас ученики Иннокентий и Емельян начали новую партию. Правила, по которым ребята расставляют корабли перед началом партии, несколько отличаются от классических. Во-первых, игра происходит на поле размером N×M, а не 10×10. Во-вторых, число кораблей, их размер и форма выбираются ребятами перед партией - так играть намного интереснее. Емельян уже расставил все свои корабли, кроме одного однопалубного. Такой корабль занимает ровно одну клетку. Задана расстановка кораблей Емельяна. Найдите число способов поставить оставшийся однопалубный корабль. При этом учитывайте, что по правилам его можно ставить только в ту клетку, все соседние с которой не заняты. В этой задаче соседними считаются клетки, имеющие общую сторону. Программа считывает два числа: N и M (1 ≤ N, M ≤ 100). Последующие N строк описывают игровое поле - каждая из них содержит M символов. Символом «.» (точка) обозначена свободная клетка, символом «*» (звездочка) - занятая кораблем. Необходимо вывести на экран ответ на задачу

N, M = map(int, input().split()) m1 = [] for i in range(N): m1.append(list(input())) cnt = 0 for i in range(N): for j in range(M): flag = True if m1[i][j] == ".": if i > 0 and m1[i - 1][j] == "*": flag = False if i < N - 1 and m1[i + 1][j] == "*": flag = False if j > 0 and m1[i][j - 1] == "*": flag = False if j < M - 1 and m1[i][j + 1] == "*": flag = False if flag: cnt += 1 print(cnt)

Questions about programming?Chat with your personal AI assistant