ADFGVX
Cifrul ADFGVX este un cifru ce folosește o matrice 6x6
care conţine literele alfabetului englez si cifre. Cifrul functioneaza asa:
- se citeste matricea, un mesajul si o cheie.
- In matrice, linia
1
si coloana1
au codulA
, linia2
si coloana2
au codulD
, linia3
si coloana3
au codulF
, linia4
si coloana4
au codulG
, linia5
si coloana5
au codulV
, iar linia6
si coloana6
au codulX
. - Fiecare litera din mesaj este inlocuita cu un codul liniei si coloanei pe care se afla in matrice.
- literele codurilor obtinute sunt puse intr-o matrice care are atatea coloane cate caractere are cheia(ultima linie a noii matrici poate fi incompleta).
- coloanele noii matrici au codul literei din cheie de pe pozitia egala cu numarul de ordine al coloanei.
- coloanele sunt sortate in functie de ordinea alfabetica al literei pe care o au asociata.
- In final se afiseaza matricea noua parcursa pe coloane (pentru a fi mai clar, literele se afiseaza fara spatii intre ele, iar cand se trece pe o noua coloana, se va pune un spatiu).
Cerinta
Vi se ofera un numar c
si matricea pentru criptare.Pentru c=1
, vi se ofera un mesaj si o cheie si trebuie sa criptati mesajul. Pentru c=2
, vi se ofera mesajul criptat si o cheie si trebuie sa decriptati mesajul.
h1. Date de intrare
Fișierul de intrare adfgvx.in
conține pe prima linie numărul c
, iar pe urmatoarele linii matricea, mesajul si cheia.
Date de ieșire
Fișierul de ieșire adfgvx.out
va conține pe prima linie mesajul criptat sau decriptat, in functie de c
.
Restricții și precizări
1 ≤ lungimea mesajului necriptat ≤ 1000000
1≤c≤2
- cheia va avea numai litere distincte
h1. Exemplul 1:
adfgvx.in
1 NA1C3H 8TB2OM E5WRPD 4F6G7I 9J0KLQ SUVXYZ ATTACKAT1200AM PRIVACY
adfgvx.out
DGDD DAGD DGAF ADDF DADV DVFA ADVX
Exemplul 2:
adfgvx.in
2 NA1C3H 8TB2OM E5WRPD 4F6G7I 9J0KLQ SUVXYZ DGDD DAGD DGAF ADDF DADV DVFA ADVX PRIVACY
adfgvx.out
ATTACKAT1200AM
Explicatie:
*codul literelor va fi: AD,DD,DD,AD,AG,VG,AD,DD,AF,DG,VF,VF,AD,DX.
*Matricea noua va arata astfel:
P R I V A C Y
A D D D D D A
D A G V G A D
D D A F D G V
F V F A D D X
*Dupa ce sortam coloanele, matricea va arata astfel:
A C I P R V Y
D D D A D D A
G A G D A V D
D G A D D F V
D D F F V A X