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 ==... |
No edit summary |
||
Line 68: | Line 68: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 15:58, 12 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 afin.txt conține pe prima linie numerele a b iar pe a doua linie un mesaj.
Date de iesire
Fișierul de ieșire afin.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
- Intrare
- 17 20
- twentyfifteen
- Iesire
- Datele introduse corespund restrictiilor impuse
- fekhfmbabfkkh
Exemplul 2
- Intrare
- 17 20
- TWEntyfiftEEN
- Iesire
- Datele introduse nu corespund restrictiilor impuse
Rezolvare
<syntaxhighlight lang="python3" line="1"> def cifru_afin(a, b, mesaj):
mesaj_criptat = ""
for caracter in mesaj: if caracter.isalpha(): if caracter.isupper(): cod = (ord(caracter) - ord('A') + a) % 26 mesaj_criptat += chr(cod + ord('A')) else: cod = (ord(caracter) - ord('a') + a) % 26 mesaj_criptat += chr(cod + ord('a')) else: mesaj_criptat += caracter
return mesaj_criptat
def main():
with open("afin.txt", "r") as fisier: a, b = map(int, fisier.readline().split()) mesaj = fisier.readline().strip()
mesaj_criptat = cifru_afin(a, b, mesaj)
with open("afin.txt", "w") as fisier_out: fisier_out.write(mesaj_criptat)
if __name__ == "__main__":
main()
</syntaxhighlight>