1580 - Schimb

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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.")