Как сделать судоку в 1с
Рассматривается программная система для нахождения решения головоломки «Судоку» средствами языка программирования 1С. Разработанный модуль управляемого приложения выполняет поиск решения рекурсивным способом. Укрепим знания разработчика по типовым структурам данных и управляющим конструкциям
Наилучшие результаты в области творчества почти получаются, когда «автор… не был связан маркетинговыми и рекламными обязательствами… Ему ничего и никому не надо было доказывать. Он был волен использовать то, что ему нравилось…» [1].
Например, решение головоломок, связанных с классификацией, поиском и перебором, может хорошо тренировать некоторые умственные способности человека, в частности развиваются внимательность, усидчивость, умение продумывать на несколько шагов вперед.
Одной их таких головоломок является широко известная «Судоку». Эта головоломка имеет богатое прошлое, пользуется чрезвычайной популярностью, выходят тематические газеты и журналы, поддерживаются и развиваются онлайн-ресурсы, ей посвященные. Решение варианта головоломки любой сложности человеком может в некоторых случаях потребовать «опорных» решений или, говоря другими словами, подсказок. Их обеспечивают специально разработанные для получения этого программные системы.
Распространенные программы для решения этой головоломки либо поставляются с закрытым исходным кодом, либо их исходные коды слишком трудоемки для того, чтобы сходу понять происходящие в процессе решения действия.
Способ решения головоломки человеком принципиально отличается от алгоритмического в силу ограниченных человеческих счетных возможностей по сравнению с машинными. Поэтому актуальной становится задача разработки какможно более простой по исходному коду программы, которая бы позволяла найти или попытаться найти решение одного варианта головоломки «Судоку».
Вследствие того, что на предприятиях и в организациях востребована среда 1С, стоит вести разработку именно на этой платформе, доступной для многих специалистов в ИТ-области, программистов и непрограммистов. Существуют программные реализации и на других языках программирования [2].
Целью настоящей публикации является иллюстративная разработка достаточно простой программы на языке 1С для попытки получения решения головоломки «Судоку».
Программа и подпрограмма инициализации
Так же как и во многих других подобных случаях, вся программа целиком помещается в модуль управляемого приложения заведомо пустой конфигурации. Описание ее целесообразно осуществлять путем комментированного приведения строк полученного исходного текста, поскольку этот способ часто применяется в современной обучающей литературе для специалистов.
Объявляются используемые несколькими подпрограммами модуля переменные и константы:
Перем N, КодСимволаНоль, Судоку, СчЗамен, ИсхДанные;
В константе N будет хранится длина стороны поля, равная 9, в КодСимволаНоль – код нуля. В переменной Судоку – все поле для головоломки, СчЗамен – количество произведенных замен, ИсхДанные – входные данные дляфункционирования.
Процедура ИнициализацияКонстант() инициализирует константы:
В N присваивается 9, в КодСимволаНоль – код нуля.
Процедура ИнициализацияПеременных() инициализирует переменные:
Специальные предложения
Просмотры 8324
Загрузки 7
Рейтинг 4
Создание 02.12.13 15:51
Обновление 02.12.13 15:39
№ Публикации 238858
Рубрики Игры
Кому Для всех
Конфигурация Не имеет значения
Операционная система Windows
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Не указано
См. также
Каталог игр с приставок из моего детства Промо
Каталог игр Dendy, Sega, Nintendo из нашего детства.
1 стартмани
06.02.2018 18656 74 user621724_Dimav1979 37
Ханойские башни
Решение головоломки "Ханойская башня" с визуализацией в среде 1С.
5 стартмани
23.12.2019 6339 3 13vap 0
Блэк Джек
Блэк джек, написанный на платформе 1С 8.2 (обычные формы).
1 стартмани
07.10.2019 6533 1 Azamatex 2
Игра "Ван Хельсинг"
Игра "Ван Хельсинг". Интерфейс "Обычный". Аркада.
1 стартмани
03.07.2019 6045 1 Lion_LexXx 0
Сетевая игра "СловоБой" на управляемых формах Промо
СловоБой - это новый взгляд на ставшие уже классическими игры, где нужно составлять слова из букв, наподобие Балды и Эрудита. Играйте онлайн с друзьями! В игре СловоБой побеждает не тот, кто может придумать самое длинное слово, а тот, кто знаком с тактикой не понаслышке и способен использовать оптимальную стратегию.
1 стартмани
10.11.2016 21349 8 woldemarr 0
Игра "Логика"
Старая советская «Логика» для 1С УФ. Угадайте комбинацию цветов, загаданную компьютером.
1 стартмани
13.06.2019 7778 1 legenda-nsh 0
Игра в кости "1000" (сетевая)
Аналог игры в кости 1000 (классика). Работает на управляемом приложении, любой конфигурации и без неё. Тестировал на платформе 1С:Предприятие 8.3 (8.3.10.2667) и выше.
1 стартмани
07.05.2019 12999 2 APTEM_SLV 5
Игра "Арканоид" (Javascript фреймворк Phaser). HTML 5 Сanvas + WebGL. Управляемые формы (ТОНКИЙ, ТОЛСТЫЙ клиент), Обычные формы
Общеизвестная игра "Арканоид", доступная для запуска в 1с. Выполнена в виде обработки, запускаемой из папки, в которой расположены файлы проекта (html, js файла и картинки) Любые конфигурации на обычных формах, управляемых формах (Тонкий + Толстый клиент). УПП, БП 2.0, 3.0. После открытия обработки нажимаем мышью на область экрана игры, точнее, нажимаем на кнопку "СТАРТ" (области игры). Начинается игра. Управление мышью.
1 стартмани
04.05.2019 8373 5 pvlunegov 2
Игра "Самоцветы" (Bejeweled теперь и в 1С) + звук Промо
Bejeweled -Самоцветы - красивая логическая игра, смысл которой заключается собрать три и более одинаковых самоцвета (в вертикальной или горизонтальной строке). Первый клик выбираете самоцвет, второй клик выбираете место куда его переместить, перемещать можно только из соседних строк и столбцов. Развивает внимательность и память. Найденные и выбранные группы самоцветов исчезают, а на их место опускаются новые.
20.10.2010 32572 276 Tatitutu 68
Игра Змейка с автопилотом
Игра Змейка с автопилотом реализована в парадигме автоматного программирования.
1 стартмани
23.04.2019 8358 1 RonX01 17
Логическая игра "Камушки"
1 стартмани
05.04.2019 7520 0 ranis888 5
Розыгрыш к 1 апреля (№2) [Расширение] УТ11
Меняем язык надписей на формах для пользователя с помощью сервиса яндекс-переводчик.
1 стартмани
26.03.2019 7495 5 noprogrammer 1
Игра: Лабиринт для 1С (теперь и для 8.0-8.2) Промо
Игра "Лабиринт в 1С для 8 ки" неограниченное количество уникальных полей лабиринтов произвольных размеров формируется динамически (очень красивое зрелище - завораживает) Смысл игры - выбраться из Лабиринта.
1 стартмани
24.09.2010 30728 453 Tatitutu 24
Розыгрыш к 1 апреля [Расширение]
Небольшой розыгрыш к 1 апреля.
1 стартмани
19.03.2019 7447 4 noprogrammer 13
Magic 8 ball (Магический шар 8)
1 стартмани
13.03.2019 8920 7 Смешной 1С 3
Конфигурация-игра "Сто к одному" (1С + html + js + css)
(5) плюс стотыщ!
(6) это я и хотел сделать, но передумал. Если будет с открытым кодом, то посмотрю как реализовано, может что-то добавлю/уберу.
(7) спасибо!
(8) яндекс мне кривую ссылку с инфостарта дал.
(5) Здесь много ворья, которые только и шакалят по всему инету на предмет: "где бы скоммуниздить игрушку для 1С" .
(12) Тоесть, если бы ты ему эту игрушку выслал, то у тебя бы ее не осталось? Чё курим?
(14) Если ты свои разработки рассылаешь всем желающим со словами "торгуйте сколько хотите", то это твое личное дело. С какой стати ты требуешь этого от других?
(16) С чего ты решил, что я от тебя что-то требую?
Твой пост (3) в мягкой форме называет "высер". Только и всего. Живи с гордостью за это и дальше.
(17) Не надо так громко завидовать. Не можешь сам сделать - молчи в тряпочку .
(16) Надо сначала кое-что отрастить, чтобы твои поделки стал кто-то покупать, а продавать тем более.
(12) с какого перепугу ты меня вором обзываешь? не хочешь выкладывать свои разработки - ради бога!
(18) ты эта. наработки свои никому не показывай. даже за деньги. а то мало ли. еще и правда, продадут кому-нить.
(22) думаю что нет. вдруг вспомнилось БиДэ. теперь терзают смутные сомнения.
(28) Не боишься, что он сейчас с тебя за эту инфрмацию денег потребует?
(31) Я понял, что это предположение :)
Но, ведь, для (18) это может оказаться вопросом. И поводом слупить бабла. Все в рамках ценностей твоего "предположения" :)
Вот уже и ворье местное оперативно подтянулось . мониторит, шакалит, работа кипит .
(32) Заделался у воров шестерить? Ну-ну .
(34) да он сам самый главный тут вор по игрушкам. ты чо, не знал?
Я так и представил эту эпическую картину. Нефернеферуатон сидит на куче гениальнейших разработок, и нервно смотрит на налетевшее ворье, которое эти разработки хочет украсть.
Анекдот про неуловимого Джо просто носится в воздухе.
(36) . некучивая цены на гениальные игрушки к рождеству и подсчитывая на большом калькуляторе барыши
Доброго времени суток!
Думаю, головоломка Судоку не нуждается в представлении. Многие из нас проводят за её решением достаточно много времени. Например, когда нужно убить время в дороге или просто поворочать мозги, чтобы не сохли. На хабре есть довольно много постов о решении головоломки. Но когда человек решает с десяток, а может и сотню головоломок, то найдётся пытливый ум, который задаст себе вопрос «А как же получается таблица Судоку, имеющая единственное решение? И как можно описать алгоритм для сетки 9x9?».
Приведённый алгоритм является вполне логичным. Но моей задачей было описание и реализация. Обо всём этом написано под катом.
- Цифра может появиться только один раз в каждой строчке
- Цифра может появиться только один раз в каждом столбике
- Цифра может появиться только один раз в каждом районе (Район — меньший квадрат со стороной 3х3, на изображении ниже выделен фиолетовым цветом)
Шаг 1. Взять за основу базовую сетку
Сетка должна подчинятся правилам Судоку. Размещаем в первую строку 1 2… 8 9, в строках ниже смещаем на 3 позиции влево, т.е. 4 5… 2 3 и 7 8… 5 6.
Далее переходя в следующий район по вертикали смещаем на 1 позицию влево предыдущий район.
В итоге должна получиться вот такая сетка, её я и назову базовой:
Для реализации создадим класс grid. Заполним его в соответствии с Шагом 1, в котором table — список значений таблицы, метод show — просто наглядный вывод таблицы.
Шаг 2. Перетасовать сетку
Есть несколько видов перестановок, выполнив которые таблица Судоку останется в допустимом состоянии.
К ним относятся:
Для каждой из перестановок напишем метод:
transposing
swap_rows_small
swap_colums_small
Для обмена столбцов можно поменять строки у транспонированной таблицы:
swap_rows_area
swap_colums_area
Может быть есть ещё более сложные преобразования, но, думаю, можно ограничиться этими. Этот каркас инвариантен своей структуре, такие перестановки есть почти тоже самое, что и действия над матрицами относительно определителя или вращение Кубика Рубика.
Теперь, для того чтобы получить случайную комбинацию, достаточно запустить в случайном порядке функции перемешивания. Так и поступим, amt — количество перемешиваний:
Шаг 3. Удаление клеток
После полученного решения нам необходимо получить задачу (именно в такой последовательности мы можем гарантировать однозначность решения). И это самая сложная часть. Какое количество можно убрать, чтобы гарантировать однозначность решения? Это один из важных факторов, от которого зависит сложность Судоку. Всего в Судоку 81 клетка, обычно считают лёгким когда на поле есть 30-35 «подсказок», средним — 25-30, и сложным — 20-25. Это данные большого набора реальных примеров. Нет никаких законов для сложности. Можно сделать 30-клеточный неразрешимый вариант и 22 клеточный «лёгкий».
- Случайный подход — можно попробовать выкинуть 50-60 клеток наугад, но где вероятность что Судоку можно будет решить? Например, если заполнены 3 строки ( = 27 клеток)
- Случайно с простым ограничением — для примера можно взять некое число N в качестве предела, так что N строк и столбцов могут быть пустыми. Принимая N = 0 — для лёгких уровней, N=1 — средний, N=2 — сложный
- Выбрать случайную ячейку N
- Отметить N просмотренной
- Удалить N
- Посчитать решения. Если оно не единственное, то вернуть N обратно
Я уверен, что есть и более сложные подходы в построении таблицы Судоку. Моя цель была достигнута, получился рабочий алгоритм. Теперь мне не нужно искать новые выпуски, я могу их генерировать :)
В принципе, здесь был приведён частный случай Судоку 9х9. Но нет ограничений для использования его на 16х16 и 25х25.
Читайте также: