Добавление другого ответа для создания судоку желаемой сложности на лету.
Это означает, что в отличии от других подходов алгоритм работает только один раз и возвращает конфигурацию судок соответствия желаемой трудности (с высокой вероятностью в пределах диапазона, или с вероятностью = 1)
различных решений для генерации (и рейтинг), трудности с судоку связаны с human-based techniques and approaches, что может быть легко оценено.
Тогда один (после того, как генерируется конфигурация судок) повторных решает Судок с подобными человеческим решателем и в зависимости от методов, используемых решателей (например пары, крестокрыля, меча и т. д.) также задан уровень сложности.
Проблема с этим подходом (и требование для случая использования я имел)
Для того, чтобы генерировать судок с данной трудностью, с предыдущим методом один должен решить судок дважды (один раз с основным алгоритмом и один раз с человекоподобным решателем).
Нужно (до) генерировать много судоку, которое может быть оценено только с точки зрения сложности после решения человеком-подобным решателем. Таким образом, невозможно создать желаемую судоку на лету.
Человекоподобный решатель может быть сложным и в большинстве случаев (если не все) плотно связан с сетками судоку 9x9. Поэтому нет простого обобщения на другие судокусы (например, 4x4, 16x16, 6x6 и т. Д.)
Оценка сложности человекоподобных методов очень субъективна. Например, почему x-wing принято сложнее, чем скрытых синглов? (Персонально были решены многие сложные опубликованных судоку Мануалы и никогда не использовали такие методы)
Другой подход был использован, который имеет следующие преимущества:
- хорошо обобщается на произвольное судоку (9x9, 4x4, 6x6 , 16x16 и т. Д.)
- Конфигурация sudoku с желаемой трудностью генерируется один раз и на лету
- Оценка сложности является объективной.
Как это работает?
Прежде всего, простой факт, что чем сложнее головоломка, тем больше времени нужно решить..
Но время, которое нужно решить, тесно связано как с количеством ключей (givens), так и с обычными альтернативами, которые должны быть исследованы на пустую ячейку.
Расширение Мои previous answer, было отмечено, что для любого судоку головоломки минимальное количество ключей является объективным свойством головоломки (например for 9x9 grids the minimum number of clues for having a valid sudoku is 17)
можно начать оттуда и вычислить минимальное количество ключей на трудности уровень (линейная корреляция).
Далее на каждом шаге процесса генерации судоку, можно убедиться, что средние альтернативы (должны быть исследованы) в пустой ячейке находится в пределах заданных границ (в зависимости от желаемой сложности)
В зависимости от того алгоритма использует backtrack или нет (для варианта использования, обсуждаемого алгоритмом, нет возврата) желаемая трудность может быть достигнута либо с вероятностью = 1, либо с высокой вероятностью в пределах (соответственно).
Испытания судокуса, сгенерированного с помощью этого алгоритма и оценки сложности, основанные на предыдущих подходах (человекоподобный решатель), показывают корреляцию желаемых и оцененных уровней сложности, а также большую способность к обобщению на произвольные конфигурации судоку.
(использовали этот интернет-sudoku solver (а также this one) соотносить ставки сложности тестового судоку)
код доступен бесплатно on github sudoku.js (along with sample demo application), уменьшенная версия CrossWord.js профессиональный кроссворд строитель в JavaScript, одним и тем же автором
Нет, никогда не было ничего подобного. Отчасти дело в том, что «трудность» очень относительна. – Mat
Я не считаю, что это возможно. Единственный метод, о котором я знаю, - это делать, как вы говорите, генерировать, оценивать, выкидывать, если диапазон внешних затруднений. Кроме того, как сказал Мат, трудно измерить сложность, поскольку разные алгоритмы решают разные способы. – Ryan
Я понимаю это, но «генерировать, оценивать, отбрасывать, генерировать скорость, отбрасывать, генерировать, сохранять» идея кажется дико неэффективной. Кроме того, глядя на все игры, которые имеют возможность создать головоломку судоку с трудом (например, легкая, медная, тяжелая), кажется, делают это за долю секунды, не кажется очень вероятным, что они делают это , Особенно на устройствах, таких как iphone или Android. – ZachLHelms