RU

Судоку

Aleks Versus Moderator 09.09.2011 08:41 15 comments 12701 views

Старая добрая девятизначная Судоку

Что умеет: генерировать случайное поле 9х9 по правилам судоку, проверять правильность заполнения по правилам судоку, скрывать указанное количество значений и выводить готовую задачу судоку. Выводимое судоку можно решать, попутно проверяя правильность решения. При проверке решения, программа указывает в какой строке или в каком столбце обнаружена ошибка (графическая подсветка).

Чего не умеет: решать судоку (умеет абсолютно правильно заполнять задачу с единственно возможным вариантом решения);

Сейчас идёт проверка на ошибки и чистка кода. Сырой вариант здесь Судоку 2.5.

На 27.09.11: добавлена подсветка неверно заполненных столбцов, строк, ячеек; добавлены разделители для блоков 3х3; добавлена возможность сбрасывать неверно решенную задачу в первоначальный вид.

На 19.12.11: Добавлен алгоритм генерирующий задачу с единственно возможным вариантом решения (порядка 40 скрываемых значений). Добавлен алгоритм, генерирующий задачу, похожую на задачу, составленную человеком (порядка 50 скрываемых значений. Решается. Трудно, но решается).
На 31.12.11: Исправлена ошибка в алгоритме, генерирующем задачу, похожую на задачу, составленную человеком. Почищен код, удалены лишние локации и комментарии.

2023.12.21: Генератор адаптирован для qSpider. Играть онлайн
Ссылка на последнюю версию обновлена.

Edited at 21.12.2023 09:07 (2 years ago)

Найс, но 15 кб можно и на сайт выкладывать, зачем сразу на народ?

Aleks Versus Moderator 09.09.2011 16:43 (14 years ago)

Просто я сначала на своем сайте выложил. К чему делать ещё одну копию, если можно просто ссылку опубликовать.

Хорошие Судоку. Сетка между 3х3 квадратами не помешала бы для удобства восприятия.

Aleks Versus Moderator 14.09.2011 17:00 (14 years ago)

Vladislav,
да, спасибо. Эта мысль изначально обитает в моём мозгу. Думаю в скором времени сетка появится. Сейчас добиваю подсветку ошибок, заодним сделаю и её.

Aleks Versus, будет здорово! :D

Aleks Versus Moderator 26.09.2011 20:08 (14 years ago)

Наконец-то собрался и забил подсветку, сетку, функцию сброса. Обновленный вариант в первом посте.

Теперь это полноценные Судоку. Наверное, сделать меньше открытых клеточек в начале игры - было бы хорошо, а то слишком легко решаются.

Aleks Versus Moderator 08.10.2011 05:26 (14 years ago)

Vladislav:

Наверное, сделать меньше открытых клеточек в начале игры - было бы хорошо, а то слишком легко решаются.

Как раз над этим я сейчас работаю. Сложное, но решаемое судоку, похожее на составленное человеком. А изменить количество скрываемых клеток просто: в локации step5 во второй строке исправить numbercount=27, например, на numbercount=39. Правда чем больше скрываемых клеток, тем больше вероятность, что у судоку будет не одно решение. Пока что клетки закрываются в случайном порядке.

Спасибо.

Aleks Versus:

Правда чем больше скрываемых клеток, тем больше вероятность, что у судоку будет не одно решение

Это как-то связано с механизмом проверки?

Aleks Versus Moderator 09.10.2011 17:04 (14 years ago)

Vladislav:

Это как-то связано с механизмом проверки?

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

Я считаю, такой механизм лучше всего, - не возникнет недоразумений “все верно заполнил, а программа находит ошибку”.

Думаю, что создание поля похожее на созданное человеком, связано с задачей решения.
Поскольку сразу можно будет проверять одно решение или несколько.
А также оставлять “мостики” для решения, клетки без которых решений сразу становится несколько.

Aleks Versus Moderator 20.10.2011 21:59 (14 years ago)

Ntropy:

Поскольку сразу можно будет проверять одно решение или несколько.

Да. Так и есть. Алгоритм прост. Но… как бы сказать… лишен изящности что ли. Если не придумаю ничего другого, добью на этом, и пусть пока будет так.

Aleks Versus:

Ntropy:

Поскольку сразу можно будет проверять одно решение или несколько.

Да. Так и есть. Алгоритм прост. Но… как бы сказать… лишен изящности что ли. Если не придумаю ничего другого, добью на этом, и пусть пока будет так.

Сам алгоритм решения и не должен решать подобно человеку, это просто обратная связь. А что бы путь решения был подобен человеческому, нужно добавить немного случая и чуть чуть интуиции :).

Aleks Versus Moderator 31.12.2011 07:31 (14 years ago)

Итак. Генератор судоку умеет создавать три варианта задач:
1. Задача со скрытием случайных элементов (программно указано количество скрываемых элементов - 27)
2. Задача с единственно возможным вариантом решения (порядка 40 элементов)
3. Задача похожая на задачу, составленную человеком (порядка полуста элементов)

Код почищен, ошибки по большей части исправлены, все три вида задач прорешены вручную по нескольку раз. В задачах, похожих на человечьи, нередко наблюдается появление второго правильного варианта решения.

Log in or Register to post comments.