3141 - Atbash

From Bitnami MediaWiki

Atbash[edit | edit source]

Cifrul atbash este un cifru de substituție care constă în inversarea alfabetului: prima literă din alfabet se 
interschimbă cu ultima, a doua cu penultima, etc.

Cerinţa[edit | edit source]

Se dă un șir s care conține doar litere mari. Să se aplice cifrul atbash pe el.

Date de intrare[edit | edit source]

Fișierul de intrare atbashin.txt conține pe prima linie șirul s.

Date de ieșire[edit | edit source]

Fișierul de ieșire atbashout.txt va conține pe prima linie șirul după aplicarea cifrului atbash.

Restricţii şi precizări[edit | edit source]

  • 1 ⩽ lungimea șirului ⩽ 1.000.000

Exemplu 1[edit | edit source]

atbashin.txt
ANAAREMERE
atbashout.txt
Datele de intrare corespund restrictiilor impuse
ZMZZIVNVIV


Exemplu 2[edit | edit source]

atbashin.txt
anaaremere1
atbashout.txt
Datele de intrare nu corespund restrictiilor impuse


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def atbash(s):

   # Aplică cifrul Atbash pe șirul s
   return .join([chr(ord('Z') - (ord(c) - ord('A'))) for c in s])


def main():

   with open('atbashin.txt', 'r') as fin, open('atbashout.txt', 'w') as fout:
       s = fin.readline().strip()
       # Verifică dacă șirul respectă restricțiile
       if len(s) > 1000000 or not s.isupper():
           fout.write("Datele de intrare nu corespund restrictiilor impuse\n")
           return
       fout.write("Datele de intrare corespund restrictiilor impuse\n")
       # Aplică cifrul Atbash pe șirul s și scrie rezultatul în fișierul de ieșire
       fout.write(atbash(s) + '\n')


if __name__ == "__main__":

   main()


</syntaxhighlight>