1580 - Schimb
Cerinţa[edit | edit source]
Se dau trei numere naturale n, k și p și n șiruri formate din litere mici ale alfabetului englez. Înlocuiți a k-a literă din fiecare șir cu a p-a literă din alfabet. Dacă șirul are mai puțin de k litere se va scrie oglinditul lui.
Date de intrare[edit | edit source]
Pe prima linie a fișierului schimbin.txt se află trei numere naturale n, k și p. Pe următoarele n linii se află n șiruri.
Date de ieşire[edit | edit source]
În fișierul schimbout.txt se vor scrie noile șiruri, fiecare pe un rând nou.
Restricții și precizări[edit | edit source]
- 1 ⩽ n, k ⩽ 10000
- 1 ⩽ p ⩽ 26
- șirurile au cel mult 500 de caractere
Exemplul 1[edit | edit source]
- schimbin.txt
2 4 7 abcde efg
- schimbout.txt
Datele de intrare corespund restrictiilor impuse. abcge gfe
Exemplul 2[edit | edit source]
- schimbin.txt
3 2 3 wqysd s sj
- schimbout.txt
Datele de intrare corespund restrictiilor impuse. wcysd s sc
Exemplul 3[edit | edit source]
- schimbin.txt
2 4 999599995
- schimbout.txt
Datele de intrare nu corespund restrictiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat
def validare(n_validare, k_validare, p_validare, siruri_validare):
# Verificăm dacă n, k și p sunt în intervalul specificat if (n_validare <= 0 or n_validare > 10000 or k_validare <= 0 or k_validare > 10000 or p_validare <= 0 or p_validare > 26): raise ValueError # Ridicăm o eroare dacă n, k sau p nu sunt în intervalul specificat for sir_validare in siruri_validare: # Parcurgem lista de șiruri # Verificăm dacă lungimea șirului este mai mică decât 500 if len(sir_validare) > 500: raise ValueError file_out.write("Datele de intrare corespund restrictiilor impuse.\n")
- Funcția schimb_sir schimbă a k-a literă din fiecare șir cu a p-a literă din alfabet sau scrie oglinditul șirului
- dacă șirul are mai puțin de k litere
def schimb_sir(k_schimb, p_schimb, siruri_schimb):
# Definim alfabetul alfabet = 'abcdefghijklmnopqrstuvwxyz' # Parcurgem lista de șiruri for i in range(len(siruri_schimb)): # Verificăm dacă șirul are mai puțin de k litere if len(siruri_schimb[i]) < k_schimb: # Scriem oglinditul șirului siruri_schimb[i] = siruri_schimb[i][::-1] else: # Înlocuim a k-a literă din șir cu a p-a literă din alfabet siruri_schimb[i] = siruri_schimb[i][:k_schimb-1] + alfabet[p_schimb-1] + siruri_schimb[i][k_schimb:] return siruri_schimb
if __name__ == '__main__':
file_in = open("schimbin.txt", "r") file_out = open("schimbout.txt", "w")
try: # Citim numărul de șiruri, k și p n_main, k_main, p_main = map(int, file_in.readline().split()) # Citim șirurile siruri_main = [file_in.readline().strip() for _ in range(n_main)] # Validăm datele de intrare validare(n_main, k_main, p_main, siruri_main) # Schimbăm șirurile siruri_schimbate = schimb_sir(k_main, p_main, siruri_main) # Scriem șirurile schimbate în fișierul de ieșire for sir in siruri_schimbate: file_out.write(sir + '\n')
# Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare except ValueError: file_out.write("Datele de intrare nu corespund restrictiilor impuse.") # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare except IndexError: file_out.write("Datele de intrare nu corespund restrictiilor impuse.")
</syntaxhighlight>