Генератор кроссвордов.

Данная программа демонстрирует возможности алгоритма составления кроссвордов.

Задача программы составляющей кроссворды, заключается в следующем.

    Дано:

  • БД слов - загадок для кроссворда.
  • Поле кроссворда, которое определяет, каким образом эти слова должны пересекаться.

  • Надо выбрать из БД подходящие слова, т.е. составить кроссворд.

Человек справляется с этой задачей так как имеет ассоциативное мышление, но научить машину составлять кроссворд не так просто, как может показаться на первый взгляд.
Традиционным решением подобной задачи для ЭВМ является перебор всех вариантов, с целью выявления подходящего. Однако кроссворд - это как раз тот случай когда никакое быстродействие не поможет. Дело в том, что количество этих самых вариантов выливается в цифру с таким порядком, для которого я даже названия не знаю.
Считайте сами:
Представьте себе кроссворд, который выглядит как квадрат 5х5 клеток. Нужно подобрать 10 слов, которые будут пересекаться по правилу кроссворда в каждой букве.
Алгоритм с перебором будет выглядеть примерно так:

  • первое слово из БД надо вставить в первое свободное место.
  • первое слово из оставшихся надо вставить во второе свободное место и проверить выполняется ли условие кроссворда (т.е. правильное пересечение слов). если нет надо взять второе слово из оставшихся и повторить проверку.
  • дальше все тоже самое только с 3,4,...10 словом.

Вероятность того, что первые десять слов из БД и будут решением кроссворда очень мала.
Однако понятно, что если придется перебирать всю БД, то даже если она состоит из 100 слов, количество переборов будет равно 10 в степени 100.  А сколько это ?

Я долго ломал голову и придумал складывать буквы в местах пересечения слов, операцией AND таким образом можно просчитать последствия установки определенного слова на несколько шагов вперед. В результате мой алгоритм заполняет такой кроссворд, как на картинке, за несколько секунд, причем не зависимо от того есть его решение в БД или нет. Вы получите либо кроссворд, либо неуспех. Чем больше слов в БД, тем лучше составляются кроссворды и такой кроссворд составляется за несколько секунд из БД в 30 тыс. слов.

Скачать программу и исходный код.

Программы

Remote Control - Программа для удаленного доступа к компьютеру.
ImageConverter - Программа для уменьшения фотографий.
AutoShutdown - Программа для автоматического выключения компьютера.
Work time counter - Простая программа для учета рабочего времени.
ClearFolders - Программа для массового удаления файлов.
SynchronizeFolders - Программа для синхронизации каталогов.
DiskSector - Утилита позволяет осуществлять чтение / запись секторов диска в / из файла.
ROPTest - Программа изображает все 256 вариантов флагов Ternary Raster Operations Codes, помогает определить необходимый код растровой операции.
HEX Dump ActiveX позволяет просматривать и редактировать данные в шестнадцатеричном HEX формате.
15 slide puzzle - 15 slide puzzle game.
BOOTSAVER - Позволяет скопировать загрузочный сектор жесткого диска в файл, восстановить загрузочный сектор из файла, восстановить загрузочную программу IPL1, не меняя таблицу разделов диска.
Генератор кроссвордов. Описание алгоритм компьютерного составления кроссвордов.
Симулятор 80196. Программный симулятор микроконтроллера Intel 80196KR. Имеет встроенный компилятор ассемблера, текстовый редактор, справочную систему. Может создавать HEX файлы.
Ассемблер. Оригинальный компилятор ассемблера х86.
DISKEDIT Программа позволяет просматривать и редактировать сектора дисков. Работает через прерывание INT13.

Программирование

WPF, XPS, NET. Как установить шрифт из памяти
Нейронные сети. Пример программы и исходный код С++.
Deflate. Подробное описание алгоритма декодирование формата Дефлет. Прмер декодирования с пояснениями.
Программирование драйверов для Windows. Общие вопросы программирования драйверов. Какими средствами пользоваться, где скачать DDK.
Программирование RS232 в Windows. СComBase класс для программирования COM порта.
Программирование потоков в Windows. Класс CBaseThread позволяет организовать несколько рабочих потоков.
Динамический Recordset CDynamicRecordSet - класс модернизирует CRecordSet для более удобной работы с БД из MFC приложений.
Как сохранить, восстановить, отредактировать MBR (Master Boot Record), boot sector, нулевой, загрузочный сектор диска при помощи утилиты debug.exe

evmsoft.net © 2014