Skip to content

Instantly share code, notes, and snippets.

@iemcd
Created April 29, 2024 07:58
Show Gist options
  • Save iemcd/508d924b907e520831b6241f8ee704bb to your computer and use it in GitHub Desktop.
Save iemcd/508d924b907e520831b6241f8ee704bb to your computer and use it in GitHub Desktop.
Finding new word squares
and, non
was, ana
was, aka
was, aaa
war, ana
war, aka
war, aaa
did, iii
led, eye
led, eve
red, eye
red, eve
ten, eye
ten, eve
saw, ana
saw, aka
saw, aaa
far, ana
far, aka
far, aaa
iii, iii
del, eye
del, eve
let, eye
let, eve
dam, ana
dam, aka
dam, aaa
der, eye
der, eve
dna, non
net, eye
net, eve
tim, iii
raf, ana
raf, aka
raf, aaa
raw, ana
raw, aka
raw, aaa
pit, iii
tip, iii
ram, ana
ram, aka
ram, aaa
mad, ana
mad, aka
mad, aaa
www, www
das, ana
das, aka
das, aaa
tel, eye
tel, eve
ana, non
mar, ana
mar, aka
mar, aaa
mit, iii
sad, ana
sad, aka
sad, aaa
cbc, bob
aaa, ana
aaa, aka
aaa, aaa
part, asor
part, ajar
part, acir
part, amor
part, atir
part, amar
live, iiiv
star, tnua
draw, rosa
draw, raja
draw, rica
draw, roma
draw, rita
draw, rama
ward, asor
ward, ajar
ward, acir
ward, amor
ward, atir
ward, amar
flow, logo
flow, laro
flow, lavo
pool, otto
pool, ohio
pool, oiho
pool, onto
pool, otno
pool, oslo
pool, olso
anna, noun
anna, nuon
sees, edge
sees, egde
sees, else
sees, esle
sees, ease
sees, esae
sees, erie
sees, eire
evil, viii
loop, otto
loop, ohio
loop, oiho
loop, onto
loop, otno
loop, oslo
loop, olso
stem, time
stem, tsae
stem, take
stem, type
stem, true
stem, tree
stem, tixe
stem, tone
stem, tale
stem, tube
stem, tape
stem, tune
stem, tide
stem, tate
wolf, ogol
wolf, oral
wolf, oval
reed, edge
reed, egde
reed, else
reed, esle
reed, ease
reed, esae
reed, erie
reed, eire
otto, that
otto, taht
otto, test
otto, tset
otto, text
otto, txet
deer, edge
deer, egde
deer, else
deer, esle
deer, ease
deer, esae
deer, erie
deer, eire
leon, ecno
leon, euro
leon, echo
trap, rosa
trap, raja
trap, rica
trap, roma
trap, rita
trap, rama
rats, aunt
mets, emit
mets, east
mets, ekat
mets, epyt
mets, eurt
mets, eert
mets, exit
mets, enot
mets, elat
mets, ebut
mets, epat
mets, enut
mets, edit
mets, etat
noel, once
noel, orue
noel, ohce
only, noel
ylno, leon
well, evil
llew, live
held, evil
dleh, live
took, otto
koot, otto
book, otto
koob, otto
good, otto
doog, otto
help, evil
pleh, live
soon, otto
noos, otto
food, otto
doof, otto
room, otto
moor, otto
poor, otto
roop, otto
fell, evil
llef, live
wood, otto
doow, otto
felt, evil
tlef, live
cell, evil
llec, live
look, otto
kool, otto
bell, evil
lleb, live
roof, otto
foor, otto
foot, otto
toof, otto
door, otto
rood, otto
sell, evil
lles, live
moon, otto
noom, otto
tell, evil
llet, live
alex, live
xela, evil
cook, otto
kooc, otto
fled, live
delf, evil
belt, evil
tleb, live
tool, otto
loot, otto
root, otto
toor, otto
flew, live
welf, evil
cool, otto
looc, otto
hell, evil
lleh, live
self, evil
fles, live
glen, live
nelg, evil
boom, otto
moob, otto
ussr, sees
rssu, sees
hood, otto
dooh, otto
flee, live
eelf, evil
hook, otto
kooh, otto
rely, evil
yler, live
mood, otto
doom, otto
alps, loop
spla, pool
wool, otto
loow, otto
boot, otto
toob, otto
urdu, reed
udru, deer
parts, about, rotor
parts, about, rocor
parts, asset, rsfsr
sarah, ababa, radar
sarah, aroma, rotor
sarah, aroma, rocor
sarah, arora, rotor
sarah, arora, rocor
sarah, ahora, rotor
sarah, ahora, rocor
sarah, amora, rotor
sarah, amora, rocor
sarah, aroha, rotor
sarah, aroha, rocor
array, russa, rsfsr
array, reema, refer
array, reema, reger
array, reema, reber
assam, sutra, stats
straw, tessa, rsfsr
straw, tuoba, rotor
straw, tuoba, rocor
rotor, oruro, tumut
senna, evian, nitin
oprah, poona, rotor
oprah, poona, rocor
tamar, ababa, madam
tamar, ababa, maqam
tamar, ababa, malam
tamar, aviva, mirim
tamar, amina, mirim
tamar, anima, mirim
tamar, arima, mirim
tamar, amira, mirim
tamar, anika, mirim
tamar, akina, mirim
salah, ababa, laval
salah, ababa, lawal
annan, naira, nitin
harem, alone, rotor
harem, alone, rocor
massa, artus, stats
strap, tessa, rsfsr
strap, tuoba, rotor
strap, tuoba, rocor
yarra, ameer, refer
yarra, ameer, reger
yarra, ameer, reber
yarra, assur, rsfsr
masse, artus, stats
mares, alone, rotor
mares, alone, rocor
haram, ababa, radar
haram, aroma, rotor
haram, aroma, rocor
haram, arora, rotor
haram, arora, rocor
haram, ahora, rotor
haram, ahora, rocor
haram, amora, rotor
haram, amora, rocor
haram, aroha, rotor
haram, aroha, rocor
ramat, ababa, madam
ramat, ababa, maqam
ramat, ababa, malam
ramat, aviva, mirim
ramat, amina, mirim
ramat, anima, mirim
ramat, arima, mirim
ramat, amira, mirim
ramat, anika, mirim
ramat, akina, mirim
salas, ababa, laval
salas, ababa, lawal
kalam, ababa, laval
kalam, ababa, lawal
taras, ababa, radar
taras, aroma, rotor
taras, aroma, rocor
taras, arora, rotor
taras, arora, rocor
taras, ahora, rotor
taras, ahora, rocor
taras, amora, rotor
taras, amora, rocor
taras, aroha, rotor
taras, aroha, rocor
hamar, ababa, madam
hamar, ababa, maqam
hamar, ababa, malam
hamar, aviva, mirim
hamar, amina, mirim
hamar, anima, mirim
hamar, arima, mirim
hamar, amira, mirim
hamar, anika, mirim
hamar, akina, mirim
nanak, ababa, navan
nanak, ababa, natan
nanak, aroma, noyon
nanak, aviva, nitin
nanak, amina, nitin
nanak, arora, noyon
nanak, anima, nitin
nanak, arima, nitin
nanak, amira, nitin
nanak, ahora, noyon
nanak, anika, nitin
nanak, amora, noyon
nanak, aroha, noyon
nanak, akina, nitin
manna, arian, nitin
warts, about, rotor
warts, about, rocor
warts, asset, rsfsr
samad, ababa, madam
samad, ababa, maqam
samad, ababa, malam
samad, aviva, mirim
samad, amina, mirim
samad, anima, mirim
samad, arima, mirim
samad, amira, mirim
samad, anika, mirim
samad, akina, mirim
manas, ababa, navan
manas, ababa, natan
manas, aroma, noyon
manas, aviva, nitin
manas, amina, nitin
manas, arora, noyon
manas, anima, nitin
manas, arima, nitin
manas, amira, nitin
manas, ahora, noyon
manas, anika, nitin
manas, amora, noyon
manas, aroha, noyon
manas, akina, nitin
sanam, ababa, navan
sanam, ababa, natan
sanam, aroma, noyon
sanam, aviva, nitin
sanam, amina, nitin
sanam, arora, noyon
sanam, anima, nitin
sanam, arima, nitin
sanam, amira, nitin
sanam, ahora, noyon
sanam, anika, nitin
sanam, amora, noyon
sanam, aroha, noyon
sanam, akina, nitin
nitin, irani, talat
nitin, inari, talat
nanna, arian, nitin
talat, ababa, laval
talat, ababa, lawal
merah, enola, rotor
merah, enola, rocor
halas, ababa, laval
halas, ababa, lawal
annam, naira, nitin
talas, ababa, laval
talas, ababa, lawal
damas, ababa, madam
damas, ababa, maqam
damas, ababa, malam
damas, aviva, mirim
damas, amina, mirim
damas, anima, mirim
damas, arima, mirim
damas, amira, mirim
damas, anika, mirim
damas, akina, mirim
kanak, ababa, navan
kanak, ababa, natan
kanak, aroma, noyon
kanak, aviva, nitin
kanak, amina, nitin
kanak, arora, noyon
kanak, anima, nitin
kanak, arima, nitin
kanak, amira, nitin
kanak, ahora, noyon
kanak, anika, nitin
kanak, amora, noyon
kanak, aroha, noyon
kanak, akina, nitin
sanna, arian, nitin
kanan, ababa, navan
kanan, ababa, natan
kanan, aroma, noyon
kanan, aviva, nitin
kanan, amina, nitin
kanan, arora, noyon
kanan, anima, nitin
kanan, arima, nitin
kanan, amira, nitin
kanan, ahora, noyon
kanan, anika, nitin
kanan, amora, noyon
kanan, aroha, noyon
kanan, akina, nitin
harpo, anoop, rotor
harpo, anoop, rocor
annes, naive, nitin
natan, ababa, talat
seram, enola, rotor
seram, enola, rocor
sarat, ababa, radar
sarat, aroma, rotor
sarat, aroma, rocor
sarat, arora, rotor
sarat, arora, rocor
sarat, ahora, rotor
sarat, ahora, rocor
sarat, amora, rotor
sarat, amora, rocor
sarat, aroha, rotor
sarat, aroha, rocor
haras, ababa, radar
haras, aroma, rotor
haras, aroma, rocor
haras, arora, rotor
haras, arora, rocor
haras, ahora, rotor
haras, ahora, rocor
haras, amora, rotor
haras, amora, rocor
haras, aroha, rotor
haras, aroha, rocor
malam, ababa, laval
malam, ababa, lawal
xamax, ababa, madam
xamax, ababa, maqam
xamax, ababa, malam
xamax, aviva, mirim
xamax, amina, mirim
xamax, anima, mirim
xamax, arima, mirim
xamax, amira, mirim
xamax, anika, mirim
xamax, akina, mirim
karak, ababa, radar
karak, aroma, rotor
karak, aroma, rocor
karak, arora, rotor
karak, arora, rocor
karak, ahora, rotor
karak, ahora, rocor
karak, amora, rotor
karak, amora, rocor
karak, aroha, rotor
karak, aroha, rocor
ramah, ababa, madam
ramah, ababa, maqam
ramah, ababa, malam
ramah, aviva, mirim
ramah, amina, mirim
ramah, anima, mirim
ramah, arima, mirim
ramah, amira, mirim
ramah, anika, mirim
ramah, akina, mirim
malak, ababa, laval
malak, ababa, lawal
citic, irani, talat
citic, inari, talat
salat, ababa, laval
salat, ababa, lawal
marah, ababa, radar
marah, aroma, rotor
marah, aroma, rocor
marah, arora, rotor
marah, arora, rocor
marah, ahora, rotor
marah, ahora, rocor
marah, amora, rotor
marah, amora, rocor
marah, aroha, rotor
marah, aroha, rocor
annas, naira, nitin
essam, sutra, stats
mirim, irani, radar
mirim, inari, radar
animal, navara, ivluam
animal, navara, ivdnam
werder, emerge, reward
werder, eberle, reward
werder, enerie, reward
langer, amelie, netulg
ffffff, ffffff, ffffff
hellas, eilema, llebel
lamina, aravan, maulvi
lamina, aravan, mandvi
regnal, eilema, gluten
camara, aiakar, malika
camara, amaker, malika
ratnam, anaira, tahsin
ratnam, anaisa, tahsin
ratnam, alaina, tahsin
ratnam, agaila, tahsin
ratnam, ataixa, tahsin
ratnam, ataisa, tahsin
spacer, parade, aramac
spacer, phrase, aramac
spacer, pirate, aramac
spacer, paraje, aramac
animas, navara, ivluam
animas, navara, ivdnam
warder, amelie, resold
warder, amelie, retold
warder, akerue, reward
warder, averse, reward
warder, aherne, reward
warder, amerie, reward
salleh, amelie, lebell
relaid, etanni, lamina
relaid, ecangi, lamina
staats, tennet, ancona
staats, tennet, anocna
staats, tennet, antena
staats, tennet, anetna
staats, tennet, angina
staats, tennet, anigna
staats, tennet, anjana
staats, tennet, anajna
staats, tennet, annona
staats, tennet, anonna
staats, tennet, andina
staats, tennet, anidna
staats, tennet, annina
staats, tennet, aninna
staats, tennet, antona
staats, tennet, anotna
recaps, edarap, camara
recaps, esarhp, camara
recaps, etarip, camara
recaps, ejarap, camara
redraw, eilema, dloser
redraw, eilema, dloter
redraw, eureka, drawer
redraw, esreva, drawer
redraw, enreha, drawer
redraw, eirema, drawer
redrew, egreme, drawer
redrew, elrebe, drawer
redrew, eirene, drawer
samina, aravan, maulvi
samina, aravan, mandvi
aramac, rakaia, akilam
aramac, rekama, akilam
harrah, areena, reiner
harrah, areena, renner
harrah, areena, renier
harrah, areena, redder
harrah, aneera, reiner
harrah, aneera, renner
harrah, aneera, renier
harrah, aneera, redder
mantar, ariana, nishat
mantar, asiana, nishat
mantar, aniala, nishat
mantar, aliaga, nishat
mantar, axiata, nishat
mantar, asiata, nishat
marray, areena, reiner
marray, areena, renner
marray, areena, renier
marray, areena, redder
marray, aneera, reiner
marray, aneera, renner
marray, aneera, renier
marray, aneera, redder
reiman, eilema, ilagem
namier, amelie, megali
dialer, innate, animal
dialer, ignace, animal
yarram, areena, reiner
yarram, areena, renner
yarram, areena, renier
yarram, areena, redder
yarram, aneera, reiner
yarram, aneera, renner
yarram, aneera, renier
yarram, aneera, redder
marram, areena, reiner
marram, areena, renner
marram, areena, renier
marram, areena, redder
marram, aneera, reiner
marram, aneera, renner
marram, aneera, renier
marram, aneera, redder
basalt, animal, sidama
tlasab, lamina, amadis
astral, strela, trever
lartsa, alerts, revert
masala, animal, sidama
alasam, lamina, amadis
casale, animal, sidama
elasac, lamina, amadis
astray, strela, trever
yartsa, alerts, revert
casals, animal, sidama
slasac, lamina, amadis
nasals, animal, sidama
slasan, lamina, amadis
esdras, strela, drawer
sardse, alerts, reward
ystrad, strela, trever
dartsy, alerts, revert
casali, animal, sidama
ilasac, lamina, amadis
hoodoos, ottetto, ottetto, deedeed
soodooh, ottetto, ottetto, deedeed
hoopoos, ottetto, ottetto, peeweep
soopooh, ottetto, ottetto, peeweep
koodoos, ottetto, ottetto, deedeed
soodook, ottetto, ottetto, deedeed
voodoos, ottetto, ottetto, deedeed
soodoov, ottetto, ottetto, deedeed
#!/usr/bin/perl
# Ian McDougall
# April 2023
# looking for a new sator square
use strict;
use warnings;
use 5.36.0;
use List::Util 'any';
my $n = 5;
# my $dictpath = '/usr/share/dict/words';
my $dictpath = './words/enwiki-100k';
my $dicthand; # full computer dict (filehandle)
my @words; # list of candidate words
my @ana; # list of anadromes (and palindromes)
my @non; # list of non-anadromes (and their reverses)
open($dicthand, "<", $dictpath) || die "$0: can't open $dictpath for reading: $!";
while (<$dicthand>)
{
chomp;
if (length == $n && ! /[^a-z]/) # match exactly n lowercase letters
{
push(@words, $_);
}
}
foreach (@words)
{
my $rev = reverse;
if ( any {/$rev/} @words )
{
push @ana, $_;
} else
{
push @non, $_;
push @non, $rev;
}
}
sub make_query ( @square )
{
my $query = '.' x (length $square[0] || 1);
for (my $i = 0; $i <= $#square; $i++)
{
substr $query, $i, 1, substr $square[$i], $#square+1, 1;
substr $query, -1-$i, 1, substr $square[$i], -2-$#square, 1;
}
return $query;
}
sub find_squares ( $n, @part )
{
if (scalar @part >= ($n/2))
{
say join(", ", @part);
} else {
my $w_query = make_query(@part);
my @ana_may = grep { /$w_query/ } @ana;
foreach (@ana_may)
{
find_squares( $n, @part, $_);
}
my @non_may = grep { /$w_query/ } @non;
foreach (@non_may)
{
find_nears( $n, @part, $_ );
}
}
}
sub find_nears ( $n, @part ) # will never find another "nearby" match, as one has been used
{
if (scalar @part >= $n/2)
{
say join(", ", @part);
} else {
my $w_query = make_query(@part);
my @ana_may = grep { /$w_query/ } @ana;
foreach (@ana_may)
{
find_nears( $n, @part, $_);
}
}
}
my @init_sq = ();
find_squares( $n, @init_sq);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment