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.
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 |
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:
Een methode anahooks waaraan een string moet doorgegeven worden die enkel uit letters bestaat. Dit argument stelt een gegeven stam voor. De methode moet een verzameling teruggeven met alle anahooks van de gegeven stam. Deze verzameling mag enkel kleine letters bevatten.
Een methode isAnamonic waaraan twee stringargumenten moeten doorgegeven worden: i) een stam (een woord dat enkel bestaat uit letters) en ii) een zin die naast letters ook nog andere karakters mag bevatten. De methode moet een Booleaanse waarde teruggeven die aangeeft of de gegeven zin een anamonic is van de gegeven stam.
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.
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
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.