0

Я хочу найти эффективный способ генерации кроссвордов. Я прочитал упомянутые решения here. Это создает простой кроссворд, где, когда я ищу эффективный и оптимизированный способ генерации кроссвордов, например, в New York times. т. е. когда вы вращаете головоломку на 180 градусов, она выглядит одинаково (черные квадраты остаются в одном и том же положении). Здесь мы можем предположить, что сетка изначально генерируется, и мы можем использовать более трех буквенных слов.Эффективный алгоритм генерации кроссвордов (стиль NYtime)

Каков наилучший способ сделать это? Какой алгоритм поиска мы можем использовать, чтобы уменьшить количество итераций и сделать его менее трудоемким?

ответ

0

Я подошел к проблеме под другим углом для другой (незавершенной) игры слов. В моем дизайне платы были выбраны, если их можно было отразить по оси X или Y (или и тем и другим).

Принимая квадрат размера N, я создал все возможные решетки, используя битную маску, принимающую 2^количество клеток -1 как максимальное значение. Итак, для сетки 2x2 (4 ячейки), перейдите от 0 ... 15.

0 - пустой сетки

1 - черный блок в левом верхнем углу

2 - черный блок в правом верхнем углу

3 - черные блоки в верхней строке

.

.

.

15 - сетка полна черных блоков

Очевидно, что это дает много, не подходящих кандидатов. Мы можем упасть:

  • Patterns где строки не совпадают по обе стороны от полпути точки (и так далее наружу) для Y-оси зеркального отображения
  • Patterns где столбцы не совпадают либо сторона полупути точки (и так далее наружу) для X-осей зеркальных отображения
  • сетки полной черных блоков
  • Шаблонов, где экстенты сетки (в первом ряду, последняя строка, первый колонка, последний колонка) не имеют белых блоков
  • P (*)

Я думаю, что я провел это примерно до 7x7, и это закончилось за разумный отрезок времени. Я не выбрал слова. Однако, как только вы свернули числа, вы можете просто сохранить все значения кандидата для каждого размера сетки, а затем просто создавать новые кроссворды каждый раз.

(*) - для игры я писал, это было важно, но я не уверен на 100%, что это требование для кроссворда. Имея 2 или более отдельных рисунка белых квадратов на разных участках доски (как бы это ни было настроено), я мог бы считать, что это абсолютно верно.