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 bestaat uit een patroon $$p \in \mathcal{P}$$, gevolgd door één enkele spatie en een woord $$w \in \mathcal{W}$$. De verzameling $$\mathcal{P}$$ bevat alle reeksen van één of meer hoofdletters, cijfers en leestekens (met ASCII-waarde tussen 33 en 95). Er komen dus geen kleine letters en spaties voor in die reeksen karakters. De verzameling $$\mathcal{W}$$ bevat alle woorden die enkel bestaan uit kleine letters. Gevraagd wordt:

  1. Bepaal zo kort mogelijke reguliere expressies voor de volgende deelverzamelingen van $$\mathcal{P}$$:

    • $$\mathcal{P}_1 = \{p \in \mathcal{P}\,|\, p$$ 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 \mathcal{P}_1$$
        ~>]/G7F\D31KN^DDFMF1S&]W-\^M&`%F5]ZPF&{YE4*~>97]?2+PV@%/)6K5 lunula $$\not\in \mathcal{P}_1$$
    • $$\mathcal{P}_2 = \{p \in \mathcal{P}\,|\, p$$ bevat hoogstens twee opeenvolgende leestekens$$\,\}$$

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

      voorbeelden: X^[<*'??X+BXK<:B7#;}V0|<|K!(P|HW}(1O@$JK_}}*.5H"Y&^A)D$QS97R snaking $$\in \mathcal{P}_3$$
        R1>7S_\R6[_KRLY]ZM}OD,7OH?.R(F00H^PEB[&X'R(!B_O<N|(*`&**OTB; penni $$\not\in \mathcal{P}_3$$
    • $$\mathcal{P}_4 = \{p \in \mathcal{P}\,|\,$$in $$p$$ 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 \mathcal{P}_4$$
        D8FZ!H@C:Q%QV57Z)4HLP-^R5V0.`:3Q>(#N2PG@*FDO](I1_;0Y]V={QPD= bitt $$\not\in \mathcal{P}_4$$

      Ter info

      Reeksen zonder openende of sluitende ronde haakjes behoren per definitie tot $$\mathcal{P}_4$$.

    Geef telkens een Unix commando waarin de reguliere expressie gebruikt wordt door een commando uit de grep familie om enkel de regels van het tekstbestand naar stdout te schrijven waarvan het patroon $$p$$ behoort tot $$\mathcal{P}_i\ (i = 1, 2, 3, 4)$$.

  2. Bepaal als volgt de woorden $$w_1\ w_2\ w_3\ w_4$$ van een geheime boodschap:

    • het woord $$w_1$$ staat op de unieke regel waarvan $$p$$ behoort tot $$\mathcal{P}_1 \cap \mathcal{P}_2$$

    • het woord $$w_2$$ staat op de unieke regel waarvan $$p$$ behoort tot $$ \mathcal{P}_2 \cap \mathcal{P}_3$$

    • het woord $$w_3$$ staat op de unieke regel waarvan $$p$$ behoort tot $$\mathcal{P}_3  \cap \mathcal{P}_4$$

    • het woord $$w_4$$ staat op de unieke regel waarvan $$p$$ behoort tot $$\mathcal{P}_4 \cap \mathcal{P}_1$$

    Geef telkens een Unix commando waarin de reguliere expressies voor de verzamelingen $$\mathcal{P}_i\ (i = 1, 2, 3, 4)$$ gebruikt worden door commando's uit de grep familie om het woord $$w_j\ (j = 1, 2, 3, 4)$$ op te zoeken in het tekstbestand en uit te schrijven naar stdout. Hierbij is het niet toegelaten om het woord $$w_j$$ letterlijk uit te schrijven (bv. echo $$w_j$$).