3310 - Afin: Difference between revisions
Pagină nouă: == 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 ==... |
|||
(3 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== Enunt == | == 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. | 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 == | == Cerinta == | ||
Line 8: | Line 8: | ||
== Date de intrare == | == Date de intrare == | ||
Fișierul 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 == | == Date de iesire == | ||
Fișierul de ieșire | Fișierul de ieșire '''afinout.txt''' va conține pe prima linie mesajul criptat. | ||
== Restrictii si precizari == | == Restrictii si precizari == | ||
*1 | *1 ⩽ a , b ⩽ 26 | ||
*1 | *1 ⩽ lungimea șirului ⩽10000 | ||
*mesajul va conține doar litere mici ale alfabetului englez | *mesajul va conține doar litere mici ale alfabetului englez | ||
== Exemplul 1 == | == Exemplul 1 == | ||
; | ;afinin.txt | ||
:17 20 | :17 20 | ||
:twentyfifteen | :twentyfifteen | ||
; | ;afinout.txt | ||
:Datele introduse corespund restrictiilor impuse | |||
:fekhfmbabfkkh | :fekhfmbabfkkh | ||
== Exemplul 2 == | == Exemplul 2 == | ||
; | ;afinin.txt | ||
:17 20 | :17 20 | ||
:TWEntyfiftEEN | :TWEntyfiftEEN | ||
:Datele introduse nu corespund restrictiilor impuse | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python3" line="1"> | <syntaxhighlight lang="python3" line="1"> | ||
def | def verificare_rezultat_corect(a, b, mesaj, mesaj_criptat): | ||
if not (1 <= a <= 26 and 1 <= b <= 26): | |||
return False | |||
if not (1 <= len(mesaj) <= 10000): | |||
return False | |||
if not mesaj.isalpha() or not mesaj.islower(): | |||
return False | |||
if not mesaj_criptat.isalpha() or not mesaj_criptat.islower(): | |||
return False | |||
return | return True | ||
# 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: | |||
if verificare_rezultat_corect(a, b, mesaj, mesaj_criptat): | |||
f_out.write(f"{mesaj_criptat}\n") | |||
else: | |||
f_out.write("Datele introduse nu corespund restrictiilor impuse.\n") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Latest revision as of 11:59, 29 December 2023
Enunt[edit | edit source]
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[edit | edit source]
Dându-se valoarea celor două chei și un mesaj să se afișeze mesajul criptat.
Date de intrare[edit | edit source]
Fișierul de intrare afinin.txt conține pe prima linie numerele a b iar pe a doua linie un mesaj.
Date de iesire[edit | edit source]
Fișierul de ieșire afinout.txt va conține pe prima linie mesajul criptat.
Restrictii si precizari[edit | edit source]
- 1 ⩽ a , b ⩽ 26
- 1 ⩽ lungimea șirului ⩽10000
- mesajul va conține doar litere mici ale alfabetului englez
Exemplul 1[edit | edit source]
- afinin.txt
- 17 20
- twentyfifteen
- afinout.txt
- Datele introduse corespund restrictiilor impuse
- fekhfmbabfkkh
Exemplul 2[edit | edit source]
- afinin.txt
- 17 20
- TWEntyfiftEEN
- Datele introduse nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def verificare_rezultat_corect(a, b, mesaj, mesaj_criptat):
if not (1 <= a <= 26 and 1 <= b <= 26): return False
if not (1 <= len(mesaj) <= 10000): return False
if not mesaj.isalpha() or not mesaj.islower(): return False
if not mesaj_criptat.isalpha() or not mesaj_criptat.islower(): return False
return True
- 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:
if verificare_rezultat_corect(a, b, mesaj, mesaj_criptat): f_out.write(f"{mesaj_criptat}\n") else: f_out.write("Datele introduse nu corespund restrictiilor impuse.\n")
</syntaxhighlight>