Mad Libs is een taalspelletje waarbij wordt vertrokken van een quote of een kort verhaaltje waarin bepaalde sleutelwoorden zijn weggelaten. Onder elk weggelaten woord wordt een lexicale of andere categorie aangegeven, zoals “zelfstandig naamwoord”, “werkwoord”, “plaats” of “lichaamsdeel”. Een speler vraagt de andere spelers beurtelings om een bepaald woord te suggereren binnen de categorie die onder het volgende weggelaten woord staat, zonder daarbij de context te onthullen waarin het woord moet gebruikt worden. Op het einde wordt de ingevulde quote of het vervolledigde verhaal luidop voorgelezen. Het resultaat is vaak komisch, surrealistisch en ietwat onzinnig.

Stel dat we bijvoorbeeld vertrekken van de volgende gedeeltelijke quote.

______ created ______ so that __________ would learn ____________.
 Naam           ding           INWONERS               discipline

De ontbrekende woorden zouden dan op de volgende manier kunnen ingevuld worden

God created war so that AMERICANS would learn geography.

of evengoed op de volgende manier

Mercator created maps so that BELGIANS would learn navigation.

Dit spelletje werd in 1953 uitgevonden door Leonard Stern en Roger Price, en sinds de reeks voor het eerst werd uitgegeven in 1958 werden alleen al binnen de Verenigde Staten meer dan 110 miljoen exemplaren verkocht van de Mad Libs boeken.

Opgave

Schrijf een klasse MadLibs waarvan de objecten kunnen gebruikt worden om een gegeven quote of verhaal waarin sleutelwoorden weggelaten werden, aan te vullen op basis van woorden die willekeurig gekozen werden uit bepaalde categorieën. Elk object van deze klasse moet beschikken over een eigenschap woordenschat die verwijst naar een ander object. Dit object stelt de woordenschat voor die het MadLibs object aangeleerd gekregen heeft. Initieel is dit woordenschat-object nog leeg, maar tijdens de levensduur van het MadLibs object kan er nieuwe informatie aan toegevoegd worden, of kan de informatie in het woordenschat-object geraadpleegd worden bij het aanroepen van de volgende methoden die minimaal door de klasse MadLibs moeten ondersteund worden:

Voorbeeld

>> var madlib = new MadLibs();
>> madlib.woordenschat;
{}

>> madlib.leren('naam', 'God');
>> madlib.leren('ding', 'war');
>> madlib.leren('inwoners', 'Americans');
>> madlib.leren('discipline', 'geography');
>> madlib.woordenschat;
{'ding': ['war'], 'naam': ['god'], 'discipline': ['geography'], 'inwoners': ['americans']}
>> madlib.suggereren('naam');
'god'
>> madlib.suggereren('NAAM');
'GOD'
>> madlib.suggereren('Naam');
'God'
>> madlib.invullen('_Naam_ created _ding_ so that _INWONERS_ would learn _discipline_.');
'God created war so that AMERICANS would learn geography.'

>> madlib.leren('naam', ['Mercator', 'Caesar']);
>> madlib.leren('ding', ['maps', 'coordinates']);
>> madlib.leren('inwoners', ['Belgians', 'Martians', 'Germans'])
>> madlib.leren('discipline', 'navigation');
>> madlib.leren('discipline', 'colonisation');
>> madlib.woordenschat;
{'ding': ['maps', 'war', 'coordinates'], 'naam': ['god', 'caesar', 'mercator'], 'discipline': ['colonisation', 'navigation', 'geography'], 'inwoners': ['belgians', 'americans', 'germans', 'martians']}
>> madlib.invullen('_Naam_ created _ding_ so that _INWONERS_ would learn _discipline_.');
'Mercator created maps so that BELGIANS would learn geography.'
>> madlib.invullen('_Naam_ created _ding_ so that _INWONERS_ would learn _discipline_.');
'Mercator created war so that BELGIANS would learn navigation.'