3310 - Afin: Difference between revisions
No edit summary |
|||
Line 38: | Line 38: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python3" line="1"> | <syntaxhighlight lang="python3" line="1"> | ||
def | def cripteaza_afin(a, b, mesaj): | ||
mesaj_criptat = "" | mesaj_criptat = "" | ||
for litera in mesaj: | |||
for | if litera.isalpha(): | ||
if | cod = ord(litera) - ord('a') | ||
litera_criptata = chr((a * cod + b) % 26 + ord('a')) | |||
mesaj_criptat += litera_criptata | |||
else: | else: | ||
mesaj_criptat += | mesaj_criptat += litera | ||
return mesaj_criptat | return mesaj_criptat | ||
# Citire date de intrare | |||
with open("afinin.txt", "r") as f: | |||
a, b = map(int, f.readline().split()) | |||
mesaj = f.readline().strip() | |||
# Calculare mesaj criptat | |||
mesaj_criptat = cripteaza_afin(a, b, mesaj) | |||
# Scriere rezultat în fișier de ieșire | |||
with open("afinout.txt", "w") as f_out: | |||
f_out.write(f"{mesaj_criptat}\n") | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 10:26, 27 December 2023
Enunt
Cifrul Afin este un cifru unde fiecare literă este înlocuită cu o altă literă printr-o operație matematica. Fiecărei litere i se asociază un cod: a-0, b-1, c-2, … z-25. De asemenea, mai avem două numere a și b, numite chei. Fiecare literă se înlocuiește cu litera care are codul egal cu (a*x+b)mod. 26 , unde x este codul literei.
Cerinta
Dându-se valoarea celor două chei și un mesaj să se afișeze mesajul criptat.
Date de intrare
Fișierul de intrare afinin.txt conține pe prima linie numerele a b iar pe a doua linie un mesaj.
Date de iesire
Fișierul de ieșire afinout.txt va conține pe prima linie mesajul criptat.
Restrictii si precizari
- 1 ⩽ a , b ⩽ 26
- 1 ⩽ lungimea șirului ⩽10000
- mesajul va conține doar litere mici ale alfabetului englez
Exemplul 1
- afinin.txt
- 17 20
- twentyfifteen
- afinout.txt
- Datele introduse corespund restrictiilor impuse
- fekhfmbabfkkh
Exemplul 2
- afinin.txt
- 17 20
- TWEntyfiftEEN
- Datele introduse nu corespund restrictiilor impuse
Rezolvare
<syntaxhighlight lang="python3" line="1"> def cripteaza_afin(a, b, mesaj):
mesaj_criptat = "" for litera in mesaj: if litera.isalpha(): cod = ord(litera) - ord('a') litera_criptata = chr((a * cod + b) % 26 + ord('a')) mesaj_criptat += litera_criptata else: mesaj_criptat += litera return mesaj_criptat
- Citire date de intrare
with open("afinin.txt", "r") as f:
a, b = map(int, f.readline().split()) mesaj = f.readline().strip()
- Calculare mesaj criptat
mesaj_criptat = cripteaza_afin(a, b, mesaj)
- Scriere rezultat în fișier de ieșire
with open("afinout.txt", "w") as f_out:
f_out.write(f"{mesaj_criptat}\n")
</syntaxhighlight>