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
2
câte2
. Pentru fiecare2
litere: - 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 coloanab
iar a doua literă se află pe liniac
și coloanad
atunci avem următoarele cazuri:- dacă
a
este diferit dec
șib
este diferit ded
atunci se înlocuiesc cu literele de pe liniaa
și coloanad
și liniac
și coloanab
din matrice. - dacă
a
este egal cuc
(literele se află pe aceeasi linie) atunci se înlocuiesc cu literele de pe coloana următoare - dacă
b
este 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=1
atunci mesajul se va cripta; - pentru
c=2
atunci 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