Een organisatie laat haar leden zelf een gebruikersnaam kiezen. Om wildgroei van onzinnige gebruikersnamen tegen te gaan, legt de organisatie wel volgende beperkingen op:

  1. gebruikersnamen mogen enkel bestaan uit letters

  2. gebruikersnamen moet kunnen gevormd worden door het schrappen van letters uit de naam van de gebruiker (voornaam + familienaam)

De gebruikers van de organisatie hebben er echter een sport van gemaakt om op zoek te gaan naar bestaande woorden die zo lang mogelijk zijn, en die toch aan de opgelegde beperkingen voldoen. Als je naam Danny Kyung of Matthew Emes is, dan bieden deze regels immers alsnog de mogelijkheid om gebruikersnamen zoals dank1 (Danny Kyung) of memes2 (Matthey Emes) te rechtvaardigen.

Knuth/Stallman
Knuth/Stallman

Voortaan kunnen we dus ook spreken van Donald "Donut" Knuth (Donald Knuth) en Richard "Catalan" Stallman (Richard Stallman).

Opgave

Voorbeeld

In onderstaande voorbeeldsessie gaan we ervan uit dat de tekstbestanden gebruikersnamen01.txt3 en gebruikersnamen02.txt4 zich in de huidige directory bevinden.

>>> isgeldig('donut', 'Donald Knuth')
True
>>> isgeldig('Aladin', 'Alan Turing')
False
>>> isgeldig('Cannon', 'Claude Shannon', lengte=8)
False

>>> gebruikersnamen(['Donald Knuth', 'Alan Turing', 'Claude Shannon'], 'gebruikersnamen01.txt')
{'Donald Knuth': {'Donut'}, 'Alan Turing': {'Alanin', 'Anting'}, 'Claude Shannon': {'Cannon'}}
>>> gebruikersnamen(['Ada Lovelace', 'Konrad Zuse', 'Grace Hopper'], 'gebruikersnamen02.txt')
{'Ada Lovelace': {'dolce', 'adel', 'doel'}, 'Konrad Zuse': {'kade', 'knus', 'kous', 'oase'}, 'Grace Hopper': {'racer', 'chopper', 'rapper'}}
>>> gebruikersnamen(['Ada Lovelace', 'Konrad Zuse', 'Grace Hopper'], 'gebruikersnamen02.txt', lengte=5)
{'Konrad Zuse': set(), 'Ada Lovelace': {'dolce'}, 'Grace Hopper': {'rapper', 'chopper', 'racer'}}