You can split the string and turn it into a pattern like this:
makePattern[word_String] := StringExpression @@ Map[
With[{s = Symbol @ #}, Pattern[s, Blank[]]] &,
Characters[word]];
findMatches[word_String, list_List : WordList[]] :=
Select[list, StringMatchQ[makePattern @ word]];
Which gives you
findMatches @ "settings"
{"diffused", "golliwog", "greening", "greeting", "grooming", "grooving", "guzzling", "littoral", "rollover", "succubus", "suppress", "syllabus"}
manpreet
Best Answer
2 years ago
I want a function f that takes a word (like those listed in WordList[]) and returns a pattern best described by examples like these: f[“book”]=abbc; f[“settings”]=abccdefa; and f[“moving”]=abcdef.
Then I want a second function, f2, that searches a list of words for words that have the same pattern, returning a list of them; for example f2[WordList[],abcdefabgd]={liberalize, roisterous, stochastic}
The motive is to write a program that solves substitution ciphers, but could have other uses too!