A feladatok legkésőbb október közepén ki lesznek írva.
A megoldásokat tartalmazó fájlokat levél mellékleteként ("pine" Attchment) küldje el az alul is megadott progkor@fi.inf.elte.hu címre.
(Vigyázat, a "fi" gépről van szó! Erre a címre a megoldásokat küldje, olyan levelet, amire "választ" vár, "csa@inf.elte.hu"-nak küldjön.)
A fájlok neve kezdődjön a unix szóval (csupa kis betűkkel!). Ezt minden feladat esetén a feladat sorszáma (1, 2, ...) kövesse. Ha egy feladat megoldása további fájlokból áll,
azok neve kezdődjön ugyanúgy, mint a megoldás "fő"-fájljáé, és kapjon valami "kiterjesztést"-t.
Pl. a 3. feladat megoldása a unix3 fájlba kerüljön, s ha további két fájl tartozik a megoldáshoz, akkor ezek neve lehet pl. unix3.awkpar ill. unix3.sedpar.
(A szabálytalan neveket (pl. UNIX1, Unix1, unix01, unix1.sh, bead1 (unix1 helyett), unix1teszt) kénytelen vagyok átnevezni a feladatok értékelés előtt (ha nem veszem észre, értékelve sem lesznek).)
Minden szabálytalan fájlnév -1 pontot ad a zh eredményéhez!
Nem szabad tesztadatokat és teszt eredményeket beküldeni!
A scripteket külön-külön Attachment-ként, a megfelelő néven küldje be, (egy levélben akárhány fájlt). (Vagyis ne küldjön csomagolt (tar, zip, gzip, stb) fájlt!)
Csak igen indokolt esetben álljon a megoldás több fájlból. Írjon "alscript" helyett inkább function-t!
Mindenképp tesztelje és biztosítsa (alscript esetén), hogy akkor is működik a megoldása, ha az egy feladat megoldására szolgáló scriptek azonos directoryban vannak, de az nem programkönyvtár,
és (a script futtatásakor) nem az a munkadirectory.
Tehát a levél maga soha ne tartalmazza a megoldást ! (Kommentárokat se, a levelet el sem fogom olvasni, tehát legyen teljesen üres! Ennek megfelelően, minden,
a megoldásra vonatkozó kommentárt a megoldást tartalmazó fájlokba tegyen, ill. a -help-be írja - ld. alább.)
Próbálja ki a panda-n és a pandora-n a beadott feladatokat akkor is, ha nem azokon készíti.
Azokon kell működni a scripteknek. Az ékezetes betűk kezelésével kapcsolatos eltérő beállítások miatt inkább a panda-t ajánlom a tesztelésre.
(Külön lapon talál az ékezetes betűk kezelésével kapcsolatos leírást. Olvassa el, ha ezzel kapcsolatos gondja akad.)
Fontos, mindegyik Unix beadandóra vonatkozó kötelező részfeladat:
Ha a parancsfájlt a "-help" (nem --help!) opcióval hívják meg, akkor nem a feladatát kell
ellátnia, hanem a standard outputra ki kell írnia minden fontos, a scriptre vonatkozó információt,
de legalább az alábbiakat:
Ha a feladat nem ír elő mást, akkor sikeres normál végrehajtás vagy "-help" esetén 0, hibaesetekben pedig 1 legyen a parancsfájl státusz kimenete,
az esetleges hibaüzenetek a standard error-ra kerüljenek, és minden hibaüzenet sor végén felkiáltójel (!) legyen!
Ha egy parancsfájl ideiglenes fájlokat (más szóval munkafájlokat) vagy directorykat hoz létre, akkor:
Tesztfájl neve ne legyen "beégetve" a scriptbe.
A script csak azt írja ki, amit a feladat kér! Tehát ne legyen benne (ha nem kéri a feladat) képernyő törlés ("clear" parancs),
a script ne írjon kéretlen kommentárokat (pl. a script saját magának vagy a készítőjének a "reklámozása", kommentárok, üres sorok, ...).
A Unix parancsok sem tesznek ilyet.
Ha a feladat nem kéri, ne jelenjenek meg semmilyen esetben Unix parancsok hibaüzenetei a képernyőn!
Csak az itt leírtaknak megfelelő megoldást fogadom el. (Ezt tudom Unix scripttel feldolgozni.)
A tananyagban nem szereplő, Unix alatt (is) használható programozási eszközökkel (pl. c, perl, Pascal) megvalósított megoldásokat nem fogadunk el.
Shell scriptet kell írni, vagyis a "/bin/bash script_neve" paranccsal végrehajtható parancsfájlt.
Tehát ha pl. awk programot ír, akkor az awk-t direkt meg kell hívnia a shell scriptnek, a tesztelő program nem fogja jól futtatni a "#!/bin/awk" kezdetű awk scripteket.
A feladatokat mindenkinek egyedül kell megoldania, semmiféle "csapatmunka" nem megengedett !
Nem működő beadott annyival rosszabb a be se adottnál, hogy az azt kiértékelőt feleslegesen dolgoztatja. A nem tesztelt beadott nem számít beadottnak, az utólagos
javítására nincs lehetőség! (Annyit sem ér, mint ha be se küldte volna.)
Az elküldéskor a pine-ba "Cc:"-ként írja be a saját címét, így hamar ellenőrízheti, hogy mit küldött.
Megjegyzések:
Töltse le a teszt.tgz fájlt, és csomagolja ki:
A kapott TESZT directory teszt1, teszt2, ... aldirectoryjaiban a következők vannak:
Amelyik script nem jut túl sikerrel ezeken a tesztadatokon és a "-help" teszten, azt
"teszteletlennek" minősítjük, ami a beadott megoldás "diszkvalifikálása".
("Teszteletlennek" minősítjük még az olyan megoldást, amibe a kiadott tesztadatokra történő helyes
működés be van drótozva. Más szóval: ami szemmel láthatóan csak azokra működik.)
Másik lapon
egy korábbi félév beadandóira talál (akkor elfogadott) megoldásokat.
A beadást követő egy héten belül (az utolsó két héten egy-két napon belül) felkerül a neve és a beadott feladatainak a directory listája egy
másik html-lapra. Ha ez nem történik meg, reklamáljon, és küldje újra a megoldásokat.
ASCII art. (Külön lapon vannak a feladatkiírás lényegéhez nem tartozó megjegyzések.)
Szöveg tagolás.
Táblázat átrendezés.
Betű és szó gyakoriság. (Külön lapon vannak a feladatkiírás lényegéhez nem tartozó megjegyzések.)
szövegből ezt csinálja:
Vagyis az mxn-es nagyítás minden jel helyébe annak nxm-es mátrixát teszi.
A "-mxn"-es kicsinyítés a "+mxn"-es nagyítás előtti állapotot állítja vissza.
Pontosabban mondva: az 1., m+1., 2*m+1., ... oszlopokat ill. az 1., n+1., 2*n+1., ... sorokat hagyja meg.
Megjegyzések:
Írjon szűrőt, ami vagy a paraméterként kapott fájlt vagy a standard
inputot dolgozza fel. Az input sorait hasonlóan kell hasábokba rendezni,
mint ahogy az ls parancs az outputját a -C -w81 opció hatására teszi.
A pontos szabályok:
Formálisan leírva az input szerkezete a következő ("<TAB>" jelöli a tabulátorjelet):
Az ebből kapott output szerkezete az alábbi legyen (a kettőspont után egyetlen helyköz van,
az adatsoroknak megfelelő output blokkokat (teljesen) üres sorok választják el egymástól):
Feltételezhetjük, hogy a nem üres input fájl szerkezete jó (és van legalább 2 sora), erre vonatkozó ellenőrzést nem
kell végezni, hibásnak tekinthető adattal akárhogy működhet a script.
Feltételezhetjük, hogy a "fejléc" adatokban nincs kettőspont.
Itt is feltételezhetjük azt is, hogy a nem üres input fájl szerkezete jó, erre vonatkozó ellenőrzést nem
kell végezni, hibásnak tekinthető adattal akárhogy működhet a script.
A mátrix első oszlopában a szövegekben előforduló összes betűk álljanak, kisbetűként, (kód)ABC sorrendben.
Mindegyiknek a sorában az egyes fájlokban való előfordulási darabszámai álljanak, a fájlok megadási sorrendjében.
Vagyis egy sor egy betűnek, a 2., ... oszlopok egy-egy input fájlnak felelnek meg.
(Tehát nullák is lehetnek a mátrixban, csupa nulla oszlop is, de olyan sor nem, ami az első oszloptól eltekintve csak nullát tartalmaz.)
Az elkészítendő Unix script paraméterei a szövegfájlok nevei. Az eredményt
a standard outputra kell írni, az egy sorban levő információkat egy-egy
helyközzel kell egymástól elválasztani.
A mátrix első oszlopában a szövegekben előforduló összes szavak álljanak, csupa kisbetűkkel, (kód)ABC sorrendben.
Mindegyiknek a sorában az egyes fájlokban való előfordulási darabszámai álljanak, a fájlok megadási sorrendjében.
Vagyis egy sor egy szónak, a 2., ... oszlopok egy-egy input fájlnak felelnek meg.
(Tehát nullák is lehetnek a mátrixban, csupa nulla oszlop is, de olyan sor nem, ami az első oszloptól eltekintve csak nullát tartalmaz.)
Az elkészítendő Unix script paraméterei a szövegfájlok nevei. Az eredményt
a standard outputra kell írni, az egy sorban levő információkat egy-egy
helyközzel kell egymástól elválasztani.
Csak a panda-ról, pine-al küldött levelekben fogadok el Unix beadandókat!
Lehetőleg kettőnél nem több részletben küldje be a megoldásokat.
(Ugyanazon feladat többszöri küldése esetén csak az utolsó küldés lesz feldolgozva.)
A levél SUBJECT-je legyen "Unix-beadando".
TMP1=`mktemp /tmp/$USER.XXXXXXXX`; ... >"$TMP1"
(Directoryhoz kell a "-d" opció.)
A puskázás gyanúját is kerülje ! (Puskázásból több baja származhat a beadottakkal kapcsolatban, mint akármi másból.)
tar -xvzf teszt.tgz
A pand(or)a-n egyszerűbb így megszerezni:
tar -xvzf /h/public/c/csa/public_html/200506.1/teszt.tgz
A feladatok.
1. feladat.
Írjon szűrőt, ami vagy az utolsó paraméterként kapott fájlt vagy a standard
inputot dolgozza fel. Az input egy szövegfájl, aminek a sorait
(vízszintesen) tükrözni kell a szöveg középvonalára.
A sorok nem feltétlenül azonos hosszúságúak. A rövidebbeket jobbról helyközökkel
(a leghosszabb sorral azonos hosszuságúra) kiegészítve kapott, téglalap alakú szöveget kell tükrözni.
Ha az input nem téglalap alakú, akkor az eredménysorok végén levő helyközöket le kell vágni.
A script az alábbi opciókat is kaphatja. Egyiket (első paraméterként), vagy mindegyiket (első két paraméterként, akármilyen sorrendben).
mit : ( ) < > \ / ` ' ] [ } {
mire: ) ( > < / \ ' ` [ ] { }
2. feladat.
Írjon szűrőt, ami vagy az utolsó paraméterként kapott fájlt vagy a standard
inputot dolgozza fel. Az input egy szövegfájl, amit a bal felső sarka körül
90 fokkal el kell forgatni, az óramutató járásával ellenkező irányban.
Vagyis az első sorból lesz az első oszlop, az utolsó oszlopból az első sor.
Az input sorai nem feltétlenül azonos hosszúságúak. A rövidebbeket jobbról helyközökkel
(a leghosszabb sorral azonos hosszuságúra) kiegészítve kapott, téglalap alakú szöveget kell tükrözni.
Az eredmény elején és végén keletkezhetnek üres sorok, ezeket nem szabad kiírni.
(A belső üres sorokat meg kell hagyni.) Üresnek tekintsük az olyan sort is, amiben csak valahány helyköz van.
Ha a script első paramétere "-c", akkor az alábbi jel-cseréket rendre végre kell hajtani:
mit : \ / ` , ' _ - |
mire: / \ , ' , | | _
3. feladat.
Írjon szűrőt, ami vagy a 2. paraméterként kapott fájlt vagy a standard
inputot dolgozza fel. Az input egy szövegfájl, amit vízszintesen és függőlegesen is
nagyítani vagy kicsinyíteni kell. Hogy mennyivel, azt az első paraméter mondja meg, ami
nagyításnál "+mxn", kicsinyítésnél "-mxn" alakú, ahol "m" és "n" mindegyike 1 és 9 közé eshet.
A nagyítás abból áll, hogy oszlopokat m-szer tesszük egymás mellé, a sorokat pedig n-szer egymás alá.
Pl. a "+3x2"-es nagyítás az
ABCD
1234AAABBBCCCDDD
AAABBBCCCDDD
111222333444
1112223334444. feladat.
Írjon szűrőt, ami vagy a paraméterként kapott fájlt vagy a standard
inputot dolgozza fel. Az input sorait hasonlóan kell hasábokba rendezni,
mint ahogy az ls parancs az outputját a -C -w81 opció hatására teszi.
A pontos szabályok:
Feltételezhetjük, hogy az input sorai legalább 1 jelet tartalmaznak és nem tartalmaznak a megjelenítést erősen
zavaró, a 32-es (0x20) kódú helyköznél kisebb kódú jeleket. (A sorvége jeleket nem
tekintem a sor részének ebből a szempontból.)
5. feladat (nehéz).
A feladat abban különbözik az előzőtől, hogy itt nem azonos az oszlopok szélessége.
(Bold-dal szedtem a változásokat.)
Feltételezhetjük, hogy az input sorai legalább 1 jelet tartalmaznak és nem tartalmaznak a megjelenítést erősen
zavaró, a 32-es (0x20) kódú helyköznél kisebb kódú jeleket. (A sorvége jeleket nem
tekintem a sor részének ebből a szempontból.)
Megjegyzések:
6. feladat.
Írjon szűrőt, ami vagy a paraméterként kapott fájlt vagy a standard
inputot dolgozza fel. Az input olyan táblázat, ami egy fejléc sorból és adatsorokból áll.
Mindegyikben ugyanannyi adat van, az adatokat TABulátorjel választja el egymástól.
Pl. az MS-Excel programmal hozhatunk létre (vagy dolgozhatunk fel) ilyen fájlokat.
fejlec1<TAB>fejlec2<TAB>...<TAB>fejlecm
adat_11<TAB>adat_12<TAB>...<TAB>adat_1m
adat_21<TAB>adat_22<TAB>...<TAB>adat_2m
...
adat_n1<TAB>adat_n2<TAB>...<TAB>adat_nmfejlec1: adat_11
fejlec2: adat_12
...
fejlecm: adat_1m
fejlec1: adat_21
fejlec2: adat_22
...
fejlecm: adat_2m
...
fejlec1: adat_n1
fejlec2: adat_n2
...
fejlecm: adat_nm7. feladat.
Írjon szűrőt, ami vagy a paraméterként kapott fájlt vagy a standard
inputot dolgozza fel. Az input az előző feladat outputjához hasonló szerkezetű,
amit az ottani inputnak megfelelő formára kell alakítani.
8. feladat.
Adott "n" db szövegfájl, az "n" nem rögzített. Az ezekben előforduló betűkre kell betű gyakorisági mátrixot készíteni.
Betűnek az angol ABC 26 betűje és a magyar ékezetes betűk (kis és nagy áéíóöőúüű, az ISO-8859-2 kódtábla szerinti kóddal) számítanak,
kis- és nagybetűk között nem szabad különbséget tenni. (Az egyéb jeleket figyelmen kívül kell hagyni.)
Megengedett, hogy egy fájlban egyetlen betű sincs.
9. feladat (nehéz).
Adott "n" db szövegfájl, az "n" nem rögzített. Az ezekben előforduló szavakra kell
szó gyakorisági mátrixot készíteni. A szavak egymásutáni betűkből (legalább egyből) állnak.
Betűnek az angol ABC 26 betűje és a magyar ékezetes betűk (kis és nagy áéíóöőúüű, az ISO-8859-2 kódtábla szerinti kóddal) számítanak,
kis- és nagybetűk között nem szabad különbséget tenni. Szóelhatárolónak számít minden egyéb jel.
Megengedett, hogy egy fájlban egyetlen szó sincs.
| Csizmazia Albert | progkor@fi.inf.elte.hu |