The function BabbageSquares takes a four-letter word and finds all possible Babbage squares that complete it. The Babbage squares will be presented as sorted grids of letters. The function will use only common English words—that is, ones that are in WordList[].
In[1]:=
BabbageSquares
["hair"]
Out[1]=
h
a
i
r
a
b
b
e
i
b
i
s
r
e
s
t
,
h
a
i
r
a
c
r
e
i
r
i
s
r
e
s
t
,
h
a
i
r
a
c
r
e
i
r
o
n
r
e
n
d
,
h
a
i
r
a
c
r
e
i
r
o
n
r
e
n
t
,
h
a
i
r
a
i
d
e
i
d
e
a
r
e
a
d
,
h
a
i
r
a
i
d
e
i
d
e
a
r
e
a
l
,
h
a
i
r
a
i
d
e
i
d
e
a
r
e
a
m
,
h
a
i
r
a
i
d
e
i
d
e
a
r
e
a
p
,
h
a
i
r
a
i
d
e
i
d
e
a
r
e
a
r
,
h
a
i
r
a
i
d
e
i
d
e
s
r
e
s
t
,
h
a
i
r
a
i
d
e
i
d
l
e
r
e
e
d
,
h
a
i
r
a
i
d
e
i
d
l
e
r
e
e
f
,
h
a
i
r
a
i
d
e
i
d
l
e
r
e
e
k
,
h
a
i
r
a
i
d
e
i
d
l
e
r
e
e
l
,
h
a
i
r
a
i
d
e
i
d
o
l
r
e
l
y
,
h
a
i
r
a
l
o
e
i
o
t
a
r
e
a
d
,
h
a
i
r
a
l
o
e
i
o
t
a
r
e
a
l
,
h
a
i
r
a
l
o
e
i
o
t
a
r
e
a
m
,
h
a
i
r
a
l
o
e
i
o
t
a
r
e
a
p
,
h
a
i
r
a
l
o
e
i
o
t
a
r
e
a
r
,
h
a
i
r
a
l
t
o
i
t
e
m
r
o
m
p
,
h
a
i
r
a
m
m
o
i
m
a
m
r
o
m
p
,
h
a
i
r
a
n
t
i
i
t
e
m
r
i
m
e
,
h
a
i
r
a
p
s
e
i
s
l
e
r
e
e
d
,
h
a
i
r
a
p
s
e
i
s
l
e
r
e
e
f
,
h
a
i
r
a
p
s
e
i
s
l
e
r
e
e
k
,
h
a
i
r
a
p
s
e
i
s
l
e
r
e
e
l
,
h
a
i
r
a
u
r
a
i
r
i
s
r
a
s
h
,
h
a
i
r
a
u
r
a
i
r
i
s
r
a
s
p
,
h
a
i
r
a
u
r
a
i
r
o
n
r
a
n
d
,
h
a
i
r
a
u
r
a
i
r
o
n
r
a
n
k
,
h
a
i
r
a
u
r
a
i
r
o
n
r
a
n
t
,
h
a
i
r
a
u
t
o
i
t
e
m
r
o
m
p
Each square will be a nested list of characters wrapped in Grid:
In[2]:=
First
BabbageSquares
["hair"]//InputForm
Out[2]//InputForm=
Grid[{{h, a, i, r}, {a, b, b, e}, {i, b, i, s}, {r, e, s, t}}]