1580 - Schimb
De la Universitas MediaWiki
Cerinţa
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
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
În fișierul schimbout.txt se vor scrie noile șiruri, fiecare pe un rând nou.
Restricții și precizări
- 1 ⩽ n, k ⩽ 10000
- 1 ⩽ p ⩽ 26
- șirurile au cel mult 500 de caractere
Exemplul 1
- schimbin.txt
2 4 7 abcde efg
- schimbout.txt
Datele de intrare corespund restrictiilor impuse. abcge gfe
Exemplul 2
- schimbin.txt
3 2 3 wqysd s sj
- schimbout.txt
Datele de intrare corespund restrictiilor impuse. wcysd s sc
Exemplul 3
- schimbin.txt
2 4 999599995
- schimbout.txt
Datele de intrare nu corespund restrictiilor impuse.
Rezolvare
# 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.")