Моя попытка сформулировать этот вопрос , но с более объективным критерием решения.
Ваша задача состоит в том, чтобы создать программу или функцию, которая использует решенную сетку Судоку S
в выбранном вами формате и пытается создать сетку проблем с как можно меньшим количеством подсказок, которые имеют S
уникальное решение. (Неважно, какой метод S
является уникальным решением, включая грубую силу, если решение уникально доказуемо.)
Ваша программа будет оценена путем запуска ее через набор из 100 000 сеток решений, найденных в этом файле (загрузка 7,82 МБ), и суммирования количества подсказок во всех 100 000 сеток проблем, которые создает ваше решение.
Решения судоку в приведенном выше тестовом файле выражаются в виде строки из 81 символа слева направо, затем сверху вниз. Код, необходимый для преобразования входных данных в тестовом файле в пригодное для использования решение, не будет учитываться в счетчике байтов вашего решения.
Как и в моей задаче Flood Paint , ваша программа должна выдавать действительный вывод для всех 100 000 головоломок, чтобы считаться верным решением. Программа, которая выводит наименьшее общее количество подсказок для всех 100 000 тестовых случаев, является победителем, с более коротким кодом, разрывающим связь.
Текущее табло:
Ответы:
C - 2,361,024
2,509,949подсказокУдалите подсказки, начиная с последней ячейки, если решатель грубой силы находит только одно уникальное решение.
Вторая попытка: используйте эвристику, чтобы решить, в каком порядке удалять ключи, а не начинать с последней. Это заставляет код работать намного медленнее (20 минут вместо 2 для вычисления результата). Я мог бы сделать решатель быстрее, поэкспериментировать с другой эвристикой, но пока это подойдет.
источник
Python - 7 200 000 подсказок
Как обычно, вот последнее эталонное решение:
Удаление нижнего ряда чисел доказуемо оставляет головоломку разрешимой во всех случаях, так как в каждом столбце по-прежнему заполнено 8 из 9 чисел, а каждое число в нижнем ряду - просто девятое число, оставшееся в столбце.
Если любому серьезному сопернику удастся юридически забить хуже, чем этот, я буду удивлен.
источник
Python 2 - 6 000 000 подсказок
Простое решение, которое использует 3 распространенных метода решения этих головоломок:
Эта функция производит форматы подсказки как это:
Это всегда можно решить. Сначала решаются 4 части 3х3, затем 8 столбцов, затем 9 строк.
источник
PHP - 2 580 210 подсказок
Сначала удаляется последняя строка и столбец, а также нижний правый угол каждого поля. Затем он пытается очистить каждую ячейку, пропуская доску через простой решатель после каждого изменения, чтобы убедиться, что плата все еще однозначно разрешима.
Большая часть кода ниже была изменена из одного из моих старых ответов .
printBoard
использует 0 для пустых ячеек.источник