![]() |
![]() |
Lapp |
![]()
Сообщение
#1
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Кто знаком с игрой Судоку?
Она появилась не очень давно, несколько лет назад. Я не знаю, насколько она сейчас распространена в России, поэтому рассказываю подробно (извините, если это излишне). По смыслу и по виду напоминает кроссворд, но в отличие от него она не буквенная, а цифровая. Хотя, цифры там используются только как значки - никаких операций над ними (сложения и т.п.) не проводится. Говорят (и я охотно этому верю), что она прежде всего завоевала популярность в Японии, потому что бедные японцы, ввиду особенностей своей письменности, лишены возможности разгадывать кроссворды - хотя появилась она на Западе. Если сейчас зайти в любой книжный, то прямо у дверей увишь специальный стенд, на котором стоит десятка два-три как тонких так и очень толстых книг с этими головоломками.. Игра довольно тупая, но видя такой бешеный успех за короткое время, я заинтересовался ей. А тут ее стали еще публиковать в университетской газете - не попробовать я просто не мог ![]() ![]() Теперь о правилах. Поле представляет собой квадрат 9х9 клеток (поделенный еще и на подквадраты 3х3), в некоторых из которых уже стоят циферки, а в остальные их нужно вписать. В результате в каждой клетке должно стоять по цифре от 1 до 9 (ноль не участвует!), причем так, чтобы в любом столбце и в любой строчке присутствовали все девять цифр. Более того, в каждом подквадрате тоже должны быть все цифры, каждой по одной. Правила очень простые. Существуют несколько методик решения, стратегий и тактик, которые разжевываются в книжках, но суть от этого не меняется. Ниже я привожу фото из университетской газеты (Bruin Daily, Apr 18, 2006), чтобы те, кто не видел, поимели представление. ![]() Ниже идет текст программы, которая решает головоломку. Алгоритм такой - берем перекрестье каждой строки с каждым столбцом, и смотрим набор цифр, который они содержат. Если в нем не хватает ровно одной цифры - вписываем ее в пересечение. Могут быть и другие алгоритмы, это лишь один из возможных. Одним шагом считается полный проход по полю, если за шаг находятся несколько таких цифр - ставятся все. Если не будет найдено ни одной, программа выдаст сообщение "множественный выбор" и остановится. Смысл в том, что нужно пробовать несколько разных вариантов. Я предлагаю народу попробовать и, может быть, предложить свои алгоритмы. Код не вычищен, прошу извинить за огрехи. Но он работает (проверено на FPC и TP). Программа требует наличие файла sudoku.dat - он текстовый, это просто построковая запись квадрата, я прилагаю образец ниже. ![]() Вот образец содержимого файла sudoku.dat. Важно: файл позиционный, то есть цифры сдигать нельзя. Более того, в строчке должны обязательно присутствовать все девять знаков (цифры и пробелы) - закрасьте приведенный пример блоком, чтобы увидеть пробелы, присутствующие там. Цифра обозначется цифрой, пустое место - пробелом или любым знаком (не цифрой или нулем). Лишних пробелов тоже быть не должно! 8 2 ВОт и все ![]() Кому понравилось - откликайтесь. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
Game-lord |
![]()
Сообщение
#2
|
![]() Группа: Пользователи Сообщений: 6 Пол: Мужской Репутация: ![]() ![]() ![]() |
Хотите расскажу как генерировать карты, которые в любом случае будут иметь решение?? Может я щас допущу ошибку, но я давно программил и это как я помню, и так начнём:
Для начала заполните массив следующим образом: 123456789 234567891 345678912 456789123 567891234 678912345 789123456 891234567 912345678 Далее берем первые три столбца и меняем их местами между собой три раза(надеюсь я правильно помню). Потом делаем так же с столбцами 4-6 и 7-9. Потом начинаем делать тоже самое с строками...ну вот и всё. Я к сожалению не уверен что я всё правильно помню, так что если чего поправьте меня плиз! Сообщение отредактировано: Game-lord - 26.05.2007 17:58 -------------------- |
wingman |
![]()
Сообщение
#3
|
Гость ![]() |
Далее берем первые три столбца и меняем их местами между собой три раза(надеюсь я правильно помню). Потом делаем так же с столбцами 4-6 и 7-9. Потом начинаем делать тоже самое с строками...ну вот и всё. Я к сожалению не уверен что я всё правильно помню, так что если чего поправьте меня плиз! По моему даже не имеет значение какие строки и столбики мы меняем местами, и в каком порядке тоже. Важно то, что числа можно менять только строками или столбиками. |
Lir |
![]()
Сообщение
#4
|
Гость ![]() |
По моему даже не имеет значение какие строки и столбики мы меняем местами, и в каком порядке тоже. Важно то, что числа можно менять только строками или столбиками. Имеет. Столбцы и строки можно перемещать только внутри групп (1-3, 4-6, 7-9), в которых они стоят, иначе может статься так, что в блоке 3х3 окажется повторяющаяся цифра. Кстати, карта, предложенная Game-lord нарушает это правило. Для того, чтобы данный алгоритм работал первоначальная матрица должна быть верна. Но нужно сразу сказать сам по себе такой способ генерации дает очень малое разнообразие карт. |
![]() ![]() |
![]() |
Текстовая версия | 18.06.2025 21:28 |