Игра «Морской бой» · Шаг 4 из 5
Добить раненого
Противник попал в корабль — и теперь ему незачем стрелять по всему морю: раненый корабль где-то рядом. Одна раненая палуба — корабль продолжается в одну из четырёх сторон. Две раненые палубы в ряд — направление уже ясно: стрелять надо по концам ряда.
Что сделать
Подскажите, куда стрелять, чтобы добить раненый корабль: по сторонам от одной палубы или по концам ряда раненых.
Что приходит
izvestno— что известно о море: словарь «клетка →"мимо","ранил"или"убил"»n— сторона моря
Что вернуть
Отсортированный список клеток-кандидатов: на море и ещё не обстрелянных; раненых нет — пустой список.
Допишите функцию kuda_bit в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В игре
Противник зовёт kuda_bit перед каждым своим выстрелом: есть кандидаты — бьёт в один из них. Пробел на вашей стороне делает то же для вас. Решите шаг — и противник начнёт добивать раненые корабли.
Без этого шага: противник не добивает раненый корабль, а стреляет куда попало.
kuda_bit({(4, 4): "ранил"}, 10)
[(3, 4), (4, 3), (4, 5), (5, 4)]
Раненые — клетки, у которых в izvestno стоит "ранил". Клетки "убил" и "мимо" ранеными не считаются.
- Все раненые в одной строке — кандидаты: клетка левее самой левой и правее самой правой.
- Все раненые в одном столбце — кандидаты: клетка выше самой верхней и ниже самой нижней.
- Одна раненая клетка лежит и в одной строке, и в одном столбце — значит, кандидаты все четыре соседа по сторонам.
- Раненые не на одной прямой (бывает, если корабли не тонут) — кандидаты все соседи по стороне каждой раненой клетки.
Из кандидатов оставить те, что на море и которых нет в izvestno; каждую клетку — один раз; отсортировать.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.