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 informației pentru a o face ilizibilă fără cunoștințe speciale. Una dintre cele mai simple metode de criptare este criptarea prin deplasare. Astfel, având un alfabet și o cheie k, definim criptare prin deplasare ca înlocuirea fiecărei litere din textul inițial cu o literă care se află în alfabet la distanță k față de cea înlocuită (alfabetul este circular, dupa z urmează a).

Cerința problemei

Subpunct a

Dându-se o cheie și un un text criptat (format din litere mari, litere mici și semne de punctuație), se dorește decriptarea acestuia folosind metoda prezentată anterior.

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

Subpunct b

După realizarea decriptării de la punctul a), se dorește eliminarea tuturor prefixelor cuvintelor din text. Astfel, având un șir de prefixe introdus de la tastatură, pentru fiecare cuvânt din text căutam prefixul de lungime maximă (dacă există) și îl eliminăm. De asemenea, cuvintele nou formate trebuie să conțină minim 2 caractere (cuvântul “prea” nu va deveni “a” dacă avem “pre” în lista de prefixe).

Exemplu: Cuvântul “interschimbare” devine “schimbare” dacă prefixul “inter” se află în listă. Dacă în listă s-ar afla și prefixul “in”, cuvântul ar fi fost transformat tot în “schimbare” deoarece se ia în calcul prefixul cu lungime mai mare.

Subpunct c

După realizarea modificărilor de la punctul b), se dorește aflarea celui mai frecvent cuvânt din text și numărul de apariții ale acestuia, fără a se face diferența între litere mici și litere mari. În cazul în care avem mai multe cuvinte cu același număr de apariții, se va afișa primul din punct de vedere lexicografic. Cuvântul găsit va fi scris doar cu litere mici.

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

Mențiuni

  • Memoria folosită pentru rezolvarea acestei probleme trebuie alocată dinamic;
  • Caracterele ce apar în text sunt litere mici, litere mari ale alfabetului englez și semne de punctuație: ” ,.;!?-:”; Doar literele își vor schimba valoarea în urma decriptării, semnele de punctuație rămânând neschimbate;
  • Definim cuvânt o succesiune de litere mici sau mari ale alfabetului englez, separate de unul sau mai multe semne de punctuație;
  • În urma decriptării, literele mici vor rămane mici, iar cele mari tot mari. Ex: “FSF” cu cheie de 5 devine “ANA” și “fsf” tot cu cheie de 5 devine “ana”;
  • Cuvintele pot fi separate de orice semn de punctuație. Ex: textul “Ana n-are mere,pere,prune.” conține 6 cuvinte;
  • Cuvintele pot fi separate, de asemenea, de mai multe semne de punctuație. Ex: textul “Ana ? n-are !., mere” conține 4 cuvinte.
  • Prefixele conțin 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 cuvant 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.

Referinte

programare/teme_2014b/tema2.1417213080.txt.gz · Last modified: 2014/11/29 00:18 by calin.cruceru
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