Написання генератора кросвордів на delphi, технічний блог

Написання генератора кросвордів на delphi, технічний блог
Відкопав на диску в своїх архівах програму генерації кросвордів, яку я кілька років тому робив на замовлення, для учня 11 класу. З цієї причини, навмисно багато місця в програмі спрощені і написані дилетантськи. щоб учень міг видати код за свій власний. З цієї ж причини жорстко задано кількість розміщуваних слів і осередків для введення відповідей - 12 штук. Але я думаю, якщо хтось захоче це доопрацювати це буде не важко.

Звертаю увагу що це не готовий продукт, для любителів кросвордів, в програмі дуже маленька база питань - всього 56, а також немає зручного регулювання розмірів кросворду і кількості розміщуваних питань.

Алгоритм генерації кросворду

Мною був розроблений алгоритм вибору і розміщення слів на дошці, завданням якого є отримання максимальної кількості перетинів з іншими словами. Алгоритм, вибираючи чергове випадкове слово для розміщення, послідовно намагається розмістити його горизонтально і вертикально, поступово рухаючись від лівого верхнього кута дошки до нижнього правого. При цьому якщо не отримано жодного перетину, або слово накладається на вже розміщене слово неправильно то такі варіанти відкидаються, а якщо розміщення визнається вдалим то запам'ятовується кількість отриманих перетинів, щоб потім вибрати варіант з максимальною кількістю.

При розміщенні слова, алгоритм враховує деякі обмеження. Наприклад не можна розміщувати два слова одне за іншим впритул, інакше не буде зрозуміло де закінчується одне і починається інше.

Процедури MapWord і MapWordCheck - містять основну частину алгоритму розміщення слів на дошці.