2615 - Caesar Crypt: Difference between revisions

From Bitnami MediaWiki
Andrada378 (talk | contribs)
Pagină nouă: '''<u>''<big>Cerința</big>''</u>''' 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ă. <big>'''''<u>Date de intrare</u>'''''</big> Fișierul de intrare caesar.in conține: Pe pr...
 
Andrada378 (talk | contribs)
No edit summary
Line 103: Line 103:
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.


<u>'''''Rezolvare'''''</u><!-- def cifrul_caesar(text, shift):
<u>'''''Rezolvare'''''</u>
 
def cifrul_caesar(text, shift):


    rezultat = ""
    rezultat = ""
Line 161: Line 163:
if __name__ == "__main__":
if __name__ == "__main__":


    main() -->
    main()

Revision as of 16:56, 26 December 2023

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