Примеры решений задач – общие с третьим заданием
Задачи
Выполните все задачи предыдущего задания. Обратите внимание, что результатом первой задачи в нём является письмо и (вероятно, пустой) репозиторий.
Создайте в репозитории для задач файл queens.py. Все последующие функции этого задания Вы описываете в этом файле.
(Вспомогательная) Опишие функцию field(n_lines, n_columns). Функция получает на вход высоту и ширину поля и возвращает пустое поле (т.е. без фигур). Поле представляется в виде списка строк, строка представляется в виде списка клеток. В пустой клетке хранится значение None.
Опишите функцию seed(n_lines, n_columns, queens). На вход функция получает высоту (n_lines) и ширину (n_columns) поля и список координат ферзей, т.е. список пар [номер строки, номер столбца] (нумерация с нуля). Например [[1,2]] обозначает одного ферзя во второй строке на третьей позиции, т.е. c2. Функция создаёт поле и расставляет на нём ферзей, перечисленных в аргументах. Поле представлено так же, как и для предыдущей задачи. Клетки поля, в которых расположен ферзь, обозначаются значемнием "Q". Например:
(Необязательная). Почитайте документацию по модулю random. Опишите функцию seed_random(n_lines, n_columns, n_queens), которая расставляет по полю произвольным образом n_queens ферзей. (В остальном идентична функции seed).
(Необязательная, но простая и полезная). Опишите функцию display(field), которая получает поле в том формате, который возвращает функция seed и распечатывает поле на экран в читаемом виде (в каком – на ваш вкус; лишь бы квадратное поле отображалось как квадратное или хотя бы прямоугольное).
(Необязательная, довольно сложная) Опишите функцию captures(line, column, field), которая получает на вход позицию (номер строки и столбца) и поле с расставленными на нём ферзями, и возвращает True тогда и только тогда, когда какой-либо из ферзей бьёт указанную позицию. Во всех остальных случаях она возвращает False.
(Необязательная, очень сложная). Опишите функцию puzzle_solutions(n), которая получает на вход параметр n, создаёт поле размера n x n; выводит на экран все возможные расстановки n ферзей так, что ни один ферзь не бьёт ни одного другого ферзя. Функция возвращает количество найденных расстановок ферзей. (Это классическая математическая / программистская задача под названием "задача 8 ферзей").
Задача 6 является одновременно и достаточно сложной, и финальной задачей шахматной темы. Лучше всего отыскать для неё описание алгоритма в сети и реализовать его (я этого сделать за вас не успел). Далее мы будем переходить к более прикладным и полезным для простой жизни вещам.