Если я правильно понимаю, учитывая строку, вы хотите выделить один путь через кубик, который соответствует строке. Иногда есть несколько возможных вариантов, поэтому добавление буквы может полностью изменить то, что выделено. Это может быть хорошим подходом для сохранения результатов из предыдущей подстроки, поэтому нам не нужно начинать сначала. Тогда разумно было бы вычислить все возможные пути.
Ответом для заданной строки s будет список путей, где путь - это список координат сетки. Каждый путь - это то, что вы могли бы разумно выделить, поэтому просто выделите первый. При добавлении буквы в строку вы найдете пути, которые вы можете развернуть, и удалите пути, которые вы не можете развернуть.
Боюсь, я не знаю, как написать код VB. Так как вы попросили псевдокод, вместо этого вот вам грубый псевдокод, похожий на python. Я кодирую решетчатую сетку как список из 16 предметов. Функция соседей (x) возвращает список соседних позиций (за исключением крайних случаев, которые будут [x-1, x + 1, x-4, x + 4]).
def firstLetter(typed):
answer = []
for pos in range(16): if grid[pos]==typed: answer += [pos]
return answer
def addletter(partialanswer, typed):
answer2 = []
for partial in partialanswer:
for neighbor in neighbors(partial[-1]):
if grid[neighbor]==typed:
# partial+[neighbor] is a list. answer2 is a list of such lists.
answer2 += partial + [neighbor]
return answer2
Если игрок набирает «go», например, тогда
(a) игрок набирает «g», код вызывает firstletter («g») и получает список «ответов» о позициях в сетке, в которых есть «g». Выделите, скажем, первый.
(б) игрок набирает «o», код вызывает addletter (answer, «o») и получает список путей в сетке, которые говорят «go». Снова выделите первый.