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.

gebruikersnamen

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

Opgave

Schrijf een bash shell script gebruikersnamen waaraan één of twee argumenten moeten doorgegeven worden. Het eerst argument moet de naam van een persoon zijn, die uit meerdere woorden mag bestaan (bijvoorbeeld Donald Knuth). Als tweede argument kan de locatie van een tekstbestand aan het shell script doorgegeven worden. Dit tekstbestand moet een reeks woorden bevatten, die elk op een afzonderlijke regel staan. Indien er geen tweede argument aan het shell script wordt doorgegeven, dan moet het script de lijst van woorden inlezen uit standaard invoer.

Het shell script moet de alfabetisch gesorteerde lijst van woorden uit het gegeven bestand (tweede argument) die geldige gebruikersnamen zijn voor een persoon met de gegeven naam (eerste argument) uitschrijven naar standaard uitvoer. Woorden zijn geldige gebruikersnamen als ze voldoen aan de twee voorwaarden die door de organisatie uit de inleiding opgelegd worden. Hierbij moet onderscheid gemaakt worden tussen hoofdletters en kleine letters (case sensitive).

Bovendien moet het shell script ook de volgende drie opties ondersteunen:

Het shell script moet de volgende foutafhandeling voorzien:

Voorbeeld

Onderstaande voorbeeldsessie geeft aan hoe het shell script gebruikersnamen moet kunnen gebruikt worden. Hierbij gaan we ervan uit dat het tekstbestand words.txt3 zich in de huidige directory bevindt.

$ gebruikersnamen -m4 
Syntaxis: gebruikersnamen naam -i -m <int> -M <int> [woordenlijst]
$ echo $?
1
$ gebruikersnamen -M2 "Alan Turing" unknown
gebruikersnamen: bestand "unknown" bestaat niet of is onleesbaar
$ echo $?
2
$ gebruikersnamen -m4 "Donald Knuth" words.txt
oath
$ echo $?
0
$ gebruikersnamen -im4 "Donald Knuth" < words.txt
daut
doat
dolt
dona
donut
doth
oath
$ gebruikersnamen -M2 "Donald Knuth" words.txt
ad
ah
al
an
at
na
nu
od
oh
on
uh
ut
$ gebruikersnamen -m6 John von Neumann < words.txt
Syntaxis: gebruikersnamen naam -i -m <int> -M <int> [woordenlijst]
$ echo $?
1
$ gebruikersnamen -m5 -M6 "John von Neumann" < words.txt
honan
human
nonman
$ gebruikersnamen -m6 "Emmy Noether" < words.txt
mother
$ gebruikersnamen -m6 "Linus Torvalds" words.txt
gebruikersnamen: geen gebruikersnamen gevonden voor "Linus Torvalds"
$ echo $?
3