В предыдущих статьях мы рассматривали разные подходы в решении проблем на примерах головоломок судоку. Пришло время попытаться, в свою очередь, проиллюстрировать возможности рассмотренных подходов на достаточно сложном примере решения проблем. Итак, сегодня мы приступим к самому "невероятному" варианту судоку. Терминологию и предварительные сведения вы, уж будьте так любезны, посмотрите в , иначе вам трудно будет понять содержание данной статьи.
Вот какие сведения я нашел об этом сверхсложном варианте в интернете:
Профессор Хельсинского университета Арто Инкала (Arto Inkala) утверждает (2011г.), что он создал самый сложный в мире кроссворд судоку. Эту сложнейшую головоломку он создавал три месяца.
По его словам, созданный им кроссворд невозможно решить с помощью одной лишь только логики. Арто Инкала утверждает, что даже самые опытные игроки на решение потратят не меньше нескольких дней. Изобретение профессора получило название AI Escargot (AI – инициалы ученого, Escargot – от англ. «улитка»).
Для решения этой непростой задачи, как утверждает Арто Инкала, в голове одновременно нужно держать восемь последовательностей, в отличие от обычных головоломок, где помнить нужно об одной-двух последовательностях.
Ну, "последовательности переборов" – это все же отдает машинным вариантом решения проблем, а те, кто решал задачу Арто Инкала посредством собственных мозгов, говорят об этом по-разному. Кто-то решал ее пару месяцев, кто-то объявил о том, что на это потребовалось лишь 15 минут. Ну что ж, чемпион мира по шахматам возможно и справился бы с задачей за такое время, а экстрасенс, если таковые обитают на нашей плане, возможно и еще быстрее. А еще мог быстро решить задачу тот, кто случайно с первого разу подобрал несколько удачных цифр для заполнения пустых ячеек. Скажем, одному из тысячи решателей задачи могло бы подобным образом и повезти.
Так вот, о переборе: если удачно выбрать две три правильных цифры, то перебирать восемь последовательностей (а это десятки вариантов) может и не потребоваться. Такое у меня было соображение, когда я решил приступить к решению указанной задачи. Для начала я, будучи уже подготовленным в рамках методик предыдущих статей, решил забыть о том, что знал до сих пор. Есть такой прием, заключающийся в том, что поиск решения должен протекать свободно, без навязанных ему схем и идей. А ситуация для меня была новой, так что требовалось на нее и по-новому взглянуть. Я расположил (в Эксель) исходную таблицу (справа) и рабочую таблицу, о смысле которой я уже имел случай рассказать в первой о судоку моей статье :
Рабочая таблица, напомню, содержит предварительно допустимые сочетания цифр в исходно пустых ячейках.
После обычной почти рутинной обработки таблиц ситуации немного упростилась:
Эту ситуацию я и начал изучать. Ну а поскольку я уже подзабыл, как именно я решал эту задачу несколькими днями раньше, то начинаю осмысливать ее по новой. Прежде всего, я обратил внимание на два числа 67 в ячейках четвертого блока и совместил их с механизмом вращения (перемещения) ячеек, о котором рассказывал в предыдущей статье. Перебрав все варианты вращения трех первых столбцов таблицы, я пришел к выводу, что цифры 6 и 7 не могут находиться в одном столбце и не могут вращаться асинхронно, они, в процессе вращения, могут лишь следовать одна за другой. Также, если присмотреться, семерка с четверкой как бы передвигаются синхронно по всем трем столбцам. Поэтому я делаю правдоподобное предположение, что в нижней левой ячейке блока 4 должна разместиться цифра 7, а в правой верхней – соответственно 6.
Но этот результат я пока принимаю лишь как возможный ориентир в опробовании других вариантов. А основное внимание я обращаю на число 59 в ячейке 4-го блока. Здесь может быть либо цифра 5, либо 9. Девятка обещает уничтожить очень много лишних цифр, т.е. упростить дальнейший ход решения задачи, и я начинаю с этого варианта. Но довольно быстро захожу в "тупик", т.е. далее надо снова делать какой-то выбор и как знать, как долго мой выбор будет проверяться. Я предполагаю, что если бы девятка действительно была когда-то правильным выбором, то Инкала вряд ли бы оставил такой очевидный вариант на виду, хотя механизм его программы мог и допустить подобный ляпсус. В общем, так или иначе, я решил сначала досконально проверить вариант с цифрой 5 в ячейке с числом 59.
Но уже позже, когда решил задачу, я, так сказать для очистки совести, все же вернулся к варианту с цифрой 9, чтобы определить как долго пришлось бы его проверять. Проверять пришлось не очень долго. Когда у меня в правой верхней ячейке блока 4 оказалась цифра 6, как и полагалось по предварительно выбранному ориентиру, то в правой средней ячейке возникло число 19 (убралась 6 из 169). Я выбрал для дальнейшего опробование цифру 9 в этой ячейке и быстро пришел к противоречивому результату, т.е. выбор девятки не верен. Тогда выбираю цифру 1 и снова проверяю, что из этого выйдет.
На каком-то шаге прихожу к ситуации:
где снова приходится делать выбор – цифру 2 или 8 в верхней средней ячейке блока 4. Проверяю оба варианта (2 и 8) и в обоих случаях заканчиваю противоречивым (не отвечающим условию судоку) результатом. Так что мог бы проверить вариант с цифрой 9 в средней нижней ячейке блока 4 с самого начала и много времени на это не потребовалось бы. Но я все же, как уже говорил, остановился на цифре 5 в упомянутой ячейке. Это привело меня к следующему результату:
Расположение цифр 4 и 7 в первых трех столбцах (колонках) свидетельствует о том, что они вращаются синхронно, что собственно и предполагалось при выборе цифры 7 для нижней левой ячейки 4-го блока. При этом двойка или девятка, будь любая из них требуемой цифрой в средней левой ячейке этого блока, должны соответственно двигаться асинхронно паре 4 и 7. Предпочтение в данном случае я отдал цифре 2, так как она "обещала" устранить много лишних цифр из чисел ячеек и, соответственно, быструю проверку допустимости данного варианта. А девятка быстро заводила в тупик – требовала подбора новых цифр. Таким образом, в левой средней ячейке блока с числом 29 я проставил не мой взгляд более предпочтительную из цифр – 2. Результат вышел следующим:
Далее мне пришлось еще раз сделать так сказать полупроизвольный выбор: выбрал двойку в ячейке с числом 26 в девятом блоке. Для этого достаточно было заметить, что 5 и 2 в трех нижних строках вращаются синхронно, так как 5 не вращалась синхронно ни с 1, ни с 6. Правда, синхронно могли вращаться еще 2 и 1, но из каких-то соображений – точно не помню – я выбрал 2 вместо числа 26, возможно потому, что этот вариант, по моей оценке, быстро проверялся. Впрочем, уже оставалось немного вариантов, и можно было достаточно быстро проверить любой из них. Можно было также вместо варианта с двойкой предположить, что цифры 7 и 8 вращаются синхронно в последних трех столбцах (колонках), а отсюда следовало, что в левой верхней ячейке 9-го блока могла быть только цифра 8, что также приводит к быстрой развязке задачи.
Надо сказать, что задача Арто Инкала не допускает чисто логического решения в рамках возможностей обычного человека – так она задумана, – но все же позволяет заметить некоторые перспективные варианты перебора возможных подстановок цифр и существенно сократить этот перебор. Попробуйте начать перебор с иных, чем в данной статье, позиций, и вы, убедитесь, что почти все варианты очень быстро заводят в тупик и требуется делать все новые и новые предположения относительно дальнейшего выбора подходящих подстановок цифр. Месяца два назад я уже пытался решить эту задачу, не имея той подготовки, которую я описал в предыдущих статьях. Проверил вариантов десять ее решения и оставил дальнейшие попытки. Последний же раз, уже будучи более подготовленным, я решал эту задачу полдня или немного более, но при этом с одновременным обдумыванием выбора с моей точки зрения наиболее показательных для читателей вариантов и также с предварительным обдумыванием текста будущей статьи. А окончательный результат решения получился следующий:
Собственно, данная статья не имеет самостоятельного значения, она написана лишь для иллюстрации того, как приобретенные навыки и теоретические соображения, описанные в предыдущих статьях, позволяют решать довольно сложные проблемы. А статьи были, напомню, не о судоку, а о механизмах решения проблем на примере судоку. Предметы, как по мне, совершенно разные. Однако поскольку судоку интересует многих, то я таким образом решил привлечь внимание к более существенному вопросу, касающемуся не собственно судоку, но решения проблем.
А в остальном – желаю вам успехов в решении всех проблем.
Не буду рассказывать про правила, а сразу перейду к методикам.
Для решения головоломки, не важно сложной или простой, изначально ищутся ячейки очевидные для заполнения.
1.1 «Последний герой»
Рассмотрим седьмой квадрат. Всего четыре свободных клетки, значит что-то можно быстро заполнить.
"8
" на D3
блокирует заполнение H3
и J3
; точно также "8
" на G5
закрывает G1
и G2
С чистой совестью ставим "8
" на H1
1.2 «Последний герой» в строке
После просмотра квадратов на очевидные решения, переходим к столбцам и строкам.
Рассмотрим "4
" на поле. Понятно, что она будет где-то в строке A
.
У нас есть "4
" на G3
, что зыкрывает A3
, есть "4
" на F7
, убирающая A7
. И ещё одна "4
" во втором квадрате запрещает её повтор на A4
и A6
.
«Последний герой» для нашей "4
" это A2
1.3 «Выбора нет»
Иногда есть несколько причин для конкретного расположения. "4
" в J8
будет отличным примером.
Синие
стрелки показывают, что это последнее возможное число в квадрате. Красные
и синие
стрелки дают нам последнее число в столбце 8
. Зеленые
стрелки дают последнее возможное число в строке J
.
Как видим, выбора у нас нет, кроме как поставить эту "4
" на место.
1.4 «А кто, как не я?»
Заполнение чисел проще проводить вышеописанными методами. Однако проверка числа, как последнего возможного значения, тоже даёт результаты. Метод стоит применять, когда кажется, что все числа есть, но чего-то не хватает.
"5
" в B1
ставится исходя из того, что все числа от "1
" до "9
", кроме "5
" есть в строке, столбце и квадрате (отмечено зеленым).
На жаргоне это "Голая одиночка ". Если заполнять поле возможными значениями (кандидатами), то в ячейке такое число будет единственным возможным. Развивая эту методику, можно искать "Скрытые одиночки " - числа, уникальные для конкретной строки, столбца или квадрата.
2. «Голая миля»
2.1 «Голые» пары
"«Голая» пара
" - набор из двух кандидатов, расположенных в двух ячейках, принадлежащих одному общему блоку: строке, столбцу, квадрату.
Понятно, что правильные решения головоломки будут только в этих ячейках и только с этими значениями, в то время как все другие кандидаты из общего блока могут быть убраны.
В этом примере несколько «голых пар».
Красным
в строке А
выделены ячейки А2
и А3
, обе содержащие "1
" и "6
". Я пока не знаю, как именно они расположены здесь, но я спокойно могу убрать все другие "1
" и "6
" из строки A
(отмечено желтым). Также А2
и А3
принадлежат общему квадрату, поэтому убираем "1
" из C1
.
2.2 «Threesome»
«Голые тройки»
- усложненный вариант «голых пар».
Любая группа из трех ячеек в одном блоке содержащая в общем
три кандидата является «голой тройкой»
. Когда такая группа нашлась, эти три кандидата могут быть убраны из других ячеек блока.
Комбинации кандидатов для «голой тройки» могуть быть такими:
// три числа в трех ячейках.
// любые комбинации.
// любые комбинации.
В этом примере все довольно очевидно. В пятом квадрате ячейки E4
, E5
, E6
содержат [5,8,9
], [5,8
], [5,9
] соответственно. Получается, что в общем у этих трех ячеек есть [5,8,9
], и только эти числа там могут быть. Это позволяет нам убрать их из других кандидатов блока. Этот трюк даёт нам решение "3
" для ячейки E7
.
2.3 «Великолепная четверка»
"«Голая» четверка"
весьма редкое явление, особенно в полной форме, и все же дает результаты при обнаружении. Логика решения такая же как и у «голых троек»
.
В указанном примере в первом квадрате ячейки A1 , B1 , B2 и C1 в общем содержат [1,5,6,8 ], поэтому эти числа займут только эти ячейки и никакие другие. Убираем подсвеченных желтым кандидатов.
3. «Все тайное становится явным»
3.1 Скрытые пары
Отличным способом раскрыть поле будет поиск скрытых пар
. Этот метод позволяет убрать лишних кандидатов из ячейки и дать развитие более интересным стратегиям.
В этой головоломке мы видим, что 6
и 7
есть в первом и втором квадратах. Кроме этого 6
и 7
есть в столбце 7
. Комбинируя эти условия, мы можем утверждать, что в ячейках A8
и A9
будут только эти значения и все другие кандидаты мы убираем.
Более интересный и сложный пример скрытых пар
. Синим выделена пара [2,4
] в D3
и E3
, убирающая 3
, 5
, 6
, 7
из этих ячеек. Красным выделены две скрытые пары, состоящие из [3,7
]. C одной стороны, они уникальны для для двух ячеек в 7
столбце, с другой стороны - для строки E
. Выделеные желтым кандидаты убираются.
3.1 Скрытые тройки
Мы можем развить скрытые пары до скрытых троек или даже скрытых четверок . Скрытая тройка состоит из трех пар чисел, расположенных в одном блоке. Такие как , и. Однако, как и в случае с «голыми тройками» , в каждой из трех ячеек не обязательно должно быть по три числа. Сработают всего три числа в трех ячейках. Например , , . Скрытые тройки будут замаскированы другими кандидатами в ячейках, поэтому сначала надо убедиться, что тройка применима к конкретному блоку.
В этом сложном примере есть две скрытые тройки
. Первая, отмеченная красным, в столбце А
. Ячейка А4
содержит [2,5,6
], A7
- [2,6
] и ячейка A9
-[2,5
]. Эти три ячейки единственные, где могут быть 2 ,5 или 6, поэтому только они там и будут. Следовательно убираем лишних кандидатов.
Вторая, в столбце 9 . [4,7,8 ] уникальны для ячеек B9 , C9 и F9 . Используя ту же логику, убираем кандидатов.
3.1 Скрытые четверки
Прекрасный пример скрытых четверок
. [1,4,6,9
] в пятом квадрате могут быть только в четырех ячейках D4
, D6
, F4
, F6
. Следуя нашей логике, убираем всеъ других кандидатов (отмеченых желтым).
4. «Нерезиновая»
Если любое из чисел появляется дважды или трижды в одном блоке (строке, столбце, квадрате), тогда мы можем убрать это число из сопряженного блока. Есть четыре вида сопряжения:
- Пара или Тройка в квадрате - если они расположены в одной строке, то можно убрать все другие такие же значения из соответствующей строки.
- Пара или Тройка в квадрате - если они расположены в одном столбце, то можно убрать все другие такие же значения из соответствующего столбца.
- Пара или Тройка в строке - если они расположены в одном квадрате, то можно убрать все другие такие же значения из соответствующего квадрата.
- Пара или Тройка в столбце - если они расположены в одном квадрате, то можно убрать все другие такие же значения из соответствующего квадрата.
4.1 Указавыющие пары, тройки
В качестве примера покажу эту головоломку. В третьем квадрате "3 " находится только в B7 и B9 . Следуя утверждению №1 , мы убираем кандидатов из B1 , B2 , B3 . Аналогично, "2 " из восьмого квадрата убирает возможное значение из G2 .
Особенная головоломка. Очень сложная в решении, но, если присмотреться, можно заметить несколько указывающих пар
. Понятно, что не всегда обязательно находить их все, чтобы продвинуться в решении, однако каждая такая находка облегчает нам задачу.
4.2 Сокращаем несокращаемое
Эта стратегия включает в себя аккуратный анализ и сравнение строк и столбцов с содержимым квадратов (правила №3
, №4
).
Рассмотрим строку А
. "2
" возможны только в А4
и А5
. Следуя правилу №3
, убираем "2
" их B5
, C4
, C5
.
Продолжим решать головоломку. Имеем единственное расположение "4
" в пределах одного квадрата в 8
столбце. Согласно правилу №4
, убираем лишних кандитатов и, в добавок, получаем решение "2
" для C7
.
Поле судоку представляет собой таблицу 9х9 клеток. В каждую клетку заносится цифра от 1 до 9. Цель игры: расположить цифры таким образом, чтобы в каждой строке, в каждом столбце и в каждом блоке 3х3 не было повторений. Другими словами, в каждом столбце, строке и блоке должны быть все цифры от 1 до 9.
Для решения задачи в пустые клетки можно записывать кандидатов. Например, рассмотрим клетку 2-го столбца 4-ой строки: в столбце, в котором она находится, уже имеются цифры 7 и 8, в строке - цифры 1, 6, 9 и 4, в блоке - 1, 2, 8 и 9. Следовательно, из кандидатов в данной ячейке вычеркиваем 1, 2, 4, 6, 7, 8, 9, и у нас остается только два возможных кандидата – 3 и 5.
Аналогично, рассматриваем возможных кандидатов для других ячеек и получаем следующую таблицу:
С кандидатами решать интереснее и можно применять различные логические методы. Далее мы рассмотрим некоторые из них.
Одиночки
Метод заключается в отыскании в таблице одиночек, т.е. ячеек, в которых возможна только одна цифра и никакая другая. Записываем эту цифру в данную ячейку и исключаем ее из других клеток этой строки, столбца и блока. Например: в данной таблице имеются три «одиночки» (они выделены желтым цветом).
Скрытые одиночки
Если в ячейке стоит несколько кандидатов, но один из них не встречается больше ни в одной другой ячейке данной строки (столбца или блока), то такой кандидат называется «скрытой одиночкой». В следующем примере кандидат «4» в зеленом блоке найден только в центральной ячейке. Значит, в этой ячейке обязательно будет «4». Заносим «4» в данную ячейку и вычеркиваем из других ячеек 2-го столбца и 5-ой строки. Аналогично, в желтом столбце кандидат «2» встречается один раз, следовательно, в данную ячейку заносим «2» и исключаем «2» из ячеек 7-ой строки и соответствующего блока.
Предыдущие два метода – это единственные методы, которые однозначно определяют содержимое ячейки. Следующие методы позволяют только уменьшать количество кандидатов в ячейках, что рано или поздно приведет к одиночкам или скрытым одиночкам.
Запертый кандидат
Бывают случаи, когда кандидат в пределах блока находится только в одном строке (или в одном столбце). В силу того, что одна из этих ячеек обязательно будет содержать этого кандидата, из всех остальных ячеек данной строки (столбца) этого кандидата можно исключить.
В примере ниже, центральный блок содержит кандидата «2» только в центральном столбце (желтые ячейки). Значит, одна из этих двух ячеек точно должна быть «2», и никакие другие ячейки в том ряду вне этого блока не могут быть «2». Поэтому «2» может быть исключен как кандидат из других ячеек этого столбца (ячейки зеленого цвета).
Открытые пары
Если две ячейки в группе (строке, столбце, блоке) содержат идентичную пару кандидатов и ничего более, то никакие другие ячейки этой группы не могут иметь значения этой пары. Эти 2 кандидата могут быть исключены из других ячеек в группе. В примере ниже, кандидаты «1» и «5» в колонках восемь и девять формируют Открытую Пару в пределах блока (желтые ячейки). Поэтому, так как одна из этих ячеек должна быть «1», а другая должны быть «5», кандидаты «1» и «5» исключаем из всех других ячеек этого блока (зеленые ячейки).
Тоже самое можно сформулировать для 3 и 4-х кандидатов, только участвует уже 3 и 4 ячейки, соответственно. Открытые тройки: из ячеек зеленого цвета исключаем значения ячеек желтого цвета.
Открытые четверки: из ячеек зеленого цвета исключаем значения ячеек желтого цвета.
Скрытые пары
Если в двух ячейках в группе (строке, столбце, блоке) содержат кандидаты, среди которых идентичная пара, не встречающаяся ни в одной другой ячейке данного блока, то никакие другие ячейки этой группы не могут иметь значения этой пары. Следовательно, все другие кандидаты этих двух ячеек могут быть исключены. В примере ниже, кандидаты «7» и «5» в центральной колонке находятся только в ячейках желтого цвета, значит, всех остальных кандидатов из этих ячеек можно исключить.
Аналогично, можно искать скрытые тройки и четверки.
x-wing
Если значение имеет только два возможных местоположения в какой-то строке (столбце), то оно обязательно должно быть назначено в одну из этих ячеек. Если же существует еще одна строка (столбец), где этот же кандидат также может быть только в двух ячейках и столбцы (строки) этих ячеек совпадают, то ни одна другая ячейка этих столбцов (строк) не может содержать данную цифру. Рассмотрим пример:
В 4-ой и 5-ой строках цифра «2» может быть только в двух ячейка желтого цвета, при чем эти ячейки находятся в одинаковых столбцах. Следовательно, цифра «2» может быть записана только двумя способами: 1) если «2» записать в 5-ый столбец 4-ой строки, то из желтых ячеек «2» надо исключит и тогда в 5-ой строке положение «2» определяется однозначно 7-ым столбцом.
2) если «2» записать в 7-ой столбец 4-ой строки, то из желтых ячеек «2» надо исключит и тогда в 5-ой строке положение «2» определяется однозначно 5-ым столбцом.
Следовательно, 5-ый и 7-ой столбец обязательно будут иметь цифру «2» либо в 4-ой строке, либо в 5-ой. Тогда из других ячеек данных столбцов цифру «2» можно исключить (зеленые клетки).
"Рыба Меч" (Swordfish)
Этот метод является вариацией метода .
Из правил головоломки следует, что если кандидат находится в трех строках и только в трех столбцах, то в других строках этого кандидата в этих столбцах можно исключить.
Алгоритм:
- Ищем строчки, в которых кандидат встречается не более трех раз, но при этом он принадлежит ровно трем колонкам.
- Исключаем кандидата из этих трех колонок из других строк.
Эта же логика применима и в случае трех колонок, где кандидат ограничивается тремя строками.
Рассмотрим пример. В трех строчках (3, 5 и 7-ая) кандидат «5» встречается не более трех раз (ячейки выделены желтым цветом). При этом они принадлежат только трем столбцам: 3, 4 и 7-ому. Согласно методу «Рыба меч» из других ячеек этих столбцов кандидата «5» можно исключить (зеленые ячейки).
В примере, приведенном ниже, так же применяется метод «Рыба меч», но уже для случая трех колонок. Исключаем кандидата «1» из ячеек зеленого цвета.
«X-wing» и «Рыба меч» можно обобщить на случай четырех строк и четырех столбцов. Данный метод будет называться «Медуза».
Цвета
Бывают ситуации, когда кандидат встречается только два раза в группе (в строке, столбце или блоке). Тогда искомая цифра обязательно будет в одном из них. Стратегия метода «Цвета» заключается в том, чтобы просматривать эту взаимосвязь с использованием двух цветов, например, желтого и зеленого. При этом решение может быть в клеточках только какого-то одного цвета.
Выделяем все взаимосвязанные цепочки и принимаем решение:
- Если какой-то незакрашенный кандидат имеет двух разноцветных соседей в группе (строке, столбце или блоке), то его можно исключить.
- Если в группе (строке, столбце или блоке) имеется два одинаковых цвета, то данный цвет является ложным. Кандидата из всех клеточек этого цвета можно исключить.
В следующем примере применим метод «Цвета» для ячеек с кандидатом «9». Начинаем раскрашивать с ячейки в левом верхнем блоке (2 строка, 2 столбец), закрасим ее в желтый цвет. В своем блоке она имеет только одного соседа с «9», закрасим его в зеленый цвет. Также у нее только один сосед в столбце, закрашиваем и его в зеленый цвет.
Аналогичным образом работаем с остальными ячейками, содержащими цифру «9». Получаем:
Кандидат «9» может быть либо только во всех желтых ячейках, либо во всех зеленых. В правом среднем блоке встретились две ячейки одинакового цвета, следовательно, зеленый цвет неверный, так как в данном блоке получается две «9», что недопустимо. Исключаем, «9» из всех зеленых клеток.
Еще один пример на метод «Цвета». Пометим парные ячейки для кандидата «6».
Клетка с «6» в верхнем центральном блоке (выделим сиреневым цветом) имеет двух разноцветных кандидатов:
«6» обязательно будет или в желтой или в зеленой клетке, следовательно, из этой сиреневой клетки «6» можно исключить.
Доброго Вам времени суток, дорогие любители логических игр. В этой статье я хочу изложить основные методы, способы и принципы решения судоку. На нашем сайте представлено множество видов данной головоломки, а в будущем несомненно будет представлено ещё больше! Но здесь рассмотрим только классический вариант судоку, как основной для всех остальных. И все приёмы, изложенные в данной статье, будут также применимы и ко всем прочим видам судоку.
Одиночка или последний герой.
И так, с чего начинается решение судоку? Не важно простого уровня сложности или нет. Но всегда в начале идёт поиск очевидных клеток для заполнения.
На рисунке показан пример одиночки - это цифра 4, которую смело можно поставить на клетку 2 8. Так как шестая и восьмая горизонтали, а также первая и третья вертикали, уже четвёркой заняты. Они показан стрелками зелёного цвета. И в левом нижнем малом квадрате у нас остаётся только одна незанятая позиция. На картинке цифра помечена зелёным цветом. Так же расставлены остальные одиночки, но без стрелок. Они окрашены в синий цвет. Таких одиночек может быть довольно много, особенно если цифр в начальном условии много.
Различают три способа поиска одиночек:
- Одиночка в квадрате 3 на 3.
- По горизонтали
- По вертикали
Конечно можно хаотично просматривать и выявлять одиночек. Но лучше придерживаться какой-либо определённой системы. Самым очевидным будет начинать с цифры 1.
- 1.1 Проверить квадраты, где нет единицы, проверить горизонтали и вертикали, которые пересекают данный квадрат. И если в них уже стоят единички, то исключаем полностью линию. Таким образом ищем единственное возможное место.
- 1.2 Далее проверяем горизонтали. В каких присутствует единичка, а где нет. Проверяем в малых квадратах, в которые входит данная горизонталь. И если в них присутствует единичка, то пустые клетки данного квадрата исключаем из возможных кандидатов на искомую цифру. Так же проверим все вертикали и исключим те, в которых так же присутствует единичка. Если остаётся единственное возможное пустое место - то ставим искомую цифру. Если осталось два и более пустых кандидатов, то оставим данную горизонталь, переходим к следующей.
- 1.3 Аналогично предыдущему пункту проверяем все горизонтали.
"Скрытые единицы"
Ещё подобную методику называют "а кто, если не я?!" Посмотрите на рисунок 2. Поработаем с левым верхним малым квадратом. Сначала пройдёмся первым алгоритмом. После чего удалось выяснить, что в клетке 3 1 есть одиночка - цифра шесть. Ставим её, А во все остальные пустые клетки проставим мелким шрифтом все возможные варианты, применительно к малому квадрату.
После чего мы обнаруживаем следующее, в клетке 2 3 может стоять только одна цифра 5. Конечно в данный момент пятёрка может стоять и на других клетках - этому ничто не противоречит. Это три клетки 2 1, 1 2, 2 2. Но в клетке 2 3 цифры 2,4,7, 8, 9 стоять не могут, так как они присутствуют в третьей строке или во втором столбце. Исходя из этого мы с полным правом ставим цифру пять на это клетку.
Голая пара
Под это понятие я объединил несколько видов решения судоку: голая пара, тройка и четвёрка. Это сделано в связи с их однотипностью и различия лишь в количестве задействованных цифр и клеток.
И так, давайте разберёмся. Посмотрите на рисунок 3. Здесь мы обычным способом проставляем мелким шрифтом все возможные варианты. И подробно рассмотрим верхний средний малый квадрат. Здесь в клетках 4 1, 5 1, 6 1 у нас получился ряд одинаковых цифр - 1, 5, 7. Это голая тройка в истинном виде! Что это нам даёт? А то, что только в этих клетках будут расположены эти три цифры 1, 5, 7. Таким образом мы можем в среднем верхнем квадрате на второй и третьей горизонтали исключить эти цифры. Так же в клетке 1 1 мы исключим семёрку и сразу же ставим четыре. Так как других кандидатов нет. А в клетке 8 1 мы исключим единицу, насчёт четвёрки и шестёрки следует подумать дальше. Но это уже иная история.
Следует сказать, что выше рассмотрен только частный случай голой тройки. На самом деле комбинаций цифр может быть множество
- // три числа в трех ячейках.
- // любые комбинации.
- // любые комбинации.
Скрытая пара
Этот способ решения судоку позволит сократить количество кандидатов, и даст жизнь другим стратегиям. Посмотрите на рисунок 4. Средний верхний квадрат как обычно заполнен кандидатами. Цифры записаны мелким шрифтом. Зелёным цветом выделены две клетки - 4 1 и 7 1. Чем они нам примечательны? Только в этих двух клетках имеются кандидаты 4 и 9. Это и есть наша скрытая пара. По большому счёту она такая же пара, как и в пункте третьем. Только в клетках имеются и другие кандидаты. Вот этих других можно смело вычеркнуть с этих клеток.
Решение судоку - процесс творческий. Правила головоломки очень просты, хотя логические рассуждения во время поиска решения могут быть разной степени сложности. Опыт приходит только со временем, и каждый игрок разрабатывает собственную стратегию. А чтобы вы могли лучше ориентироваться в способах решения головоломок и вошли во вкус, представляем некоторые рекомендации.
Начните решение с единицы.
1. Сначала "осмотритесь" на игровом поле, отыскав все ячейки с цифрой "1".
2. Проверьте последовательно каждый из блоков 3х3, содержит ли он уже единицу. Если содержит, рассмотрите следующий.
3. Если единицы в блоке еще нет, попробуйте найти все ячейки внутри этого блока, в которых могла бы стоять единица. Не забывайте о правиле: каждая цифра может стоять в каждой строке, в каждом столбце и каждом блоке только один раз. Исключите из рассмотрения все ячейки блока, в которых цифра "1" не может находиться, потому что столбец или строка уже "заняты". Вполне вероятно, что найдется такой блок, в котором останется всего одна клетка, в которой может находиться единица. Впишите ее.
4. Если вы не уверены в однозначности решения, лучше оставить этот блок и попробовать с другим. Подходящий блок найдется обязательно.
После того как вы "пройдете" все блоки с цифрой "1", повторите поиск с другим числом. Например с двойкой. Потом с тройкой и так далее. До тех пор, пока вы не проверите все цифры от 1 до 9. И вы увидите, что заполнили уже много клеток. После чего советуем повторить всю "процедуру" еще раз с самого начала - снова от 1 до 9. Во второй раз дело пойдет легче, потому что многие клетки уже заполнены. И там, где вы сомневались, можно уверенно вписать цифру.
Пользуясь рекомендациями, решить простую головоломку не составит большого труда. По своему опыту мы знаем, что люди, легко решающие простые судоку, могут испытывать трудности со сложными. По этому рассмотрим подробно решение одной из задач.
Для удобства объяснения будем использовать нумерацию строк, столбцов и блоков 3х3 от 1 до 9. Порядок нумерации: слева - направо и сверху - вниз.
Обозначения:
1. Серый блок, строка или столбец - это "зона", которую анализируем в поисках решения;
2. Выделенная "жирная" цифра(синего цвета) - искомая цифра, найденная в процессе анализа;
3. Линии показывают, что по этому направлению не может быть поставлена цифра, от которой эта линия начинается.
Находим цифру "1" во 2-м блоке. Линии, идущие от единиц 5-го и 8-го блоков, перечеркивают остальные пустые клетки.
Находим цифру "1" в 4-м блоке. Для этого снала определим, где в 6-м блоке могут быть единицы, проводя линии от единиц 5-го и 9-го блоков - две единички в верхнем ряду. Уже от них проводим линию в сторону 4-го блока и линию от единицы 5-го блока.
Поиск возможных двоек не увенчался успехом, но можно найти тройку в 9-м блоке, проведя линии от троек в 3-м и 6-м блоках. Не нашлись варианты и для цифр "4", "5", "6", "7". А вот цифра "8" нашлась в 8-м квадрате: линии от восьмерок 2-го, 5-го и 7-го блоков. Девятка тоже не нашлась.
Начнем новый поиск единиц. Нашлась единица в первом блоке: линии от единиц во 2-м и 9-м блоках определили возможные положения единицы в 3-м блоке, от них линии потянулись в 1-й блок. Остальные линии видны на рисунке. Следующая единица нашлась в блоке 7.
Первая двойка нашлась в блоке 4, после чего там же определилась и первая пятерка. Цифры "3", "4", "6", "7" найдены не были.
Цифра "8" блока 1 определяется по линиям от восьмерок из блоков 4 и 7. Затем найдем девятку 9-го ряда: так как ее не может быть в блоках 7 и 8 (см. линии от соответствующих девяток), то она стоит в блоке 9.
Цифра "9" в 1-й строке: ее не может быть в блоке 2, значит она в блоке 3. В оставшуюся клетку строки вписываем "5". Две цифры "9" нашлись в блоках 5 и 6. Начинаем опять с цифры "1".
Первой нашлась четвертка 6-го блока. Затем четверка 5-го столбца - она не может быть в 4-й и в 7-й строке. Тройки не может быть в 7-й строке, значит она в 4-й. Тогда в оставшейся ячейке шестерка.
В следующем шаге очередь не обязательна: сначала находим восьмерку, а затем единицу в блоке 6, или наоборот.
Продолжаем расставлять восьмерки: сначала находим "8" в блоке 9, а от нее ведем линию, определяя восьмерку в блоке 3.
Следующими нашлись цифры "1" и "6" в блоке 3, очередность нахождения не принципиальна.
Затем определимся с цифрой "7" в 9-м столбце: ее не может быть в блоке 6, тогда она во 2-й строке. От пятерки в блоке 1 проводим линию - находим место цифре "5" в 3-м блоке. В свободную клетку вписываем последнюю цифру - "2".
Во втором ряду находим цифру "2", затем "4" и, наконец "9".
Затем находим цифру "4" в блоке 8. В оставшейся клетке - "7". Ведем от нее линию вверх до блока 5 - новая семерка. В незаполненной клетке 9-й строки - "7".
Найдем последовательно цифры "5", "2", "6" в блоке 5 и цифры "7", "3" в 6-м ряду. Затем получим "5" и "6" в 6-м блоке. Последняя цифра "6" в 4-м блоке.
Следующие "7" и "3" в 1-м блоке; цифры "7" и "2" в 7-м столбце и "5" в блоке 9. Анализируем 7-ю строку, 2-й столбец и расставляем сначала "9", затем "3" и "2". Последний штрих - "4" и "6".
Решение закончено.
В очень сложных задачах встречается еще один прием. Его используют, когда никак не получается вычислить единственный ход. Есть как минимум две клетки для одной цифры в блоке (строке/столбце). Перебирать в уме все последствия от выбранной наугад позиции чрезвычайно трудно. Тогда следует цифру вписать наугад, но карандашем. При этом единственные варианты можно сразу вписывать шариковой ручкой. Если через несколько ходов обнаруживается ошибка, например, какую либо цифру вписать в блок невозможно - нет подходящего места, то весь карандашный вариант стирается и в начальных клетках вписывается второй вариант. Еще можно использовать запись в клетках всех возможных цифр на данный момент, это помогает быстрее ориентироваться в поиске решения. В любом случае начинайте с легких головоломок и успехов вам!