Kodomo

Пользователь

Задачи

  1. Выполните все задачи предыдущего задания. Обратите внимание, что результатом первой задачи в нём является письмо и (вероятно, пустой) репозиторий.

  2. Создайте в репозитории для задач файл queens.py. Все последующие функции этого задания Вы описываете в этом файле.

  3. (Вспомогательная) Опишие функцию field(n_lines, n_columns). Функция получает на вход высоту и ширину поля и возвращает пустое поле (т.е. без фигур). Поле представляется в виде списка строк, строка представляется в виде списка клеток. В пустой клетке хранится значение None.

  4. Опишите функцию seed(n_lines, n_columns, queens). На вход функция получает высоту (n_lines) и ширину (n_columns) поля и список координат ферзей, т.е. список пар [номер строки, номер столбца] (нумерация с нуля). Например [[1,2]] обозначает одного ферзя во второй строке на третьей позиции, т.е. c2. Функция создаёт поле и расставляет на нём ферзей, перечисленных в аргументах. Поле представлено так же, как и для предыдущей задачи. Клетки поля, в которых расположен ферзь, обозначаются значемнием "Q". Например:

   1 >>> import queens
   2 >>> queens.seed(3, 3, [[1,2]])
   3 [[None, None, None], [None, None, "Q"], [None, None, None]]
  1. (Необязательная). Почитайте документацию по модулю random. Опишите функцию seed_random(n_lines, n_columns, n_queens), которая расставляет по полю произвольным образом n_queens ферзей. (В остальном идентична функции seed).

  2. (Необязательная, но простая и полезная). Опишите функцию display(field), которая получает поле в том формате, который возвращает функция seed и распечатывает поле на экран в читаемом виде (в каком – на ваш вкус; лишь бы квадратное поле отображалось как квадратное или хотя бы прямоугольное).

  3. (Необязательная, довольно сложная) Опишите функцию captures(line, column, field), которая получает на вход позицию (номер строки и столбца) и поле с расставленными на нём ферзями, и возвращает True тогда и только тогда, когда какой-либо из ферзей бьёт указанную позицию. Во всех остальных случаях она возвращает False.

  4. (Необязательная, очень сложная). Опишите функцию puzzle_solutions(n), которая получает на вход параметр n, создаёт поле размера n x n; выводит на экран все возможные расстановки n ферзей так, что ни один ферзь не бьёт ни одного другого ферзя. Функция возвращает количество найденных расстановок ферзей. (Это классическая математическая / программистская задача под названием "задача 8 ферзей").

Задача 6 является одновременно и достаточно сложной, и финальной задачей шахматной темы. Лучше всего отыскать для неё описание алгоритма в сети и реализовать его (я этого сделать за вас не успел). Далее мы будем переходить к более прикладным и полезным для простой жизни вещам.