Xy wing в судоку что такое шаблон
X-wing (Судоку)
Резюме
Принцип
Этот метод позволяет отсеивать потенциальных кандидатов в нескольких ящиках. Для его применения должно быть выполнено одно из следующих двух условий:
Путем разделения случаев можно исключить кандидатов, которые появляются на краях прямоугольника, образованного пересечениями между этими строками и этими столбцами.
Первая ступень
Первый шаг состоит в идентификации ящиков, удовлетворяющих ограничениям. В приведенном ниже примере выполняется второе ограничение.
У нас есть номер 9, который является кандидатом в двух отдельных столбцах, которые разделяются двумя отдельными строками. Ни в одной другой строке нет числа 9 в качестве кандидата в первом и последнем столбце.
Второй шаг
Второй шаг основан на наблюдении, что если мы выберем число «9» для верхнего левого поля, то верхнее правое поле не может быть цифрой «9» по правилам судоку. То же самое и с окном внизу слева. Мы знаем, что кандидаты «9» невозможны в верхнем ряду и левом столбце. Поскольку поле в правом нижнем углу содержит 9 или 8, мы знаем, что 9 обязательно находится в этом поле.
Мы меняем ситуацию с цифрой 9 справа и наблюдаем тот же результат, но в обратном порядке.
Третий шаг
В обеих возможных ситуациях наличие «9» в строках и столбцах, которые находятся на краях прямоугольника (за исключением четырех прямоугольников, используемых для анализа), несовместимо с правилами судоку. Таким образом, мы можем исключить невозможную «9».
XY-Wing
An XY-Wing is a solving technique that uses a short chain of 3 cells.
The cell in the center is called the pivot. The other 2 cells are the pincers.
The chain uses only 3 digits, symbolically named X, Y and Z. Any 3 digits can replace these letters. The pivot contains candidates XY, which explains the name of this technique. The pincers have candidates XZ and YZ.
Any cell that can see both pincers can not longer contain a candidate for digit Z, because the pivot forces either of the pincers to contain this digit.
Subtypes
Although the logic behind the XY-Wing is always the same, subtypes have been introduced to help players to recognize these patterns more easily.
Type 1 (box-line)
One of the pincers shares a row or column with the pivot, the other shares a box. Up to 5 eliminations are possible in this formation.
Type 2 (row-column)
One of the pincers shares a row with the pivot, the other shares a column. Only one elimination can be made.
Chain Notation
An XY-Wing is a short chain. You can write it like this in Eureka notation:
(Z=Y)r6c1-(Y=X)r4c1-(X=Z)r4c8
In Nice Loop notation, you must include the cell(s) with the eliminated candidates to complete the loop:
[r6c789]-Z-[r6c1]-Y-[r4c1]-X-[r4c8]-Z-[r6c789] => [r6c789]<>Z
Example
You can eliminate candidate «3» (Z) from all cells seen simultaneously by both pincers, in this case R2C1. The other possible cells involved are R3C1, R7C2, R8C2 and R9C2 but none of them have a «3» as candidate.
Как решать судоку — способы, методы и стратегия
Правила судоку
Данная головоломка занимает мало места, в отличие от сканвордов, кроссвордов и так далее. Игровое поле, состоящее из 81 квадратов, ячейки разбиты на малые блоки, размером 3*3. Его можно легко уместить на листке бумаги. Задание выглядит в виде выборочно заполненных клеток, которые необходимо дополнить значениями и заполнить всю табличку. В судоку правила игры очень просты и позволяют исключить множественные решения. В каждой строке или столбце проставляются цифры от 1 до 9. Также значения не повторяются в рамках одного малого блока.
Судоку различаются по уровню сложности, который зависит от количества заполненных числами клеток и методов решения. Обычно различают около 5 уровней, где самый сложный способны решить только настоящие мастера.
Игра в судоку имеет свои правила и секреты. Наиболее простые головоломки можно решить за несколько минут с помощью дедукции, как есть так всегда, как минимум, одна клетка, для которой подходит только одно число. Сложные судоку можно разгадывать часами. Правильно составленная головоломка имеет только один способ решения.
Правила, как разгадывать судоку
Чтобы получить верное решение, необходимо учесть несколько простых правил:
Если оба пункта учтены, значит можно быть уверенным, что ячейка заполнена верно.
Как решать судоку простые?
Рассмотрим на конкретном примере как разгадывать судоку. Игровое поле на картинке представляет собой относительно простой вариант игры. Правила игры судоку для простых сводятся к выявлению зависимостей в горизонтальной и вертикальной плоскости и в отдельных квадратах.
Например, в центральной вертикали не хватает цифр 3, 4, 5. Четверка не может находиться в нижнем квадрате, так как в нем уже присутствует. Также можно исключить пустую центральную клетку, так как мы видим 4 в горизонтальной линии. Из этого делаем вывод, что она располагается в верхнем квадрате. Аналогично можем проставить 3 и 5 и получить следующий результат.
Проведя линии в верхнем среднем малом квадрате 3*3 можно исключить ячейки, в которых не может находиться цифра 3.
Разгадывать Продолжая подобным образом, необходимо заполнить оставшиеся ячейки. В результате получается единственно верное решение.
Такой метод некоторые называют «Последний герой» или «Одиночка». Он также используется в качестве одного из нескольких на мастерских уровнях. Среднее время, затрачиваемое на простой уровень сложности, колеблется около 20 минут.
Как решать сложные судоку?
Многие задаются вопросом, как решать судоку, есть ли стандартные методы и стратегия. Как и в любой логической головоломке есть. Самый простой из них мы рассмотрели. Чтобы перейти на более высокий уровень, необходимо иметь больший запас времени, усидчивость, терпение. Для решения головоломки придется делать предположения и, возможно, получать неверный результат, возвращающий к месту выбора. По сути судоку сложные – это как решать задачу с помощью алгоритма. Рассмотрим несколько популярных методик, применяемых профессиональными «судокуведами» на следующем примере.
В первую очередь необходимо заполнить пустые ячейки возможными вариантами, чтобы максимально облегчить решение и иметь перед глазами полную картину.
Ответ, как решить судоку сложные для каждого свой. Кому то удобнее использовать разные цвета для окрашивания ечеек или цифр, кто то предпочитает черно-белый вариант. На рисунке видно, что нет ни одной ячейки, в которой бы стояла единственная цифра, однако, это не говорит о том, что в данном задании нет одиночек. Вооружившись правилами судоку и внимательным взглядом, можно увидеть, что в верхней строке среднего малого блока стоит цифра 5, которая встречается единожды в своей линии. В связи с этим можно смело проставить ее и исключить из ячеек, окрашенных в зеленый цвет. Данное действие повлечет за собой возможность проставить цифру 3 в оранжевой клетке и смело вычеркнуть ее из соответствующик фиолетовых по вертикали и малом блоке 3*3.
Таким же образом проверяем остальные клеточки и проставляем единицы в обведенных клетках, так как они также являются единственными в своих строках.
Чтобы разобраться, как решать судоку сложные, необходимо вооружиться несколькими простыми методами.
Метод «Открытые пары»
Чтобы очистить поле дальше, необходимо найти открытые пары, которые позволяют исключить имеющиеся в них цифры из других ячеек в блоке и строках. В примере такими парочками являются 4 и 9 из третьей строки. Они наглядно показывают, как разгадывать сложные судоку. Их комбинация говорит о том, что в данных клетках могут быть проставлены исключительно 4 или 9. Этот вывод делается на основании правил судоку.
Из выделенных зеленым ячеек можно удалить значения синих и тем самым сократить количество вариантов. При этом располагающаяся в первой строке комбинация 1249 называется по аналогии «открытой четверкой». Также можно встретить «открытые тройки». Такие действия влекут за собой появление других открытых пар, например 1 и 2 в верхней строке, которые также дают возможность сузить круг комбинаций. Параллельно проставляем в обведенной ячейке первого квадрата 7, так как пятерка в данной строке в любом случае будет располагаться в нижнем блоке.
Метод «Скрытые пары/тройки/четверки»
Данный метод является противоположным к открытым комбинациям. Его суть заключается в том, что необходимо найти ячейки, в которых повторяются цифры в рамках квадрата/строки, не встречающиеся в других клеточках. Как это поможет разгадывать судоку? Прием позволяет вычеркнуть остальные цифры, так как они служат фоном и не могут быть проставлены в выбранные клетки. Данная стратегия имеет несколько других названий, например «Ячейка не резиновая», «Тайное становится явным». Сами имена объясняют суть метода и соответствие правилу, говорящему о возможности проставить единственную цифру.
Примером могут служить окрашенные в голубой цвет клетки. Цифры 4 и 7 встречаются исключительно в этих ячейках, поэтому остальные можно смело удалить.
Подобно действует система сопряжения, когда можно исключить из ячеек блока/строки/столбца значения, несколько раз встречающееся в соседнем или сопряженном.
Перекрестное исключение
Принцип того, как разгадывать судоку, заключается в умении анализировать и сопоставлять. Еще одним способом исключить варианты является наличие какой-либо цифры в двух столбцах или строчках, которые пересекаются между собой. В нашем примере подобной ситуации не встретилось, поэтому рассмотрим другой. На картинке видно, что «двойка» встречается во втором и третьем среднем блоке единожды, при комбинации чем связаны, и взаимоисключают друг друга. Исходя из этих данных, цифру 2 можно удалить из других ячеек в указанных столбцах.
Также можно применять для трех и четырех строк. Сложность метода заключается в трудностях визуализации и выявления связей.
Метод «Сокращение»
В результате каждого действия количество вариантов в ячейках сокращается и решение сводится к методу «Одиночка». Этот процесс можно назвать сокращением и выделить в отдельный метод, так как он предполагает тщательный анализ всех строк, столбцов и малых квадратов с последовательным исключением вариантов. В итоге мы приходим к единственному решению.
Цветовой метод
Данная стратегия мало отличается от описанной, и заключается в цветовой индикации ячеек или цифр. Способ помогает визуализировать весь ход решения, однако, подходит не всем. Некоторых расцветка сбивает и мешает сосредоточиться. Чтобы грамотно использовать гамму, необходимо выбрать два-три цвета и окрашивать в них одинаковые варианты в разных блоках/линиях, а также спорные ячейки.
Чтобы разобраться, как решать судоку, лучше вооружиться ручкой и бумагой. Такой подход позволит натренировать голову, в отличие от использования электронных алгоритмов с наличием подсказок. Команда BrainApps рассмотрела несколько наиболее популярных, понятных и действенных методик, однако, существует множество других алгоритмов. Например, метод «Проб и ошибок», когда выбирается пробный вариант из двух или трех возможных и проверяется вся цепочка. Недостатком данной методики является необходимость использовать компьютер, так как на листке бумаги к исходному варианту вернуться не так просто.
Как разгадывать классические судоку любой сложности
Первое судоку в жизни почти всегда кажется сложным, и это обстоятельство отвращает некоторых от разгадывания подобных головоломок. Если разобраться в правилах игры и выбрать судоку, соответствующее опыту и знаниям, сложности останутся в прошлом, и вы сможете перейти к сложным и очень сложным судоку.
Какие-то закономерности можно выявить самостоятельно, а с основными принципами мы вас познакомим. Знатоки судоку уже разработали эффективные подходы к решению, и вы можете выбрать те, которые подойдут вам на конкретном этапе освоения игры. Но сначала необходимо договориться о терминологии.
Терминология судоку
Способы решения судоку
За годы существования судоку было разработано множество подходов к решению. Мы предлагаем несколько методов, от простого — к сложному.
1. Синглы (единственные варианты)
Синглы определяются после исключения цифр, которые уже вписаны в ряды, колонки или области. Таким способом решают простые судоку.
1.1. Очевидные синглы
Если путем исключения можно выявить единственно возможное число, сингл называют очевидным.
1.2. Скрытые синглы
Число можно вписать в клетку, если другое расположение в группе невозможно. Определить такую вероятность можно после расстановки кандидатов и выявления цифры, которая больше нигде не повторяется.
2. Исключение кандидатов
Этот способ позволяет сократить число возможных кандидатов, чтобы потом можно было найти единственное правильное значение.
2.1. Сегмент 1
Если удалось определить, что число может быть вписано в единственную клетку, его исключают из кандидатов в ряду, колонке и области.
В правой верхней области 6 должно находиться в сегментах G1 или H1 (других вариантов нет — второй ряд и третья колонка заняты), поэтому цифру можно исключит из кандидатов для клетки С1.
2.2. Сегмент 2
Если число может находиться только в одной области, его нужно исключить из кандидатов в других клетках.
3. Группы кандидатов
3.1. Очевидные группы кандидатов
Если в группе кандидатов есть две клетки с одинаковыми парами, эти кандидаты не могут находиться в других клетках ряда, колонки или области.
Три клетки группы не обязательно должны содержать все числа трио — в этих клетках не может быть других кандидатов.
Во втором ряду в клетках A, С и G имеется трио 1, 4, 6, значит, данные клетки обязательно разместят одну из этих цифр. Следовательно, 1, 4, 6 не могут занимать другое место в ряду, их присутствие можно исключить.
С квартетом дела обстоят аналогично — если четыре клетки содержат одинаковый квартет (даже в неполном составе), эти числа исключаются из других клеток группы.
Это правило распространяется на любой по численности набор кандидатов — вероятность расположения цифр в других клетках можно исключить.
Очевидные группы кандидатов позволяют исключить кандидатов из других клеток группы.
3.2. Скрытые группы кандидатов
Если несколько клеток содержат общие числа, которые не встречаются в других клетках группы, остальные кандидаты для этих клеток могут быть исключены.
В клетках A и C встречается пара 4/6. Таким образом, остальных кандидатов из этих двух клеток можно исключить — в одной из клеток обязательно разместится 4, в другой 6.
Правило относится и к очевидным трио и квартетам, при этом клетки могут не содержать все числа из трио или квартета. Рассмотреть скрытые трио и, тем более, квартеты сложно, но встречаются они нечасто.
4. Сложные методы
Сложность этих методов относится не к пониманию их сути, а к применению в решении судоку.
4.1. Связанные пары (бабочка)
Если число возможно только в двух ячейках двух рядов (4 варианта), расположены они в двух колонках и формируют прямоугольник, кандидат может быть исключен из других клеток колонки.
В переносе на колонки метод формулируется аналогично, но тогда нужно исключить кандидатов в рядах.
Например, цифра 9 для колонок B и H может находиться только во втором и восьмом рядах (фиолетовые клетки). Из остальных клеток этих рядов 9 можно исключить.
Рассмотрим колонку B. Если 9 не в B2, она может быть только в B8, для колонки H — наоборот. То есть, варианты расположения 9: B2 и H8 или B8 и H2, из остальных клеток этих рядов девятку можно исключить. Метод применим и к областям.
Этот метод может применяться к областям:
4.2. Сложносвязанные пары (рыба)
Метод похож на предыдущий, но сложнее. Его применяют, когда один из кандидатов присутствует в трех рядах (не более) и при этом — в одних и тех же трех колонках.
Из остальных рядов этих трех колонок кандидата можно исключить. Аналогично метод применяется к трем колонкам, тогда кандидаты исключаются из рядов:
2 встречается только в двух клетках колонок C, F и H. Эти клетки находятся в трех рядах — втором, четвертом и восьмом:
Из остальных клеток этих рядов 2 можно исключить.
4.3. Связанные кандидаты
Кандидаты связаны, если число возможно только в двух клетках группы, ряда, колонки или области. Если один кандидат подтвердился, второй отпадает.
Когда несколько пар связанных кандидатов соединены, число можно исключить из других клеток — число в них не появится в любом случае.
4.4. Цепочки
Метод используется, когда во многих клетках только два кандидата. Выбирая одного в начальной клетке, вы формируете цепочку выборов, которая приводит к удалению кандидата из какой-либо клетки.
Если при выборе другого кандидата в начальной клетке вы приходите к удалению того же кандидата, он может быть удален.
Например, если 3 верно в клетке B2, то выполняется цепочка заключений (красная линия):
B2 — 3, D2 — 5, E3 — 7, E5 — 8, A5 — 5, таким образом 5 не находится в A4.
Если же в B2 находится 2, тогда мы имеем (зеленая линия):
B2 — 2, B4 — 5 и опять 5 не находится в A4.
В любом случае кандидат 5 может быть исключен из клетки A4.
5. Предположения
Иногда вышеперечисленные методы не помогают продвинуться в решении. Тогда можно выбрать кандидата в клетке и посмотреть, к чему приведет такой выбор. Если рассуждения заканчиваются тупиком, тогда придется вернуться в начало и попробовать другой вариант.
Этот метод ближе к гаданию на кофейной гуще и обычно не используется при решении судоку.
Решаем судоку с помощью Алгоритма X
В этой статье рассмотрим «Алгоритм X» Кнута и его применение для решения судоку. Прелесть алгоритма в том, что судоку при этом решается быстро без программирования каких-то продвинутых техник решения.
Началось всё, собственно, с задачки из Project Euler, где, чтобы получить ответ, нужно решить 50 судоку. И вроде ответ на неё получил, написав программку для решения довольно тупым перебором, но как-то осталась неудовлетворённость скоростью решения. Посмотрев, как решают судоку нормальные люди, я обнаружил, что сейчас для этого используется Алгоритм X, придуманный тем самым Дональдом Кнутом.
Алгоритм X
Этот алгоритм решает задачу точного покрытия множества. Или, если хотите, собирает «дискретный паззл», имея в наличии информацию о форме доступных кусочков. Более формально:
Для алгоритма X Кнута множество Y представляется в виде двоичной матрицы, где строки соответствуют элементам Y, и Ai,j = 1, если Sj находится в Yi. Т.е. для примера выше:
Yi \ Sj | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
A | 1 | 1 | 0 | 0 | 0 |
B | 0 | 1 | 1 | 0 | 0 |
C | 1 | 0 | 0 | 0 | 1 |
D | 1 | 0 | 0 | 1 | 0 |
E | 0 | 0 | 0 | 0 | 1 |
Алгоритм поиска точного покрытия следующий:
В общем, ничего особо сложного. По существу — обычный поиск в глубину. Заметим, кстати, что если изначально задать стэк непустым, то задачу можно сформулировать как «найти точное покрытие, в которое входят элементы, уже лежащие на стэке».
Тонкость в том, что на практике этот алгоритм применяется для задач, где множества в Y — «маленькие», т.е. матрица весьма разреженная, из-за чего, например, поиск пересечений между столбцами при стандартном хранении в виде матрицы занимает непозволительно много времени.
Поэтому Кнут дополняет этот алгоритм механизмом «пляшущих ссылок». Матрица представляется в виде двумерного двусвязного списка: для каждой строки в списке хранятся только номера столбцов, где в этой строке содержатся единицы. Также в списке хранятся ссылки на следующий и предыдущий элемент в строке и столбце. Такая организация позволяет удалять из разреженной матрицы столбцы и строки за время O(1) по сравнению с O(m * n) при хранении в двумерном массиве.
Интересно, что Ali Assaf предлагает альтернативу механизму пляшущих ссылок с использованием ассоциативных списков, что позволяет на высокоуровневых языках реализовывать алгоритм X буквально в несколько десятков строчек.
Идея в том, чтобы хранить как столбцы, так и строки матрицы в ассоциативных списках. В столбцах храним индексы строк, на пересечении с которыми находятся ненулевые элементы, в строках — соответственно, индексы столбцов. Причём в строках будем индексы хранить упорядоченно, в массиве — заметим, что в алгоритме Кнута модифицировать строки, по существу, не требуется, поэтому оптимизация под быстрое удаление элемента из строки не нужна. А вот столбцы будут задаваться в виде множеств, т.к. при удалении строки из матрицы нужно удалить её идентификатор из всех столбцов (и при удалении его из всех столбцов — строка исчезает «сама собой»).
Рассмотрим реализацию алгоритма на Julia.
Матрица из примера будет выглядеть теперь так:
Для работы алгоритма нужна функция, вынимающая из матрицы строки, пересекающиеся с заданной, и функция, возвращающая эти строки на место.
Теперь сам алгоритм X:
Судоку
Алгоритм есть, дело за малым — представить судоку как задачу поиска точного покрытия.
Сформулируем требования, которым должно удовлетворять решённое судоку:
Каждое из этих требований должно выполняться ровно по 1 разу, т.е. они и формируют множество, которое надо покрыть. В нём ровно 4n 2 элементов (столбцов в матрице).
Подмножества, которые рассматриваем, формируются подстановкой конкретного числа в конкретную клетку. Например, число 9 на пересечении 1 строки и 4 столбца «накрывает» подмножество «в клетке (1,4) есть число, в 1 строке есть число 9, в 4 столбце есть число 9, во 2 квадранте есть число 9» (подразумевая обычное судоку 9×9).
После этого алгоритм решения пишется тривиально.
Проверим на каком-нибудь примере:
Вроде работает, и скорость приемлемая.
Надо отметить, что никаких приёмов специально для судоку (как, например, здесь или здесь) в алгоритм не закладывалось, если не считать специфического представления искомого множества и покрывающих элементов.