2615 - Caesar Crypt
Cerința
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
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
Fișierul de ieșire dbftbs.out va conține textul prelucrat.
Restricții și precizări
1 ≤ n ≤ 100
Se va folosi alfabetul englez. Literele își păstrează capitalizarea.
Atenție la exemple!
Exemple:
Exemplu #1
caesar.in
caesar
1
encrypt
dbftbs.out
dbftbs
Exemplu #2
caesar.in
dbftbs
1
decrypt
dbftbs.out
caesar
Exemplu #3
caesar.in
caeSaR
10
encrypt
dbftbs.out
mkoCkB
Exemplu #4
caesar.in
CAEsAr
10
decrypt
dbftbs.out
SQUiQh
Exemplu #5
caesar.in
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
dbftbs.out
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
def cifrul_caesar(text, shift):
rezultat = ""
for caracter in text:
if caracter.isalpha():
# Verificăm dacă caracterul este literă
baza = ord('a') if caracter.islower() else ord('A')
rezultat += chr((ord(caracter) - baza + shift) % 26 + baza)
else:
# Caracterul nu este literă, îl păstrăm nemodificat
rezultat += caracter
return rezultat
def main():
# Citim datele din fișierul de intrare
with open('caesarin.txt', 'r') as fisier:
text = fisier.readline().strip()
shift = int(fisier.readline().strip())
operatie = fisier.readline().strip()
# Aplicăm cifrul Caesar în funcție de operație
if operatie == 'encrypt':
rezultat = cifrul_caesar(text, shift)
elif operatie == 'decrypt':
rezultat = cifrul_caesar(text, -shift)
else:
print("Operație necunoscută")
return
# Scriem rezultatul în fișierul de ieșire
with open('dbftbs.out', 'w') as fisier:
fisier.write(rezultat)
if __name__ == "__main__":
main()