0131 - Sort Cif 2

De la Universitas MediaWiki

Se dă un vector cu n elemente numere întregi.

Cerinţa

Să se ordoneze crescător elementele unui vector crescător după prima cifră.

Date de intrare

Fişierul de intrare sortcif2in.txt conţine pe prima linie numărul n si pe a doua linie n numere întregi separate prin spaţii.

Date de ieşire

Fişierul de ieşire sortcif2out.txt va conţine pe prima linie cele n elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.

Restricții și precizări

  • 0 < n ⩽ 100
  • valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât 2 30

Exemplul 1

sortcif2in.txt
6
89 2246 91 4005 51 721
sortcif2out.txt
Datele de intrare corespund restrictiilor impuse
2246 4005 51 721 89 91

Exemplul 2

sortcif2in.txt
-1
101
sortcif2out.txt
Datele de intrare nu corespund restrictiilor impuse

Rezolvare

# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat
def validare(validare_cif, numere_validare):
    # Verificăm dacă n este în intervalul 0-100
    if validare_cif <= 0 or validare_cif > 100:
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 0-100
    for numar in numere_validare:    # Parcurgem lista de numere
        # Verificăm dacă valoarea absolută a numărului este mai mică decât 2^30
        if abs(numar) >= 2**30:
            raise ValueError
    file_out.write("Datele de intrare corespund restrictiilor impuse\n")


# Funcția sort_numbers sortează numerele în funcție de prima cifră
def sort_numbers(numere):
    # Sortăm numerele în funcție de prima cifră
    numere.sort(key=lambda x: int(str(abs(x))[0]))
    return numere


if __name__ == '__main__':
    file_in = open("sortcif2in.txt", "r")
    file_out = open("sortcif2out.txt", "w")

    try:
        # Citim numărul de numere
        n_main = int(file_in.readline())
        # Citim numerele
        numere_main = list(map(int, file_in.readline().split()))
        # Validăm datele de intrare
        validare(n_main, numere_main)
        # Sortăm numerele în funcție de prima cifră
        numere_sortate = sort_numbers(numere_main)
        # Scriem numerele sortate în fișierul de ieșire
        file_out.write(' '.join(map(str, numere_sortate)) + '\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")