Als Scrabble-speler moet je snel het potentieel van bepaalde lettercombinaties kunnen inschatten. Stel bijvoorbeeld dat je de zeven letters AIMNSTU op je rekje hebt staan. Naar welke achtste letter moet je dan kijken om een achtletterwoord te kunnen vormen? Om snel een antwoord te vinden op deze vraag gebruiken professionele Scrabble-spelers een geheugensteuntje dat een anamonic genoemd wordt. Het woord is zelf een samentrekking van anagram en mnemonic (Engels voor geheugensteuntje), maar om uit te leggen wat het precies betekent hebben we eerst nog wat andere concepten nodig.

anamonics

In de context van woordspelletjes zoals Scrabble of kruiswoordraadsels is een hook een letter die vooraan of achteraan een woord kan toegevoegd worden om een ander woord te vormen. De letter S is bijvoorbeeld een hook voor het woord HOOK omdat daarmee het woord SHOOK kan gevormd worden. Een anahook is een letter die kan toegevoegd worden aan een woord (of meer algemeen aan een reeks letters) waardoor een anagram1 van een bestaand woord ontstaat. De letter O is bijvoorbeeld een anahook voor het woord TSUNAMI omdat daarmee een anagram ontstaat van het woord MANITOUS. Dit zijn de negen anahooks van het woord TSUNAMI:

anahooks van TSUNAMI
TSUNAMI + C = TSUNAMIC
TSUNAMI + O = MANITOUS (of TINAMOUS)
TSUNAMI + A = AMIANTUS
TSUNAMI + S = TSUNAMIS
TSUNAMI + T = ANTISMUT
TSUNAMI + L = SIMULANT
TSUNAMI + H = HUMANIST
TSUNAMI + R = NATRIUMS (of NATURISM)
TSUNAMI + M = MANUMITS

Om alle anahooks van een woord te onthouden, zoekt men naar een zin die alle anahooks bevat (soms meerdere keren) en geen enkele andere letter. Het woord zelf wordt de stam genoemd en de zin van anahooks wordt dan de anamonic genoemd. Het wordt nog makkelijker om de anamonic te onthouden als die ook inhoudelijk verband houdt met de stam. Zo kunnen we bijvoorbeeld met de anahooks van het woord TSUNAMI de anamonic COASTAL HARM samenstellen.

Anamonics zijn interessant voor een Scrabble-speler omdat ze aangeven aan welke letters op het bord hij een stam kan aanleggen. Maar even belangrijk is dat hij op die manier snel kan nagaan dat hij geen kostbare tijd moet verspillen aan bepaalde combinaties van letters waarvan hun anamonic uitsluit dat ze zullen kunnen aangelegd worden.

Scrabble-spelers hebben het bedenken van interessante anamonics tot een ware kunstvorm verheven. De uitdaging is om een memorabele zin te bedenken met een beperkte verzameling van letters. Sommige daarvan zijn echt wel legendarisch:

stam anamonic
GERMAN LOST TO ALLIES
NATURE VISIT GOD'S SCHOOL
SENIOR OLD MVP JOGS WITH A CRUTCH
WAITER A MAN RAN PANS
LATRINE MOVING FUNNY SPICES
PAINTER GATHERED OILS
READING BED HABITS MOSTLY

Opgave

Schrijf een functie anahook waaraan twee strings moeten doorgegeven worden. Beide strings mogen enkel letters bevatten, zonder dat de functie dit expliciet moet controleren. Als er een letter bestaat die aan de eerste string kan toegevoegd worden om daarmee een anagram van de tweede string te vormen, dan moet de functie die letter teruggeven (als kleine letter). Anders moet de functie de waarde None teruggeven. De functie mag geen onderscheid maken tussen hoofdletters en kleine letters.

Gebruik nu de functie anahook om een een klasse Anamonic te schrijven waarmee anamonics kunnen gezocht worden voor een gegeven stam. Bij het aanmaken van objecten van de klasse Anamonic moet de locatie van een tekstbestand opgegeven worden. Elke regel van dat bestand moet een woord bevatten dat enkel uit letters bestaat. Voorts moet de klasse Anamonic minstens de volgende methoden ondersteunen:

Geen van deze methoden mag onderscheid maken tussen hoofdletters en kleine letters. Bij het bepalen van de anahooks van de gegeven stam moeten de methoden uitgaan van de woordenlijst uit het bestand dat bij initialisatie van het object werd opgegeven.

Voorbeeld

In onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand woordenboek.txt2 zich in de huidige directory bevindt.

>>> anahook('tsunami', 'MANITOUS')
'o'
>>> anahook('tsunami', 'humanist')
'h'
>>> anahook('tsunami', 'cartoons')

>>> anamonic = Anamonic('woordenboek.txt')
>>> anamonic.anahooks('TSUNAMI') == {'a', 'c', 'h', 'l', 'm', 'o', 'r', 's', 't'}
True
>>> anamonic.anahooks('RETAINS') == {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'w'}
True
>>> anamonic.anahooks('INMATE') == {'a', 'b', 'c', 'd', 'e', 'g', 'h', 'i', 'l', 'n', 'o', 'r', 's', 'x', 'y'}
True

>>> anamonic.isAnamonic('TSUNAMI', 'COASTAL HARM')
True
>>> anamonic.isAnamonic('INMATE', 'RELAXING BY HIS CELL DOOR')
True
>>> anamonic.isAnamonic('aurate', 'detect me')
True
>>> anamonic.isAnamonic('PRIEST', 'EVERYONE COMPLAINED OF THE SODOMY')
False
>>> anamonic.isAnamonic('PRIEST', 'EVERYONE COMPLAINED OF YOUTH SODOMY')
True

Epiloog

In zijn Word Ways artikel uit 2007 schreef Jeff Myers:

Een van de eerste anamonics die ik ooit te zien kreeg — het moet ergens rond 1998 geweest zijn — was

PRIEST: EVERYONE COMPLAINED OF THE SODOMY

Ik kon het eerst niet geloven. Alle letters van die zin — niet één letter meer en niet één letter minder — kunnen met het woord PRIEST gecombineerd worden om een zevenletterwoord te vormen.

Met de uitgave van de nieuwe Tournament Word List3 in 2006 werd het woord PERITUS plots ook een geldig woord. Dat is PRIEST + U, waardoor aan het ezelsbruggetje nu ook een extra U moest toegevoegd worden. Een eenvoudige oplossing is:

PRIEST: EVERYONE COMPLAINED OF YOUTH SODOMY

Dat is tegenwoordig misschien zelfs nog toepasselijker.

John Chew verzamelt online een canonieke lijst van anamonics op basis van de officiële Tournament Word List4 en op basis van de alternatieve SOWPODS5 woordenlijst. Laat het hem gerust weten als je zelf nog een goeie anamonic gevonden hebt.

Bronnen