Fișierul intrare/ieșire | cript.in, cript.out | Sursă | ONI 2015 clasa a 7-a |
---|---|---|---|
Autor | Lucia Miron | Adăugată de | Herbert Mohanu • Herbert2002 |
Timp de execuție pe test | 0.15 sec | Limită de memorie | 2048 KB |
Scorul tău | N/A | Dificultate |
Vezi soluțiile trimise | Statistici
Cript (clasa a 7-a)
Ilinca a citit despre criptarea mesajelor, acum dorește să comunice cu prietena ei Miruna numai prin mesaje criptate folosind un sistem propriu de criptare.
Ilinca știe că fiecare caracter se reprezintă în memoria calculatorului pe 8 biți, în care se memorează scrierea în baza 2 a codului ASCII al caracterului respectiv. Pentru a cripta caracterul, Ilinca folosește o matrice pătratică având 8 linii (numerotate de la 0 la 7 de sus în jos) și 8 coloane (numerotate de la 0 la 7 de la stânga la dreapta). Pe prima linie a matricei Ilinca scrie cei 8 biți reprezentând scrierea în baza 2 a codului ASCII al caracterului, pe poziția 0 fiind scrisă cifra cea mai semnificativă (corespunzătoare lui 27). Pe fiecare dintre următoarele 7 linii din matrice scrie permutarea circulară cu o poziție la stânga a liniei anterioare. Ordonează lexicografic liniile matricei formate și definește cript-ul caracterului ca fiind succesiunea de biți reprezentată de ultima coloană din matrice, parcursă de sus în jos, urmată de indicele liniei din matrice pe care a ajuns după ordonarea lexicografică reprezentarea în baza 2 a codului ASCII al caracterului. Dacă există linii egale în matrice, după ordonarea lexicografică acestea își vor păstra ordinea relativă inițială, astfel că linia conținând reprezentarea în baza 2 a codului ASCII al caracterului va fi prima dintre acestea.
Pentru a cripta un mesaj, Ilinca scrie în ordine cript-urile caracterelor din mesajul respectiv.
Miruna cunoaște sistemul de criptare al Ilincăi, ca urmare știe să decripteze mesajele primite.
Cerinta
Scrieți un program care să rezolve următoarele două cerințe:
1. citește un mesaj și afișează mesajul criptat conform sistemului Ilincăi;
2. citește un mesaj criptat conform sistemului Ilincăi și determină mesajul decriptat.
Date de intrare
Fișierul de intrare cript.in conține pe prima linie un număr natural c, care poate fi 1 sau 2, reprezentând cerința ce urmează a fi rezolvată. Pe a doua linie a fișierului se află un șir de caractere.
Date de ieșire
Fișierul de ieșire cript.out va conține o singură linie pe care va fi scrisă criptarea șirului din fișierul de intrare (dacă c=1), respectiv decriptarea șirului din fișierul de intrare (dacă c=2).
Restricții
• Lungimea mesajului necriptat este nenulă și nu depășește 30000.
• Caracterele din șirul citit au coduri cuprinse între 32 și 127.
• Spunem că șirul s1 precedă în ordinea lexicografică șirul s2 dacă există o poziție k astfel încât s1[i]==s2[i] pentru orice i<k și s1[k]<s2[k].
• Pentru teste valorând 50% din punctaj cerința este 1
Exemplu
cript.in | cript.out | Explicatii |
---|---|---|
1 AB |
100010004101000004 |
Caracterul ′A′ are codul ASCII 65 reprezentarea pe 8 biți fiind 01000001 Dupa ordonare, linia reprezentării lui ′A′ are indicele 4. Cript-ul caracterului ′A′ este 100010004 Se procedează analog pentru ′B′ |
2 101110001111000002 |
VI |
101110001-cript-ul caracterului ‘V’ 111000002-cript-ul caracterului ’I’ |