Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  125

•  TDictionary Custom Sort  3 312

•  Fast Watermark Sources  3 062

•  3D Designer  4 818

•  Sik Screen Capture  3 314

•  Patch Maker  3 528

•  Айболит (remote control)  3 628

•  ListBox Drag & Drop  2 992

•  Доска для игры Реверси  81 537

•  Графические эффекты  3 922

•  Рисование по маске  3 227

•  Перетаскивание изображений  2 608

•  Canvas Drawing  2 732

•  Рисование Луны  2 556

•  Поворот изображения  2 163

•  Рисование стержней  2 160

•  Paint on Shape  1 564

•  Генератор кроссвордов  2 224

•  Головоломка Paletto  1 764

•  Теорема Монжа об окружностях  2 211

 

 

Архив исходников

   
  Базы данных
  Графика & Мультимедиа
  Сети & Интернет
  Система
  Разное
   

Ссылки и Баннеры ...

 

Delphi Sources

Delphi Sources

 




 

ИСХОДНИК ПРОГРАММЫ

 

. : Acrostic Variation : .

 

Delphi - Программа для решения кроссвордов Акростик

Исходник программы, показывающей пример создания головоломки «Акростик», которая раскрывает 13-й (неуказанный) вид транспорта в серых областях кроссворда, когда он решен.

Проблема была смоделирована введением «правила пересечения» записей для каждой пары слов, которые пересекаются друг с другом. Позиции слов пронумерованы от H1 до H6 и от V1 до V6 слева направо и сверху вниз. Таким образом, H1 (2), V1 (2) указывает, что горизонтальное слово H1 и вертикальное слово V1 пересекаются во второй букве каждого слова. Программа присоединяет строковый список пар слов «Кандидат», которые могут соответствовать требованиям правила.

Запись TRulerec разбивает текст каждого правила на отдельные поля и добавляет список строк Candidates для хранения пар слов, которые имеют совпадающие буквы в указанных положениях пересечения. Процедура SearchBtn сначала создает массив Rules из TRuleRec на основе отображаемых правил пересечения и строит список кандидатов для каждого правила. После создания этого массива Rules мы вызываем функцию CheckCandidates для каждого правила, чтобы рекурсивно обработать пары слов-кандидатов. AssignedList - это строковый список типа Name = Value с «Word = Assigned location» для всех слов с указанием того, какой позиции слова было присвоено это слово со специальным индикатором (буква «N»), устанавливается, если это слово доступно. CheckCandidates обрабатывает список кандидатов в поисках пары доступных слов, которые он может назначить. Если он находит пару, он назначает их и вызывает себя со следующим номером правила. Если для текущего правила не могут быть назначены никакие кандидаты, функция возвращает «False» вызывающему (предыдущее правило), которое затем отменяет присвоение своих последних назначений и пробует следующую пару кандидатов и т.д. Процесс продолжается до тех пор, пока все правила не будут выполнены. Если у нас есть решение, или все правила исчерпали всех своих кандидатов, и в этом случае решения не существует. Это классический «поиск в глубину с рекурсией», который до сих пор кажется мне волшебством)

Я добавил функцию сортировки массива Rules перед решением, чтобы уменьшить длину пути поиска. Первоначальный порядок - по номеру слова по горизонтали, но я добавил параметры для сортировки, увеличив длину списка слов кандидатов (выполняется намного быстрее) или по убыванию числа пересечений для горизонтального слова (умеренно быстрее). Идея сортировки по размеру списка кандидатов заключалась в том, что меньшее количество кандидатов будет быстрее размещать нужные слова, и похоже, что это так. Для убывающего числа пересечений идея заключалась в том, чтобы сначала поставить слова с наибольшим количеством пересечений, но, похоже, это еще не все. Остается открытым вопрос, существуют ли более эффективные способы предварительного выбора порядка правил для повышения эффективности. Обработка правил со словами, пересекающими последние помещенные слова, может быть более «похожей на человека» и быть даже более эффективной.

Просмотры: 757
Дата: 06.07.2021, Автор: Gary Darby
Скачивания: 10
Написать сообщение:

 

Скачать (66 Кб)     Регистрация >>

 

© 2004-2024 "DS"

Соглашение пользователя / Реклама / Карта сайта             Created by BrokenByte Software