3808 - ADFGVX
ADFGVX[edit | edit source]
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 coloana 1 au codul A, linia 2 si coloana 2 au codul D, linia 3 si coloana 3 au codul F, linia 4 si coloana 4 au codul G, linia 5 si coloana 5 au codul V, iar linia 6 si coloana 6 au codul X. 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).
Cerința[edit | edit source]
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[edit | edit source]
Fișierul de intrare adfgvxin.txt conține pe prima linie numărul c, iar pe urmatoarele linii matricea, mesajul si cheia.
Date de ieșire[edit | edit source]
Fișierul de ieșire adfgvxout.txt va conține pe prima linie mesajul criptat sau decriptat, in functie de c.
Restricții și precizări[edit | edit source]
- 1 ≤ lungimea mesajului necriptat ≤ 1000000
- 1≤c≤2
- cheia va avea numai litere distincte h1.
Exemplul 1[edit | edit source]
- adfgvxin.txt
- 1
- NA1C3H
- 8TB2OM
- E5WRPD
- 4F6G7I
- 9J0KLQ
- SUVXYZ
- ATTACKAT1200AM PRIVACY
- adfgvx.out
- Datele introduse corespund restricțiilor impuse.
- DGDD DAGD DGAF ADDF DADV DVFA ADVX
Exemplul 2[edit | edit source]
- adfgvxin.txt
- 2
- NA1C3H
- 8TB2OM
- E5WRPD
- 4F6G7I
- 9J0KLQ
- SUVXYZ
- DGDD DAGD DGAF ADDF DADV DVFA ADVX PRIVACY
- adfgvx.out
- Datele introduse corespund restricțiilor impuse.
- ATTACKAT1200AM
Explicatie[edit | edit source]
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
Exemplul 3[edit | edit source]
- adfgvxin.txt
- 2
- NA1C3H
- 8TB2OM
- E5WRPD
- 4F6G7I
- 9J0KLQ
- PRIVACY
- DGDD DAGD DGAF ADDF DADV DVFA ADVX
- adfgvx.out
- Datele introduse nu corespund restricțiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1">
- 3808 - ADFGVX
def validare(matrice_validare, mesaj_validare): # functia de validare a datelor de intrare
if len(mesaj_validare) > 1000000: raise ValueError
for linie in matrice_validare: if len(linie) != 6: # fiecare linie trebuie sa aiba 6 caractere raise ValueError
fisier_iesire.write("Datele introduse corespund restrictiilor impuse.\n")
def codificare(matrice_codificare, mesaj_codificare): # functia de rezolvare
codificat = "" for litera in mesaj_codificare: for i in range(6): for j in range(6): if matrice_codificare[i][j] == litera: codificat += "ADFGVX"[i] + "ADFGVX"[j] return codificat
if __name__ == '__main__':
fisier_intrare = open("adfgvxin.txt", "r") # declararea fisierelor fisier_iesire = open("adfgvxout.txt", "w") # fisierul out trebuie declarat cu optiunea "w" (write)
try: cerinta = int(fisier_intrare.readline()) matrice = [list(fisier_intrare.readline().strip()) for _ in range(6)] cheie = fisier_intrare.readline().strip() mesaj = fisier_intrare.readline().strip()
validare(matrice, mesaj) # apelul functiei de validare if cerinta == 1: fisier_iesire.write(codificare(matrice, mesaj)) # apelul functiei de rezolvare
except ValueError: fisier_iesire.write("Datele introduse nu corespund restrictiilor impuse.") except IndexError: fisier_iesire.write("Datele introduse nu corespund restrictiilor impuse.")
</syntaxhighlight>