3141 - Atbash
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>