2615 - Caesar Crypt

From Bitnami MediaWiki
Revision as of 16:56, 26 December 2023 by Andrada378 (talk | contribs)

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()