In deze opgave willen we het rijmschema van een gegeven gedicht bepalen. Hiervoor beschikken we over een tekstbestand waarin woorden aan hun uitspraak gekoppeld worden. Het bestand begint met een aantal commentaarregels die starten met een hekje (#). Deze mogen genegeerd worden. Daarna staat op elke regel een woord (in hoofdletters) en zijn uitspraak. De regel

PROGRAMMING  P R OW1 G R AE2 M IH0 NG

geeft bijvoorbeeld aan hoe het woord programming moet uitgesproken worden. Het woord wordt hierbij gescheiden van zijn uitspraak door één of meer witruimtekarakters (het woord zelf bevat geen witruimtekarakters), en de uitspraak wordt beschreven door een reeks fonemen die telkens van elkaar gescheiden worden door één spatie. In totaal wordt er voor het beschrijven van de uitspraak gebruik gemaakt van 39 fonemen (15 klinkers en 24 medeklinkers; fonemen bestaan enkel uit hoofdletters). Elke klinker heeft drie mogelijke klemtonen die worden aangegeven door een cijfer op het einde van het foneem (0 indien geen nadruk, 1 indien primaire nadruk en 2 indien secundaire nadruk). In totaal worden er dus 69 symbolen gebruikt om de uitspraak weer te geven.

AA odd     AA D
AE at      AE T
AH hut     HH AH T
AO ought   AO T
AW cow     K AW
AY hide    HH AY D
B  be      B IY
CH cheese  CH IY Z
D  dee     D IY
DH thee    DH IY
EH Ed      EH D
ER hurt    HH ER T
EY ate     EY T
F  fee     F IY
G  green   G R IY N
HH he      HH IY
IH it      IH T
IY eat     IY T
JH gee     JH IY
K  key     K IY
L  lee     L IY
M  me      M IY
N  knee    N IY
NG ping    P IH NG
OW oat     OW T
OY toy     T OY
P  pee     P IY
R  read    R IY D
S  sea     S IY
SH she     SH IY
T  tea     T IY
TH theta   TH EY T AH
UH hood    HH UH D
UW two     T UW
V  vee     V IY
W  we      W IY
Y  yield   Y IY L D
Z  zee     Z IY
ZH seizure S IY ZH ER

Er zijn echter ook woorden die meerdere alternatieve uitspraken hebben. In het tekstbestand wordt elk van deze alternatieven weergegeven op een afzonderlijke regel. De alternatieven worden genummerd door na het woord in hoofdletters een getal tussen ronde haakjes te plaatsen. Zo geven de regels

DONKEY  D AA1 NG K IY0
DONKEY(2)  D AO1 NG K IY0

twee alternatieve uitspraken aan van het woord donkey.

Opgave

De uitgang van een uitspraak wordt bepaald als de suffix (substring die loopt tot het einde van de uitspraak) die begint bij de laatste klinker met primaire of secundaire nadruk, of aan het begin van de uitspraak als er geen benadrukte klinkers zijn. Het resterende deel (de prefix voor die laatste klinker) wordt de stam van de uitspraak genoemd. De uitspraak P R OW1 G R AE2 M IH0 NG heeft dus stam P R OW1 G R en uitgang AE2 M IH0 NG.

We zeggen dat twee woorden rijmen als hun uitspraak dezelfde uitgang heeft. Hierbij houden we voor deze opgave enkel rekening met de eerste alternatieve uitspraak van een woord. Alle alternatieven met een getal tussen ronde haakjes na het woord worden met andere woorden genegeerd. Bovendien houden we bij het vergelijken van de uitgangen geen rekening met mogelijke klemtoonverschillen in de uitgang. Voor het woord programming gebruiken we bij het bepalen van de rijmwoorden dus de uitgang AE M IH NG (zonder klemtonen 0, 1 en 2).

Gevraagd wordt om een bash shell script rijmschema te schrijven waaraan twee argumenten moeten doorgegeven worden: i) een tekstbestand met enkele regels van een gedicht en ii) een tekstbestand waarin woorden aan hun uitspraak gekoppeld worden. Het shell script moet naar standaard uitvoer een regel uitschrijven met daarin het rijmschema dat gebruikt wordt in het gedicht. Dit rijmschema bestaat uit een reeks hoofdletters die aangeven wat de uitgang is van het laatste woord op de opeenvolgende regels van het gedicht. De uitgang van het laatste woord op de eerste regel wordt altijd aangeduid met de hoofdletter A. Als het laatste woord op de volgende regel een uitgang heeft die we nog niet zijn tegengekomen, dan wordt die aangeduid met de eerstvolgende ongebruikte hoofdletter van het alfabet. Anders wordt die aangeduid met de hoofdletter die we al hadden toegekend aan die uitgang.

Om het laatste woord van een regel te bepalen, gebruiken we de definitie dat de woorden van een regel gevormd worden door de langst mogelijke opeenvolging van letters. Regels van het gedicht die geen woorden bevatten moeten genegeerd worden bij het bepalen van het rijmschema.

Voor deze opgave is het niet nodig dat het shell script foutafhandeling voorziet voor de argumenten die aan het shell script worden doorgegeven. Je mag er dus altijd van uitgaan dat er twee geldige bestandslocaties aan het shell script doorgegeven worden. Bovendien mag het shell script ervan uitgaan dat het bestand met de uitspraken de uitspraak vastlegt van alle laatste woorden op alle regels van het bestand dat de tekst van het gedicht bevat.

Voorbeeld

Onderstaande voorbeeldsessie geeft aan hoe het shell script rijmschema moet kunnen gebruikt worden. Hierbij gaan we ervan uit dat de tekstbestanden gedicht01.txt1, gedicht02.txt2, gedicht03.txt3, gedicht04.txt4, gedicht05.txt5 en het tekstbestand c06d6 zich in de huidige directory bevinden.

$ cat gedicht01.txt
A bather whose clothing was screwed
By winds that left her quite nude
Saw a man come along
And unless we are wrong
You expected this line to be lewd.
$ rijmschema gedicht01.txt c06d
AABBA
$ echo $?
0
$ rijmschema gedicht02.txt c06d
AABBA
$ rijmschema gedicht03.txt c06d
ABCBBB
$ rijmschema gedicht04.txt c06d
AABCCC
$ rijmschema gedicht05.txt c06d
ABAAB