3141 - Atbash

De la Universitas MediaWiki

Atbash

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

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

Date de intrare

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

Date de ieșire

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

Restricţii şi precizări

  • 1 ⩽ lungimea șirului ⩽ 1.000.000

Exemplu 1

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


Exemplu 2

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


Rezolvare

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