Всем привет, меня зовут Андрей, это снова я!
Продолжим говорить про решение японских кроссвордов с помощью эксель.
Поскольку в прошлой статье на эту тему присутствовало слово «помогатор», то в этой статье присутствуют два фиксика, потому что данная статья представляет собой продолжение и дополнение к предыдущей статье на эту же тему. В конце статьи я размещу ссылку с адресом той статьи, где расположена та статья.
Продолжим отгадывать японские кроссворды размером 9 на 9.
Пусть, например, у нас есть следующий японский кроссворд, который нужно разгадать:
Вначале перерисуем наши основные исходные данные в эксель, и вот что мы должны получить:
Поскольку раньше мы уже готовили сам файл для японских кроссвордов такого типа, то мы уже видим, что многие ячейки как среди исходных данных, так и среди сумм, приобрели определенный условный формат. Мы на данном этап решения японских кроссвордов можем проверить правильность всех формул, в том числе и тех, что содержатся в условных форматах. Например, если до этого решали другой японский кроссворд, и в нем было не больше трех блоков в каждой из строк, то для расчета цифр в столбце Q, где мы суммируем количество закрашенных ячеек в каждой строке, могли суммировать только цифры в столбцах от D до F. В нашем же кроссворде уже есть строки, в которых есть 4 блока, поэтому нужно суммировать данные в столбцах от C до F, а еще лучше - от A до F, на тот случай, вдруг попадется другой кроссворд, в котором будет еще больше блоков. По здравому размышлению, максимальное количество блоков для одноцветных японских квадратов размером 9 на 9 будет равно 5, это в том случае, если будут закрашены клетки с номерами 1, 3, 5, 7 и 9.
Итак, после проверки всех формул, включая те, что находятся в условных форматах, можно продолжить решать наш японский кроссворд. Мы уже видим среди исходных данных рыжие цифры (на рыжем фоне), (это значит, что есть блоки, размер которых превышает половину от нашей размерности), а среди сумм исходных данных есть синие цифры (на синем фоне), это значит, что есть области, для которых известны все цифры, то есть все ячейки: и закрашенные, и свободные.
На основании этих данных сразу выделим красным те ячейки, где должны быть нули, и зеленым те, где должны быть единицы, но перед этим удалим условные форматы из тех ячеек, которые содержат все переменные, то есть те единицы и ноли, из которых и будет состоять наш рисунок:
Но прежде, чем задавать ограничения на единицы и ноли, которые появятся в соответствии с зелеными и красными клетками этого рисунка, вначале посмотрим на те ограничения, что у нас остались с момента решения предыдущего кроссворда этого же размера. Вначале удалим все лишнее, то есть те ограничения, что приравнивают значения переменных к нулю или единице. В результате должно остаться 19 ограничений, которые будут оставаться для любых кроссвордов этой размерности.
Это суммы строк, а также ограничение, согласно которому каждое ограничение не может быть больше единицы.
А еще надо проверить целевую функцию, но в нашем конкретном случае ничего менять не надо, потому что сумма закрашенных ячеек оказалась такой же, что и была в предыдущем случае.
Кстати, как для тех ячеек, что содержат переменные, так и для той ячейки, что содержат целевую функцию, можно придумать отдельные имена, например, Перем_9_9 и ЦФ_9_9. Присвоение имени на листе эксель автоматически означает присвоение того же имени и возможность его использования в форме ввода параметров:
Если мы сначала введем только самые основные ограничения (о сумме строк и о том, что каждая переменная не может быть больше единицы), то получим вот какое предварительное решение:
Конечно же, это не окончательное решение, но мы еще не вводили ограничения, которые касаются тех ячеек, которые мы недавно выделили зеленым и красным. Там красные ячейки – это те, что равны нулю, а зеленые – это те, что равны единице. Чтобы уменьшить количество ограничений, сначала вне квадрата с переменными введем формулу, которая будет подсчитывать сумму тех ячеек, которые мы выделили красным цветом. И тогда нам надо будет добавить только одно ограничение: приравнять эту ячейку к нулю.
Уже после первого решения с таким интересным ограничением все «красные» ячейки стали нулями, все «зеленые» единицами. Это несмотря на то, что мы отдельного ограничения на "зеленые" ячейки не вводили, "зеленые" стали "зелеными" сами по себе, вследствие срабатывания всех других ограничений. И хотя все первоначальные условия не соблюдены, осталось совсем чуть-чуть:
А теперь можно добавить несколько квадратов, которые будут считать и количество блоков в каждой области, и количество единиц внутри каждого блока.
Начнем со строк. В том нерешенном кроссворде, который мы рассматриваем в данной статье, у нас должна получиться вот какая ситуация на данном этапе решения (несколько рисунков представлены в одной галерее):
Основные формулы для этих рисунков представлены в следующей галерее:
Если каких-то формул не видно, это не значит, что их нет. Просто формат "белый текст и белый фон" действует и при показе значений ячеек эксель, и при показе формул. Все формулы, цвет заливки которых совпал со цветом текста, полностью идентичны тем формулам, что видны и расположены рядом.
В принципе, из этих рисунков нас интересуют только последние, они показывают, на какие именно группы (блоки) разбились единицы (то есть те ячейки, что надо закрасить) в каждой строке. Поэтому все ненужное мы скроем:
А те ячейки, что оказались особо выделенными с помощью условного форматирования в столбцах BL…BP показывают, в каких именно строках у нас имеются ошибки, то есть несоответствие полученных блоков исходным данным. Например, в первой (верхней) строке надо закрасить сначала 4 ячейки, а потом 2, а на самом деле закрасились сначала 5, потом 1. С каждой новой ситуацией будут автоматически меняться все цифры в столбцах от BL до BP.
Конечно же, можно аналогичным образом выяснить, в каких столбцах содержатся аналогичные ошибки, но чаще всего будет происходить так: если мы исправим все ошибки в строках, то, с учетом наших предыдущих ограничений, в столбах тоже должно быть все в порядке.
Продолжим решать наш кроссворд. Исходя из той ситуации, что у нас сложилась, нам достаточно исправить только одно ограничение: в ячейках G7 и N15 должны быть ноли. Чтобы это ограничение вступило в силу, нам достаточно сделать только одно: в формулу ячейки Q19 добавить сумму ячеек G7 и N15. Не надо даже добавлять новые ограничения. Итак, исправим формулу Q19 и снова найдем решение, вот что получим:
Итак, решение найдено. В столбцах BL...BP не осталось выделяющихся ячеек. Осталось совсем чуть-чуть: с помощью условного форматирования придать единицам одинаковый небелый фон заливки и текста, а также белый фон и белый текст нолям. Можно даже создать макрос, который будет устанавливать этот условный формат, ведь решение следующего кроссворда начнется с удаления этого формата. А это удаление, кстати, можно поручить другому макросу.
Итак, раскрасим наш рисунок, вот какой получится результат: