ASCII-rajzok (2025. május - idegen nyelv)
Kategória: python - emelt szint
Feladat leírása

Karakteres képernyőn is megjeleníthetünk összetett ábrákat, rajzokat az ASCII-karakterek
segítségével. Az ASCII-kód jelkészlete az angol abc betűiből, számokból, írásjelekből és
vezérlő kódokból áll.
Készítsen programot, amely képes kétféle módon (tömörítetlen, tömörített) tárolt,
ASCII-karakterekből álló ábrákat megjeleníteni a képernyőn, statisztikát készíteni az ábrákról,
illetve az ábrák tömörített formáit tömörítetlen formára alakítani. A tömörítetlen ábrák mérete
a 100×100 karakternél nem nagyobbak.
A program forráskódját mentse ascii néven! A program megírásakor a bemeneti
állományban található, vagy a felhasználó által megadott adatok helyességét, érvényességét
nem kell ellenőriznie, feltételezheti, hogy azok a leírtaknak megfelelnek.
A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre
a feladat sorszámát (például: 2. feladat)! Ha a felhasználótól kér be adatot, jelenítse meg
a képernyőn, hogy milyen értéket vár! Az ékezetmentes kiírás is elfogadott.
Részfeladatok
1. A konyv.txt szöveges állomány egy könyvet ábrázoló ASCII-ábrát tartalmaz. Olvassa be ezt az állományt, és jelenítse meg a tartalmát a képernyőn!
2. Jelenítse meg többször egymás mellett a konyv.txt állományban található ábrát! Kérje be a felhasználótól az ábra ismétlődéseinek számát! Az ábrák után elválasztásként a „ | ” karakterláncot jelenítse meg! Ügyeljen arra, hogy az egyes sorok különböző hosszúságúak is lehetnek. Azt nem kell ellenőriznie, hogy az ábra az adott ismétlésszámmal valóban elfére egymás mellett a képernyőn.
3. Az ASCII-karaktereket tartalmazó állományokat tömöríthetjük is, ha az egymást követő ismétlődő karaktereket rövidebb kóddal helyettesítjük. Az alábbi mintán látható, hogy a könyvet ábrázoló ASCII-képet hogyan tároltuk el tömörítettlen, illetve tömörített formában.
4. Az ábrák tömörített változatai az alábbiak szerint állnak elő a tömörítetlen változatból
a) A tömörített állomány ugyanannyi sorból áll, mint a tömörítetlen
b) A tömörített állomány blokkok formájában tárolja el az ábrát. Egy blokk két karakter hosszú. A blokk első karaktere mindig egy 1 és 9 közti egész szám lehet. Ez jelzi, hogy a blokk második karaktere hányszor fordul elő közvetlenül egymás után az ábra adott sorában. A „2/” blokk tehát azt jelenti, hogy egymás után kétszer kell a / karaktert kirajzolni. A „4 ” blokk jelentése, hogy a szóköz karaktert négyszer kell kirajzolni egymás után.
c) Ha egy karakter 9-nél többször ismétlődik, akkor több blokkot kell elhelyezni egymás után. Ha például 12 alkalommal kell kirajzolni a „$” karaktert, akkor a tömörített állomány a '9$3$' blokkokat tartalmazná.
d) A blokkokat soronként tároljuk el a fájlban.
5. Készítsen függvényt atalakit néven, amely egy tömörített ábra egy sorát tömörítetlen formára alakítja! (Egy tömörített sor legfeljebb 200 karakterből állhat.)
6. Az szg_t.txt állomány tömörített formában tartalmaz egy rajzot. Alakítsa a tömörített ábrát tömörítetlen formába az atalakit függvény használatával, és szg.txt néven mentse el az eredményt, valamint jelenítse meg azt a képernyőn!
7. Izgalmas kérdés, hogy egy-egy ábrát milyen mértékben sikerült tömöríteni a fenti módszerrel. Kérje be a felhasználótól a tömörített, valamint tömörítetlen adatokat tartalmazó fájl neveit majd írja ki, hogy az egyes állományok hány karaktert tartalmaznak! A sorvégjel karaktereket (\r\n) ne vegye figyelembe! A következő sorban jelenítse meg a tömörítési arányt két tizedesjegyre kerekítve! A tömörítési arány a tömörített ábra karakterszáma osztva a tömörítetlen ábra karaktereinek számával.
8. Készítsen statisztikát a konyv_t.txt állományban található ábráról! A képernyőn jelenjen meg, hogy az ábra hány sorból áll, hány blokkot tartalmaz, valamint hogy mekkora az ábra szélessége karakterekben. Utóbbi adat a leghosszabb sor karakterszámát jelenti.