Many moons ago, I was playing with spelling dictionaries (see What is an index anyway?) and anagrams. After decoding a spelling dictionary for a word data base in the early 1980s, I wrote some word games, like scrabble and anagrams.

 

APT, PAT, and TAP are 3 words that are anagrams of each other. ARE, EAR and ERA is another set.  Coming up with a 3 letter triple anagram isn’t too hard.

 

Does anyone know of other several letter triple anagrams?

 

It took about 5 minutes to write and 5 minutes to run the program below to find triple or more anagrams of 9 or more letters. The spelling dictionary used has some interesting words!

 

Coordinate the Decoration of your Maraschino Harmonicas to get Persistent Prettiness!

 

Click to download Dictionary.dll (you'll need to REGSVR32 this guy)

 

Here’re the results:

 

 

admonisher  harmonised  rhamnoside 

anachorism  harmonicas  maraschino 

anoestrous  outreasons  treasonous 

antimonies  antinomies  semination 

ascertains  incrassate  sectarians 

banderoles  bandoleers  endorsable 

brutalness  subalterns  substernal 

carotenoid  coordinate  decoration 

centralise  interlaces  linecaster 

chromocyte  cytochrome  orchectomy 

cretinised  indiscreet  indiscrete  iridescent 

deforciant  fornicated  fractioned 

discounter  introduces  rediscount  reductions 

disculpate  duplicates  spiculated 

encopresis  necropsies  precession 

ethologies  theologies  theologise 

germinates  magnetiser  steamering 

hypocenter  hypocentre  nephrocyte 

metaphysis  sympathies  sympathise 

misaligned  misdealing  misleading 

parentally  paternally  prenatally 

persistent  pinsetters  prettiness 

phytogenic  pythogenic  typhogenic 

polyesters  presystole  proselytes 

positional  spoilation  spoliation 

presentive  pretensive  vespertine 

reinducted  uncredited  undirected 

scrutinies  scrutinise  sinecurist 

activations  cavitations  vacationist 

anisometric  creationism  romanticise 

anthologies  anthologise  theologians 

cinetoplast  spinotectal  tectospinal  tenoplastic 

considerate  denarcotise  desecration 

description  discerption  predictions 

eliminators  misrelation  normalities  orientalism 

festination  infestation  sinfonietta 

gametogenic  gamogenetic  geomagnetic 

paternoster  penetrators  transportee 

americanists  cartesianism  sectarianism 

iridectomies  iridectomise  mediocrities 

obscurantist  substraction  subtractions 

 

What modifications are needed to produce this output?

 

abel  able  bael  bale  bela  elba  labe 

ares  arse  ears  eras  rase  sear  sera 

aste  east  eats  sate  seat  seta  teas 

elat  late  leat  tael  tale  teal  tela 

abets  baste  bates  beast  beats  betas  tabes 

aimer  amire  maier  maire  marie  ramie  rimae 

alger  argle  elgar  glare  lager  large  regal 

apers  apres  asper  pares  parse  pears  prase  presa  rapes  reaps  spare  spear 

apter  parte  pater  peart  petra  prate  taper 

ardeb  bared  beard  bread  breda  debar  debra 

arles  earls  lares  laser  rales  reals  seral 

ashed  deash  hades  heads  sadhe  shade  shead 

aster  rates  reast  stare  tares  tears  teras 

caret  carte  cater  crate  creta  ecart  react  recta  trace 

dater  derat  rated  tarde  tared  trade  tread 

deist  diets  dites  edits  sited  stied  tides 

ensor  norse  noser  rosen  senor  seron  snore 

ergon  genro  goner  goren  negro  norge  regno 

ester  reest  reset  steer  stere  teres  terse  trees 

lapse  leaps  pales  peals  pleas  salep  sepal  spale 

laves  salve  selva  slave  vales  valse  veals 

least  salet  setal  slate  stale  steal  taels  tales  teals  tesla 

peris  piers  pries  prise  ripes  spier  spire 

alerts  alters  estral  laster  salter  slater  staler  talers 

aretes  easter  eaters  reseat  seater  teaser  teresa 

arrest  rarest  raster  raters  sartre  starer  terras 

aspers  parses  passer  repass  spares  sparse  spears 

canter  carnet  centra  cretan  nectar  recant  trance 

capers  carpes  casper  crapes  escarp  pacers  parsec  recaps  scrape  spacer 

carets  cartes  caster  caters  crates  reacts  recast  traces 

corset  cortes  coster  escort  rectos  scoter  sector 

daters  derats  stader  stared  sterad  trades  treads 

drapes  padres  parsed  rasped  spader  spared  spread 

estrin  inerts  insert  inters  niters  nitres  sinter  sterni  strine  trines 

ingres  reigns  renigs  resign  sering  signer  singer 

merits  mister  miters  mitres  remits  smiter  timers 

nestor  noster  noters  sterno  stoner  tenors  tensor  toners 

palest  palets  pastel  petals  plates  pleats  septal  staple 

agister  aigrets  gaiters  seagirt  stagier  strigae  triages 

aletris  realist  retails  saltier  saltire  slatier  tailers 

anestri  nastier  resiant  retains  retinas  retsina  stainer  stearin 

aridest  astride  diaster  disrate  staider  tardies  tirades 

earings  erasing  gainers  regains  reginas  searing  seringa 

esprits  persist  priests  spriest  sprites  stirpes  stripes 

alerting  altering  integral  relating  tanglier  teraglin  triangle 

angriest  astringe  ganister  gantries  granites  ingrates  rangiest 

estrange  grantees  greatens  negaters  reagents  sergeant  tangeres 

 

 

nStart=SECONDS()

LOCAL ox as dictionary.dict

ox=CREATEOBJECT("dictionary.dict")

*ox.DictNum=2 && Smaller dictionary

 

*Find all words into a table.

?ox.FindMatches("*")

?ox.Words.Count

CREATE TABLE  words (word c(25))

FOR i = 1 TO ox.Words.Count

      cWord=ox.Words.Item(i-1)

      INSERT INTO words VALUES (cWord)

ENDFOR

?"Now find anagrams"

 

CREATE CURSOR already (word c(25))

INDEX on word TAG word

SELECT word,LEN(TRIM(word)) as nlen FROM words WHERE LEN(TRIM(word)) > 9 ORDER BY 2 INTO CURSOR word10

SET PRINTER off

SET PRINTER  TO t.txt  

SET PRINTER on

SCAN

      IF !INDEXSEEK(word,.f.,"already")

            IF ox.FindAnagram(ALLTRIM(word),0) > 2

                  ?

                  FOR n = 1 TO ox.Words.Count

                        cWord=ox.Words.Item(n-1)

                        INSERT INTO already VALUES (cWord)

                        ??cWord," "

                  ENDFOR

            ENDIF

      ENDIF

ENDSCAN

SET PRINTER off

SET PRINTER TO

MODIFY FILE t.txt NOWAIT

?"Done in ",SECONDS()-nStart