Статья напомнила мне мой похожий проект на AppEngine + ExtJS. Я писал его под влиянием этих многочисленных телешоу, где нужно собрать слово из букв, приведенных на экране. Порылся в исходниках и нашел его. Нужно всего-лишь вписать буквы, из которых требуется составить слово, и AppEngine вернет все возможные варианты. Для моего словаря требуется примерно 10-15 секунд на поиск слов. Проект писался быстро, поэтому получился стандартный говнокод. Если немного оптимизировать, то получится сделать поиск быстрее.
Почему бы не организовать словарь в виде дерева из букв? Тогда по нему можно ходить параллельно с игровым полем и прекращать поиск в тот момент, когда нет возможных переходов по дереву.
Работать будет знаааачительно быстрее.
Почему бы не хранить входные данные в двумерном массиве?
Я тут запустил немного изменил Ваш код, запустил на таблице 100x100 и было сделано 205530 вызовов print_word — т.е. столько раз вызвался метод split. Программа работала порядка 15 минут.
Если хранить данные в двумерном массиве, то отрабатывает за 23 секунды.
Словомания — отгадываем слова. Часть 1, Ruby