Word squaring

wordlist=Flatten@Import["/Users/meng/Downloads/mwords/354984si.ngl","Data"]

wordlist//Length

wordlist2=WordList[];

With[{cs=Characters["dean"]},
With[{c=GroupBy[Characters/@wordlist2,{Length,First}][4]},Select[Tuples[{{cs},c[cs[[2]]],c[cs[[3]]],c[cs[[4]]]}],SymmetricMatrixQ]]]

MatrixForm/@%

Solution 2.1

(c=Characters/@WordList["KnownWords"];Nest[Function[s,Function[{w},Sequence@@(Append[w,#]&/@Cases[c,PadRight[w[[All,1+Length@w]],Length@#,_]])]/@s],{{#}},Length@#-1])&[Characters["bishop"]]

Solution 2.2

c=Characters/@WordList["KnownWords"];f=Function;l=Length;
Nest[f[s,f[{w},Sequence@@(Append[w,#]&/@Cases[c,PadRight[w[[All,1+l@w]],l@#,_]])]/@s],{{#}},l@#-1]&@c[[8780]]

Solution 3.1

L=Length;
a=Append;
c=Cases;
W=c[_?(L@#==6&)]@Characters@WordData[]

W[[926]]

K@w_/;L@w<6:=K@a[w,#]&/@c[W,a[w[[All,L@w+1]],__]];

Flatten[K@W[[{926}]]]

Solution 3.2

L=Length;a=Append;c=Cases;W=c[_?(L@#==6&)]@Characters@WordData[];K@w_/;L@w<6:=K@a[w,#]&/@c[W,a[w[[;;,L@w+1]],__]];Flatten@K@W[[{926}]]

Temp

Module[
{word="dean",c={}},
AppendTo[c,Select[DictionaryLookup["d*"],StringLength[#]==4&]];
AppendTo[c,Select[Join@@(DictionaryLookup["e"<>#<>"*"]&/@Union[StringTake[#,{2}]&/@c[[1]]]),StringLength[#]==4&]];
AppendTo[c,Flatten@Table[DictionaryLookup[StringJoin[{"e",##,"*"}]]&,Union[StringTake[#,{3}]&/@c[[1]]],Union[StringTake[#,{3}]&/@c[[2]]]]];
c
]