0131 - Sort Cif 2
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
<syntaxhighlight lang="python" line>
- 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")
</syntaxhighlight>