Mad Libs is een taalspelletje waarbij wordt vertrokken van een citaat 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 het ingevulde citaat of het vervolledigde verhaal luidop voorgelezen. Het resultaat is vaak komisch, surrealistisch en ietwat onzinnig.

Stel dat we bijvoorbeeld vertrekken van het volgende gedeeltelijke citaat.

______ 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.

madlibs madlibs madlibs madlibs madlibs madlibs

Opgave

Schrijf een klasse MadLibs waarvan de objecten kunnen gebruikt worden om een gegeven citaat 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 (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

> const 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.'