Игра «Реверси» · Шаг 1 из 5
Что перевернётся
В реверси фишку ставят так, чтобы зажать чужие между своими: по строке, по столбцу или по диагонали. Всё зажатое переворачивается и становится вашим. Прежде чем ставить, игра должна знать, что именно перевернётся, — иначе нечем ни ходить, ни подсказывать.
Что сделать
Найдите все чужие фишки, которые перевернутся, если поставить фишку в эту клетку.
Что приходит
pole— поле списком строк одной длины:"."— пусто,"B"— чёрная,"W"— белаяstrokaиstolbec— куда ставят фишку; номера с нуляkto— чья фишка:"B"или"W"
Что вернуть
Список клеток (строка, столбец), которые перевернутся, по возрастанию; клетка занята или зажать нечего — [].
Допишите функцию zahvat в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В игре
Игра зовёт zahvat на каждый ход — свой и бота — и переворачивает то, что вы вернули. Решите шаг — и фишки станут переворачиваться по столбцам и диагоналям, а не только по строке.
Без этого шага: переворачивается только соседняя фишка — по одной в каждую сторону, длинные ряды не переворачиваются.
На поле 4×4 чёрные ставят фишку в клетку (0, 1). Под ней белая (1, 1), а за белой — чёрная (2, 1): белая зажата и перевернётся — ответ [(1, 1)].
zahvat(["....", ".WB.", ".BW.", "...."], 0, 1, "B")
[(1, 1)]
Из клетки идут восемь лучей: вверх, вниз, влево, вправо и четыре диагонали. По каждому лучу шагаем, пока встречаются чужие фишки. Если за ними сразу стоит своя фишка — все пройденные чужие переворачиваются. Если за ними пусто, край поля или чужих не было вовсе — по этому лучу не переворачивается ничего.
Клетки возвращаются кортежами (строка, столбец) в порядке возрастания — сначала по строке, при равной — по столбцу.
Если клетка уже занята — ответ []. Поле может быть любого размера: высота — len(pole), ширина — len(pole[0]).
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.