Excel и задача о восьми ферзях
Қосымшада ыңғайлырақҚосымшаны жүктеуге арналған QRRuStore · Samsung Galaxy Store
Huawei AppGallery · Xiaomi GetApps

автордың кітабын онлайн тегін оқу  Excel и задача о восьми ферзях

Андрей Зайнулин

Excel и задача о восьми ферзях






12+

Оглавление

Глава 1. Постановка задачи

Ферзь — сильнейшая шахматная фигура, которая может ходить по вертикали, по горизонтали и по диагонали.

Одна из самых знаменитых шахматных задач — это расстановка восьми ферзей одного цвета на шахматной доске так, чтобы ни один из них не находился под боем другого.

Размер шахматной доски обычно составляет 64 клетки. Обычно для кодировки клеток строкам (горизонталям) доски присваивают номера от 1 до 8 включительно, а столбцам (вертикалям) добавляют буквы латинского алфавита. Поля чередуются по цветам, левое верхнее поле доски обычно носит кодировку a8 и окрашивается в белый цвет. Правое верхнее поле — это поле h8, оно обычно бывает черного цвета.

На рисунке 1.1 покажем, как обычно выглядит пустая шахматная доска с учетом общепринятой кодировки.

Рисунок 1.1.

Пустая шахматная доска содержит 4 угловые клетки. Это клетки a1, a8, h1 и h8.

Любая клетка шахматной доски — это пересечение одной вертикали и одной горизонтали. Это значит, что если надо поставить ферзи таким образом, чтобы они не угрожали друг другу, тогда наличие ферзя на любой клетке доски предполагает, что в той же вертикали, которой принадлежит клетка с этим ферзем, других ферзей уже не может быть. Кроме того, и в этой же горизонтали, где расположен этот ферзь, тоже не может быть другого ферзя.

То же самое можно сказать и про диагонали шахматной доски. Если в каком-то поле доски находится ферзь, то в каждой диагонали доски, которой принадлежит эта клетка (это поле доски), не может быть другого ферзя. Каждая из четырех угловых клеток доски принадлежит только одной диагонали доски. Именно те диагонали доски, через которые проходят угловые клетки доски, являются самыми большими диагоналями шахматной доски. Всего таких больших диагоналей — ровно две.

Одна большая диагональ — белопольная, вторая — чернопольная. Белопольная диагональ идет из левого верхнего угла доски в правый нижний, а чернопольная диагональ — из левого нижнего угла в правый верхний.

Если же клетка доски не находится в самом углу этой доски, то эта клетка принадлежит сразу двум диагоналям доски. Одна из этих диагоналей будет параллельна самой большой белопольной диагонали, а вторая — самой большой чернопольной диагонали.

Итак, как было сказано ранее, если мы ставим ферзя на какое-то поле доски, то каждая из диагоналей, которой принадлежит эта клетка, не может содержать другого ферзя.

Решение задачи о восьми ферзях означает, что необходимо расположить на доске ровно 8 ферзей одного цвета с учетом всего того, что была здесь сказано. При этом на доске будет следующая ситуация:

1. В каждой вертикали доски должен находиться ровно один ферзь.

2. В каждой горизонтали доски должен находиться ровно один ферзь.

3. Поскольку всех диагоналей на доске намного больше, чем 8, то нельзя сказать, что в каждой диагонали доски (большой и маленькой) нужно разместить одного ферзя. Но при этом можно однозначно сказать, что в каждой диагонали шахматной доски должно находиться не больше одного ферзя.

Глава 2. Реализация в Эксель

2.1. Минимум автоматизации

При решении задачи о восьми ферзях в Эксель можно начать с того, что использовать Эксель просто как холст, как тетрадку, используя минимум из всех возможностей Эксель.

Вначале создадим нужный файл, который будет отвечать за решение этой задачи. Это должен быть не простой файл, а файл с поддержкой макросов. Это значит, что у этого файла будет расширение: «xlsm». Перед расширением можно задать имя: «Восемь_ферзей».

Далее можно изменить ширину столбцов. Рекомендуемая ширина — около 2,6 условных единиц. Это необходимо сделать для того, чтобы каждая клетка Эксель была больше похожа на квадрат, чем на простой прямоугольник. Ведь каждая ячейка Эксель будет символизировать клетку шахматной доски, а клетка доски — это именно квадрат.

Итак, начнем с составления первого варианта решения задачи.

Выделим квадрат размером 8 на 8 клеток Эксель. Этот квадрат будет символизировать шахматную доску (рисунок 2.1).

Рисунок 2.1.

Мы добавили внешние границы квадрату, который символизирует шахматную доску. Ячейка A1 Эксель (левая верхняя ячейка рисунка) будет означать поле a8 шахматной доски (тоже левое верхнее поле).

Теперь можно начать составлять возможные позиции, при которых на доске будет находиться 8 ферзей, не угрожающих друг другу.

Начнем с того, что предположим, что в первой позиции в верхней строке ферзь будет в первом (левом) столбце. Допустим, что цифра 1 будет символизировать ферзя, а какой-то символ (например, буква «х» будет означать те клетки, в которых ферзя точно не может быть.

Покажем эту ситуацию на рисунке 2.2.

Рисунок 2.2.

Далее продолжим заполнять наш квадрат единицами. Следующая строка — вторая строка сверху. Ячейки A2 и B2 Эксель не могут содержать единицу, так как там уже находятся символы «х». Это значит, что самый первый столбец, где можно предполагать наличие единицы в строке 2 Эксель, — это столбец C Эксель, ячейка C2. Поставим там единицу, а также добавим символы «х» везде, где это необходимо. Покажем ситуацию на рисунке 2.3.

Рисунок 2.3.

Затем заполняем строку 3. Здесь первые 4 ячейки уже заняты. Ближайшее свободное место, где можно разместить единицу, — это ячейка E3 Эксель. Поместим туда единицу, а также добавим символы «х» везде, где это будет необходимо. Покажем результат на рисунке 2.4.

Рисунок 2.4.

Затем надо заполнить строку 4 Эксель.

Но здесь можно просто применить логику. В строке 4 пока всего 3 свободные клетки. Но если мы поместим единицу в ячейку B4 или H4, то это будет значить, что для столбцов F и G не осталось ни одного варианта, которые позволили бы разместить в этих столбцах два ферзя, поскольку эти варианты не оставляют две свободные клетки в этих столбцах так, чтобы в этих клетках можно было разместить 2 ферзя, не угрожающих друг другу.

Но и в ячейке G4 тоже нельзя разместить единицу, поскольку в этом случае без вариантов останется столбец H. Напомню, что правильное решение задачи предполагает, что в каждом столбце должен быть ровно один ферзь (поскольку ферзей 8, и столбцов на доске тоже 8), поэтому ошибкой можно считать не только наличие двух и более ферзей в одном столбце, но и создание ситуации, при которой в каком-то столбце нет ферзя, но при этом нет возможности его там разместить, поскольку все ячейки одного столбца уже «простреливаются» другими ферзями.

Следовательно, можно прийти к выводу: в ситуации, изображенной на рисунке 2.3, в ячейке E3 размещать единицу нельзя, можно попробовать другие варианты. Начнем с варианта, когда единица будет в ячейке F3 (рисунок 2.5).

...