3140 - A1z26
A1Z26[edit | edit source]
Cifrul A1Z26 este cel mai ușor cifru de substituție: fiecare literă este înlocuită cu numărul ei de ordine în alfabet. Astfel, A devine 1, B devine 2, ș.a.m.d.
Cerinţa[edit | edit source]
Se dă un număr p: 1. Dacă p = 1, se dă un șir de caractere s format din litere mari. Să se afișeze numărul de ordine al caracterelor separate printr-un spațiu. 2. Dacă p = 2, se dă un număr n și n numere cuprinse între 1 și 26. Să se afișeze șirul corespunzător numerelor.
Date de intrare[edit | edit source]
Fișierul de intrare a1z26in.txt conține pe prima linie numărul p. Dacă p = 1, pe a doua linie din fișier se află șirul de caractere s. Dacă p = 2, pe a doua linie din fișier se află numarul natural n iar pe următoarea linie se află n numere.
Date de ieșire[edit | edit source]
Dacă p = 1, fișierul de ieșire a1z26out.txt va conține pe prima linie numerele de ordine ale caracterelor din șirul s, separate prin câte un spațiu. Daca p = 2, fișierul de ieșire a1z26out.txt va conține pe prima linie șirul format din numerele de ordine date, afișate cu litere mari.
Restricţii şi precizări[edit | edit source]
- 1 ⩽ p ⩽ 2
- 1 ⩽ lungimea șirului s ⩽ 1.000.000
- 1 ⩽ n ⩽ 1.000.000
- 1 ⩽ numerele de pe a doua linie ⩽ 26
Exemplu 1[edit | edit source]
- a1z26in.txt
1 ANAAREMERE
- a1z26out.txt
Datele de intrare corespund restrictiilor impuse 1 14 1 1 18 5 13 5 18 5
Exemplu 2[edit | edit source]
- a1z26in.txt
2 10 1 14 1 1 18 5 13 5 18 5
- a1z26out.txt
Datele de intrare corespund restrictiilor impuse ANAAREMERE
Exemplu 3[edit | edit source]
- a1z26in.txt
1 anaaremere
- a1z26out.txt
Datele de intrare nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def cifrare(s):
# Transformă fiecare literă în numărul ei de ordine în alfabet return ' '.join([str(ord(c) - ord('A') + 1) for c in s])
def decifrare(numere):
# Transformă fiecare număr în litera sa corespunzătoare în alfabet return .join([chr(numar + ord('A') - 1) for numar in numere])
def main():
with open('a1z26in.txt', 'r') as fin, open('a1z26out.txt', 'w') as fout: p = int(fin.readline().strip())
# Verifică dacă datele de intrare respectă restricțiile if p == 1: s = fin.readline().strip() 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") fout.write(cifrare(s) + '\n') elif p == 2: n = int(fin.readline().strip()) numere = list(map(int, fin.readline().strip().split())) if n > 1000000 or not all(1 <= numar <= 26 for numar in numere): fout.write("Datele de intrare nu corespund restrictiilor impuse\n") return fout.write("Datele de intrare corespund restrictiilor impuse\n") fout.write(decifrare(numere) + '\n')
if __name__ == "__main__":
main()
</syntaxhighlight>