А какие бы вы предложили красивые варианты сгенерировать рандомное поле для
судоку?
Мне, как инженеру неголубых кровей, помимо тупого брутфорса идей никаких не приходит =)
(defun gen-field ()
(let ((field (make-array '(9 9) :initial-element 0)))
(macrolet ((cell (r c) `(aref field ,r ,c)))
(labels ((is-valid (r c
(
Read more... )
Comments 6
Reply
в пакете games под (S)XEmacs есть sudoku.el с генератором достаточно интересных судочек - http://alioth.debian.org/scm/viewvc.php/XEmacs/packages/xemacs-packages/games/sudoku.el?view=markup&root=xemacs
Reply
Reply
За пару минут придумал только два изменения:
1) поменять местами любые две строчки,
2) поменять местами любых два столбца.
Пример:
а) дано базовое поле
1 2 3
2 3 1
3 1 2
б) меняем местами два столбца
2 1 3
3 2 1
1 3 2
в) меняем местами две строчки
3 2 1
2 1 3
1 3 2
Reply
Теперь пара более сложных упражнений:
1) доказать или опровергнуть что этим способом можно получить все возможные судоку,
2) перенумеровать все возможные поля судоку и генерировать поле по номеру поля.
Reply
Все просто берется валидное поле 9х9 (можно сгенерировать простым смещением строк)
и несколько раз делается одно из действий
1. перестановка секторов (первая, вторая или третья тройка столбцов/строк)
2. транспонирование
(вроде что то еще было, но не помню)
При случайном числе обоих действий, причем в разной последовательности можно получать разные карты. Плюс если выводить случайные числа из карты - получаем еще больше вариантов. Правда бывает когда система будет иметь несколько решений (лично сталкивался с двойственностью, больше не знаю)
Reply
Leave a comment