Кроссворды в системе Mathematica с использованием сопоставления с образцом

Предположим, я выбрал все 3 символьных слова из словаря Mathematica:

all3 = Characters /@ Select[DictionaryLookup[], StringLength[#] == 3 &];  

и хочу сформировать полные наборы, подобные царапинам, например:

A B E
R A Y
E R E  

Где слова можно читать по горизонтали и вертикали.

Очевидно, что наборы можно найти с помощью рекурсии и отслеживания с возвратом. Но:

1) Есть ли способ решить эту проблему с помощью шаблонов?
2) Для каких размеров существуют подходящие решения?

Править

Я написал вопрос для DictionaryLookup [] только потому, что это база данных разумного размера с записями переменной длины. Моя настоящая проблема связана не с поиском в словаре, а с определенным типом ткацких станков.

12
задан Dr. belisarius 24 August 2011 в 04:18
поделиться