This is an old revision of the document!


Tema de casă 2 - Decriptare

Responsabili: Eugen Vasilescu

Termen de predare: 11 decembrie 2014, ora 23:55

Introducere

Criptarea este procesul de ascundere a informatiei pentru a o face ilizibila fara cunostinte speciale. Una dintre cele mai simple metode de criptare este criptarea prin deplasare. Astfel, avand un alfabet si o cheie k definim criptare prin deplasare inlocuirea fiecarei litere din textul initial cu o litera care se afla in alfabet la distanta k fata de cea inlocuita (alfabetul este circular, dupa z urmeaza a).

Cerința problemei

Subpunct a

Dandu-se o cheie si un un text criptat (format din litere mari, litere mici si semne de punctuatie), se doreste decriptarea acestuia folosind metoda prezentata anterior.

Exemplu: Textul “Fsf fwj rjwj.” cu o cheie de 5 devine “Ana are mere.”.

Subpunct b

Dupa realizarea decriptarii de la punctul a) se doreste eliminarea tuturor prefixelor cuvintelor din text. Astfel, avand un sir de prefixe introdus de la tastatura, pentru fiecare cuvant din text cautam prefixul de lungime maxima(daca exista) si il eliminam. De asemenea, cuvintele nou formate trebuie sa contina minim 2 caractere (cuvantul “prea” nu va deveni “a” daca avem “pre” in lsita de prefixe).

Exemplu: Cuvantul “interschimbare” devine “schimbare” daca prefixul “inter” se afla in lista. Daca in lista s-ar afla si prefixul “in”, cuvantul ar fi fost transformat tot in “schimbare” deoarece se ia in calcul prefixul cu lungime mai mare.

Subpunct c

Dupa realizarea modificarilor de la punctul b) se doreste aflarea celui mai frecvent cuvant din text si numarul de aparitii al acestuia, fara a se face diferenta intre litere mici si litere mari. In cazul in care avem mai multe cuvinte cu acelasi numar de aparitii se va afisa primul din punct de vedere lexicografic. Cuvantul gasit va fi scris doar cu litere mici.

Exemplu: Textul “Schimbare,Prefacut. nefacut interschimbare REFACUT,,prea” se transforma in “Schimbare,facut. facut schimbare FACUT,,ea” daca avem prefixele “pr re in inter ne p pre”, iar cel mai frecvent cuvant este “facut”, care apare de 3 ori.

Mențiuni

  • Memoria folosita pentru rezolvarea acestei probleme trebuie alocata dinamic;
  • Caracterele ce apar in text sunt litere mici, litere mari ale alfabetului englez si semne de punctuatie: ” ,.;!?-:”; Doar literele isi vor schimba valoarea in urma decriptarii, semnele de punctuatie ramanand neschimbate;
  • Definim cuvant o succesiune de litere mici sau mari ale alfabetului englez separate de unul sau mai multe semne de punctuatie;
  • In urma decriptarii, literele mici vor ramane mici, iar cele mari tot mari . Ex: “FSF” cu cheie de 5 devine “ANA” si “fsf” tot cu cheie de 5 devine “ana”;
  • Cuvintele pot fi separate de orice semn de punctiatie. Ex: textul “Ana n-are mere,pere,prune.” contine 6 cuvinte;
  • Cuvintele pot fi separate de asemenea de mai multe semne de punctuatie. Ex: textul “Ana ? n-are !., mere” contine 4 cuvinte.
  • Prefixele contin doar litere mici ale alfabetului englez

Format date intrare

Fisierul de intrare va contine 3 linii. Prima contine valoarea cheii cu care va fi realizata decriptarea, cea de-a 2a textul criptat, in timp ce ultima reprezinta o succesiune de prefixe separate printr-un singur spatiu.

Format date ieșire

Se vor afisa 3 linii, corespunzatoare rezultatelor celor 3 cerinte. Prima linie va contine textul decriptat, cea de-a 2a textul decriptat si modificat, iar ultima cel mai frecvent cuvand din text, precum si numar de aparitii al acestuia.

EXEMPLE INPUT

	5
	Xhmnrgfwj,Uwjkfhzy. sjkfhzy nsyjwxhmnrgfwj  WJKFHZY,,uwjf
	pr re in inter ne p pre
	3
	suh; Qxph: SUHQxph: QXPH ? SurQXPH sur uHQxph uhq!!
	pr anti pro des re in pre

EXEMPLE OUTPUT

	Schimbare,Prefacut. nefacut interschimbare  REFACUT,,prea
	Schimbare,facut. facut schimbare  FACUT,,ea
	facut 3
	pre; Nume: PRENume: NUME ? ProNUME pro rENume ren!!
	pre; Nume: Nume: NUME ? NUME pro Nume ren!!
	nume 5

Restrictii

  • 0 ≤ K ≤ 100000000
  • lungimea textului si numarul de prefixe nu se cunosc, dorindu-se alocarea dinamica a memoriei necesare pentru retinerea lor

Makefile

Makefile-ul va conține 2 target-uri: build și clean.

  • build: va compila programul și va genera executabilul tema2;
  • clean: va șterge fișierul executabil;

Observații

  • NU folosiți variabile globale!
  • Adaugați comentarii codului!
  • O temă care nu va compila se va nota automat cu 0.
  • Deși citirea datelor se face de la tastatură, testarea se va face pe baza unor fișiere utilizând redirectări:
			
        user@hostname ~ $ ./tema2 < input > output

Trimiterea temei

Fișierul sursă va fi trimis împreună cu Makefile-ul și un README (unde studentul va specifica pașii urmați pentru rezolvarea temei sau alte informații relevante). Aceste fișiere vor trebui arhivate (arhivă de tip zip), iar numele arhivei trebuie sa aibă următoarea formă:

			
                                Grupa_Nume_Prenume_Tema1.zip
                                
Eg:				312CB_Popescu_Mircea_Tema1.zip

Checker local

Checkerul poate fi rulat folosind comanda “bash checker.sh” pentru a verifica toate testele sau “bash checker.sh numarTest” pentru verificarea corectitudinii unui singur test.

ATENȚIE: Checker-ul, fișierele de input și cele de referință trebuie să se afle în același folder cu sursa.

programare/teme_2014b/tema2.1417063495.txt.gz · Last modified: 2014/11/27 06:44 by eugen.vasilescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0