Het UUCP1 systeem voor elektronische mail — een van de oudste emailprotocollen — liet enkel toe om tekstuele informatie uit te wisselen tussen computersystemen. Om toch binaire bestanden te kunnen versturen, zocht men een manier om binaire data om te zetten naar tekst. Hiervoor gebruikte men een techniek die uuencoding2 genoemd wordt (afgeleid van Unix-to-Unix encoding). De codering van een binair bestand zag er dan bijvoorbeeld als volgt uit:

begin 644 bestand.txt
M22!F965L('9E<GD@<W1R;VYG;'D@86)O=70@>6]U(&1O:6YG(&1U='DN(%=O
M=6QD('EO=2!G:79E(&UE(&$@;&ET=&QE(&UO<F4@9&]C=6UE;G1A=&EO;B!A
M8F]U="!Y;W5R(')E861I;F<@:6X@1G)E;F-H/R!)(&%M(&=L860@>6]U(&%R
M92!H87!P>2#B@)0@8G5T($D@;F5V97(@8F5L:65V92!M=6-H(&EN(&AA<'!I
M;F5S<RX@22!N979E<B!B96QI979E(&EN(&UI<V5R>2!E:71H97(N(%1H;W-E
M(&%R92!T:&EN9W,@>6]U('-E92!O;B!T:&4@<W1A9V4@;W(@=&AE('-C<F5E
M;B!O<B!T:&4@<')I;G1E9"!P86=E<RP@=&AE>2!N979E<B!R96%L;'D@:&%P
3<&5N('1O('EO=2!I;B!L:69E+C P
`
end

Een uuencoded bestand begint met één regel koptekst, en eindigt met twee regels voettekst. Alle tussenliggende regels bevatten enkel karakters met een ASCII-waarde tussen 32 en 95, waardoor alle symbolen die in deze codering gebruikt worden afdrukbaar zijn.

Opgave

Elke regel van het tekstbestand uuencoded.txt3 bevat een reeks karakters die enkel bestaan uit hoofdletters, cijfers en leestekens (met ASCII-waarde tussen 33 en 95). Er komen dus geen kleine letters en spaties voor in de reeks karakters. Het aantal karakters in een reeks kan variëren van regel tot regel. Na de reeks karakters volgt nog een spatie en een woord dat enkel bestaat uit kleine letters. Gevraagd wordt:

  1. Bepaal reguliere expressies voor elk van onderstaande verzamelingen. Daarbij staat $$\mathcal{U}$$ voor de verzameling van alle mogelijke reeksen karakters zoals die voorkomen aan het begin van de regels uit het bestand uuencoded.txt4.

    • $$\alpha = \{u \in \mathcal{U}\,|\, u$$ bevat een punt, een vraagteken en een uitroepteken$$\,\}$$

      voorbeelden: I?D.(W1PT0']E~A&*3"B=/>?1~H19QK`!^3&BDY8R[3-/OZ\CEIP/N|COA[D motorcycle $$\in \alpha$$
        ~>]/G7F\D31KN^DDFMF1S&]W-\^M&`%F5]ZPF&{YE4*~>97]?2+PV@%/)6K5 lunula $$\not\in \alpha$$
    • $$\beta = \{u \in \mathcal{U}\,|\, u$$ bevat hoogstens twee opeenvolgende leestekens$$\,\}$$

      voorbeelden: *OIC$M$R3D6JONV0IV=?N{-5N&`9I:V.?L}/3.@ICT:1TCG3^2=)F(>6+5B) hydronium $$\in \beta$$
        5AL(*K>*2LZ>?34-\I~NV}R7PC"39<|3'#Z*Y}*3.>.9.UJJC{ET$.FI%~M3 adherend $$\not\in \beta$$
    • $$\gamma = \{u \in \mathcal{U}\,|\, u$$ begint met een hoofdletter die exact drie keer voorkomt in $$u\,\}$$

      voorbeelden: X^[<*'??X+BXK<:B7#;}V0|<|K!(P|HW}(1O@$JK_}}*.5H"Y&^A)D$QS97R snaking $$\in \gamma$$
        R1>7S_\R6[_KRLY]ZM}OD,7OH?.R(F00H^PEB[&X'R(!B_O<N|(*`&**OTB; penni $$\not\in \gamma$$
    • $$\delta = \{u \in \mathcal{U}\,|\,$$in $$u$$ worden ronde haakjes alternerend geopend en gesloten, en elk geopend rond haakje moet verderop ook terug afgesloten worden$$\,\}$$

      voorbeelden: U1~;15|ES!`"%H(HUQJE)_8T,R[(3~F-F,;}&/X-_<<M<J[9W)QPF36R*6F6 quassins $$\in \delta$$
        D8FZ!H@C:Q%QV57Z)4HLP-^R5V0.`:3Q>(#N2PG@*FDO](I1_;0Y]V={QPD= bitt $$\not\in \delta$$

      Ter info

      Reeksen zonder openende of sluitende ronde haakjes behoren per definitie tot $$\delta$$.

    Gebruik een commando uit de grep familie om enkel die regels van het bestand uuencoded.txt5 te selecteren die behoren tot de opgegeven verzameling.

  2. Beschouw de verzamelingen $$\alpha$$, $$\beta$$, $$\gamma$$ en $$\delta$$ zoals hierboven gedefinieerd. Gebruik nu deze verzamelingen om op de volgende manier een boodschap bestaande uit vier woorden te achterhalen:

    • het eerste woord staat op de unieke regel uit de verzameling $$\alpha \cap \beta$$

    • het tweede woord staat op de unieke regel uit de verzameling $$\beta \cap \gamma$$

    • het derde woord staat op de unieke regel uit de verzameling $$\gamma \cap \delta$$

    • het vierde woord staat op de unieke regel uit de verzameling $$\delta \cap \alpha$$

    Geef telkens een Unix commando dat elk van deze woorden opzoekt in het bestand en uitschrijft naar standaard uitvoer (zonder het patroon dat aan het woord voorafgaat). Hierbij is het dus niet toegelaten om het woord letterlijk uit te schrijven (bv. echo xxx).

Richtlijnen bij het indienen

Volg aandachtig onderstaande richtlijnen bij het indien van je oplossing voor deze opgave: