Playfair
Cifrul Playfair este un cifru care folosește o matrice 5x5 care conţine literele alfabetului englez. Matricea are proprietatea că după coloana 1 urmează coloana 2, după coloana 2 urmează coloana 3 … după coloana 5 urmează coloana 1 iar după linia 1 urmează linia 2, după linia 2 urmează linia 3 … după linia 5 urmează linia 1.
Cifrul funcţionează așa:
- Se citește un mesaj și apoi grupăm literele
2câte2. Pentru fiecare2litere: - căutăm literele în matrice și le reținem linia și coloana pe care se află
- dacă literele sunt identice atunci înlocuim a doua literă cu litera care lipsește din matricea
5x5 - dacă prima literă se află pe linia
ași coloanabiar a doua literă se află pe liniacși coloanadatunci avem următoarele cazuri:- dacă
aeste diferit decșibeste diferit dedatunci se înlocuiesc cu literele de pe liniaași coloanadși liniacși coloanabdin matrice. - dacă
aeste egal cuc(literele se află pe aceeasi linie) atunci se înlocuiesc cu literele de pe coloana următoare - dacă
beste egal cud(literele se află pe aceeasi coloana) atunci se înlocuiesc cu literele de pe linia următoare
- dacă
Cerință
Dându-se un număr c, o matrice 5x5 și un mesaj:
- pentru
c=1atunci mesajul se va cripta; - pentru
c=2atunci mesajul se va decripta;
Date de intrare
Fișierul de intrare playfair.in conține pe prima linie numărul c, pe a doua linie o matrice 5x5 cu litere iar pe ultima linie se va citi mesajul.
Date de ieșire
Fișierul de ieșire playfair.out va conține mesajul criptat sau decriptat în funcție de caz.
Restricții și precizări
1 ≤ lungimea mesajului ≤ 10000- mesajul are un număr par de litere
Exemplul 1:
playfair.in
1 p l a y f i r e x m b c d g h k n o q s t u v w z hidethegoldinthetrexestump
playfair.out
bmodzbxdnabekudmuixmmouvif
Exemplul 2:
2 p l a y f i r e x m b c d g h k n o q s t u v w z bmodzbxdnabekudmuixmmouvif
playfair.out
hidethegoldinthetrexestump