2615 - Caesar Crypt: Difference between revisions
Andrada378 (talk | contribs) No edit summary |
Andrada378 (talk | contribs) No edit summary |
||
Line 1: | Line 1: | ||
== <big>Cerința</big> == | |||
Se citește un text de maxim 256 caractere. Să se afișeze textul după aplicarea Cifrului Caesar. | Se citește un text de maxim 256 caractere. Să se afișeze textul după aplicarea Cifrului Caesar. | ||
Cifrul Caesar este o metodă de criptare în care fiecare literă este înlocuită cu o altă literă ce se află la un număr fix de poziții după aceasta în alfabet. Este numită după Julius Caesar, care o folosea în corespondența privată. | Cifrul Caesar este o metodă de criptare în care fiecare literă este înlocuită cu o altă literă ce se află la un număr fix de poziții după aceasta în alfabet. Este numită după Julius Caesar, care o folosea în corespondența privată. | ||
<big | == <big>Date de intrare</big> == | ||
Fișierul de intrare caesar.in conține: | Fișierul de intrare caesar.in conține: | ||
Line 19: | Line 17: | ||
decrypt pentru decriptare. | decrypt pentru decriptare. | ||
Date de ieșire | == Date de ieșire == | ||
Fișierul de ieșire dbftbs.out va conține textul prelucrat. | Fișierul de ieșire dbftbs.out va conține textul prelucrat. | ||
Restricții și precizări | == Restricții și precizări == | ||
1 ≤ n ≤ 100 | * 1 ≤ n ≤ 100 | ||
* Se va folosi alfabetul englez. Literele își păstrează capitalizarea. | |||
* Atenție la exemple! | |||
== Exemple == | |||
=== Exemplu 1 === | |||
'''caesarin.txt''' | |||
'' | |||
caesar | caesar | ||
Line 43: | Line 37: | ||
encrypt | encrypt | ||
'''dbftbsout.txt''' | |||
dbftbs | dbftbs | ||
Exemplu | === Exemplu 2 === | ||
'''caesarin.txt''' | |||
dbftbs | dbftbs | ||
Line 57: | Line 50: | ||
decrypt | decrypt | ||
'''dbftbsout.txt''' | |||
caesar | caesar | ||
Exemplu | === Exemplu 3 === | ||
'''caesarin.txt''' | |||
caeSaR | caeSaR | ||
Line 71: | Line 63: | ||
encrypt | encrypt | ||
'''dbftbsout.txt''' | |||
mkoCkB | mkoCkB | ||
Exemplu | Exemplu 4 | ||
'''caesarin.txt''' | |||
CAEsAr | CAEsAr | ||
Line 85: | Line 77: | ||
decrypt | decrypt | ||
'''dbftbsout.txt''' | |||
SQUiQh | SQUiQh | ||
== Exemplu 5 == | |||
'''caesarin.txt''' | |||
If he had anything confidential to say, he wrote it in cipher, that is, by so changing the order of the 26 letters of the alphabet, that not a word could be made out. | If he had anything confidential to say, he wrote it in cipher, that is, by so changing the order of the 26 letters of the alphabet, that not a word could be made out. | ||
Line 99: | Line 90: | ||
encrypt | encrypt | ||
'''dbftbsout.txt''' | |||
Pm ol ohk hufaopun jvumpkluaphs av zhf, ol dyval pa pu jpwoly, aoha pz, if zv johunpun aol vykly vm aol 26 slaalyz vm aol hswohila, aoha uva h dvyk jvbsk il thkl vba. | Pm ol ohk hufaopun jvumpkluaphs av zhf, ol dyval pa pu jpwoly, aoha pz, if zv johunpun aol vykly vm aol 26 slaalyz vm aol hswohila, aoha uva h dvyk jvbsk il thkl vba. | ||
== Rezolvare == | |||
<syntaxhighlight lang="python"> | |||
def LM(ch): | |||
return 'A' <= ch <= 'Z' | |||
def lm(ch): | |||
return 'a' <= ch <= 'z' | |||
def validate_key(key): | |||
return 1 <= key <= 100 | |||
with open("caesarin.txt", "r") as file_in: | |||
s = list(file_in.readline().strip()) | |||
n = int(file_in.readline().strip()) | |||
# Validare cheie | |||
if not validate_key(n): | |||
print("Cheia nu este valida. Introdu o cheie intre 1 si 100.") | |||
exit() | |||
cer = file_in.readline().strip() | |||
n = n % 26 | |||
if cer == "encrypt": | |||
i = 0 | |||
while i < len(s): | |||
if lm(s[i]) or LM(s[i]): | |||
if LM(s[i]): | |||
nr = ord(s[i]) + n | |||
if nr > ord('Z'): | |||
s[i] = chr(nr - ord('Z') + ord('A') - 1) | |||
else: | |||
s[i] = chr(nr) | |||
else: | |||
nr = ord(s[i]) + n | |||
if nr > ord('z'): | |||
s[i] = chr(nr - ord('z') + ord('a') - 1) | |||
else: | |||
s[i] = chr(nr) | |||
i += 1 | |||
if | with open("dbftbsout.txt", "w") as file_out: | ||
file_out.write("".join(s)) | |||
else: | |||
i = 0 | |||
while i < len(s): | |||
if LM(s[i]) or lm(s[i]): | |||
if LM(s[i]): | |||
s[i] = chr(ord(s[i]) - n) | |||
if s[i] < 'A': | |||
s[i] = chr(ord(s[i]) + ord('Z') - ord('A') + 1) | |||
else: | |||
s[i] = chr(ord(s[i]) - n) | |||
if s[i] < 'a': | |||
s[i] = chr(ord(s[i]) + ord('z') - ord('a') + 1) | |||
i += 1 | |||
with open("dbftbsout.txt", "w") as file_out: | |||
file_out.write("".join(s)) | |||
</syntaxhighlight> |
Latest revision as of 14:03, 5 January 2024
Cerința[edit | edit source]
Se citește un text de maxim 256 caractere. Să se afișeze textul după aplicarea Cifrului Caesar.
Cifrul Caesar este o metodă de criptare în care fiecare literă este înlocuită cu o altă literă ce se află la un număr fix de poziții după aceasta în alfabet. Este numită după Julius Caesar, care o folosea în corespondența privată.
Date de intrare[edit | edit source]
Fișierul de intrare caesar.in conține:
Pe prima linie un text format din maxim 256 caractere.
Pe a doua linie un număr n reprezentând numărul de poziții.
Pe a treia linie operația ce se va aplica pe text:
encrypt pentru criptare.
decrypt pentru decriptare.
Date de ieșire[edit | edit source]
Fișierul de ieșire dbftbs.out va conține textul prelucrat.
Restricții și precizări[edit | edit source]
- 1 ≤ n ≤ 100
- Se va folosi alfabetul englez. Literele își păstrează capitalizarea.
- Atenție la exemple!
Exemple[edit | edit source]
Exemplu 1[edit | edit source]
caesarin.txt
caesar
1
encrypt
dbftbsout.txt
dbftbs
Exemplu 2[edit | edit source]
caesarin.txt
dbftbs
1
decrypt
dbftbsout.txt
caesar
Exemplu 3[edit | edit source]
caesarin.txt
caeSaR
10
encrypt
dbftbsout.txt
mkoCkB
Exemplu 4
caesarin.txt
CAEsAr
10
decrypt
dbftbsout.txt
SQUiQh
Exemplu 5[edit | edit source]
caesarin.txt
If he had anything confidential to say, he wrote it in cipher, that is, by so changing the order of the 26 letters of the alphabet, that not a word could be made out.
7
encrypt
dbftbsout.txt
Pm ol ohk hufaopun jvumpkluaphs av zhf, ol dyval pa pu jpwoly, aoha pz, if zv johunpun aol vykly vm aol 26 slaalyz vm aol hswohila, aoha uva h dvyk jvbsk il thkl vba.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python"> def LM(ch):
return 'A' <= ch <= 'Z'
def lm(ch):
return 'a' <= ch <= 'z'
def validate_key(key):
return 1 <= key <= 100
with open("caesarin.txt", "r") as file_in:
s = list(file_in.readline().strip()) n = int(file_in.readline().strip())
# Validare cheie if not validate_key(n): print("Cheia nu este valida. Introdu o cheie intre 1 si 100.") exit()
cer = file_in.readline().strip() n = n % 26
if cer == "encrypt":
i = 0 while i < len(s): if lm(s[i]) or LM(s[i]): if LM(s[i]): nr = ord(s[i]) + n if nr > ord('Z'): s[i] = chr(nr - ord('Z') + ord('A') - 1) else: s[i] = chr(nr) else: nr = ord(s[i]) + n if nr > ord('z'): s[i] = chr(nr - ord('z') + ord('a') - 1) else: s[i] = chr(nr) i += 1
with open("dbftbsout.txt", "w") as file_out: file_out.write("".join(s))
else:
i = 0 while i < len(s): if LM(s[i]) or lm(s[i]): if LM(s[i]): s[i] = chr(ord(s[i]) - n) if s[i] < 'A': s[i] = chr(ord(s[i]) + ord('Z') - ord('A') + 1) else: s[i] = chr(ord(s[i]) - n) if s[i] < 'a': s[i] = chr(ord(s[i]) + ord('z') - ord('a') + 1) i += 1
with open("dbftbsout.txt", "w") as file_out: file_out.write("".join(s))
</syntaxhighlight>