Рассмотрим следующее расположение букв:
B
O A
N R I
D E N T
Начните с верхней буквы и выберите одну из двух букв ниже, в стиле Плинко, пока не дойдете до нижней. Независимо от того, какой путь вы выберете, вы создаете четырехбуквенное слово: BOND, BONE, BORE, BORN, BARE, BARN, BAIN или BAIT. Тот факт, что DENT читает через нижнюю часть, является просто хорошим совпадением.
Я хотел бы помочь выяснить алгоритм, который может спроектировать такой макет, где каждый возможный путь сверху вниз генерирует отдельное слово из (предоставленного) словаря. Входными данными для программы будут начальная буква (B, в этом примере) и длина слова n (4, в этом примере). Он будет возвращать либо буквы, которые составляют такой макет, либо сообщение о том, что это невозможно. Он не должен быть детерминированным, поэтому он может генерировать разные макеты с одним и тем же вводом.
До сих пор я не придумал ничего лучше, чем грубая сила. То есть для всех 26^[(n+2)(n-1)/2]
способов выбора букв для нижней части макета, чтобы проверить, дают ли все возможные 2^(n-1)
пути слова, которые в словаре. Я рассмотрел какое-то префиксное дерево, но тот факт, что пути могут пересекаться и обмениваться буквами, перепутал меня. Я чувствую себя наиболее комфортно в Python, но, как минимум, мне просто нравится идея алгоритма или подхода, который бы работал для этой проблемы. Благодарю.