0164 - Half Sort 2: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == Să se ordoneze crescător elementele situate pe poziții pare în vector și descrescător elementele situate pe poziții impare. == Date de intrare == Fişierul de intrare '''halfsort2.in''' 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 '''halfsort2.out''' va conţine pe prima linie cele '''n''' elemente ale vectorului, ordonate conform cerinței, separate...
 
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
== Cerinţa ==
== Cerinţa ==
Să se ordoneze crescător elementele situate pe poziții pare în vector și descrescător elementele situate pe poziții impare.
 
Se dă un vector cu n elemente numere întregi, n fiind număr par. Să se ordoneze crescător elementele situate pe poziții pare în vector și descrescător elementele situate pe poziții impare.
 
== Date de intrare ==
== Date de intrare ==
Fişierul de intrare '''halfsort2.in''' conţine pe prima linie numărul '''n''' si pe a doua linie '''n''' numere întregi separate prin spaţii.
Fişierul de intrare '''halfsort2in.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 ==
== Date de ieşire ==
Fişierul de ieşire '''halfsort2.out''' va conţine pe prima linie cele '''n''' elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.
Fişierul de ieşire '''halfsort2out.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 ==
== Restricții și precizări ==
* '''0 < n ≤ 100'''
* '''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'''
* valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât '''2^30'''
* indicii elementelor vectorului sunt '''1,2,...,n'''
* indicii elementelor vectorului sunt '''1,2,...,n'''
== Exemplu ==
== Exemplul 1 ==
; halfsort2.in
; halfsort2.in
: 6
: 6
: 8 9 9 4 5 7
: 8 9 9 4 5 7
; halfsort2.out
; halfsort2.out
: Datele introduse corespund restricțiilor impuse.
: 9 4 8 7 5 9
: 9 4 8 7 5 9
== Exemplul 2 ==
; halfsort2in.txt
: 5
: 1 2 3 4 2**30
; halfsort2out.txt
: Datele introduse nu corespund restricțiilor impuse.
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def sorteaza_elemente(n, vector):
# 0164 - Half Sort 2
def validare(numar_elemente, vector_intrare):  # functia de validare a datelor de intrare
 
    if numar_elemente > 100 or numar_elemente < 0:
        raise ValueError
 
    for numar in vector_intrare:
        if abs(numar) >= 2 ** 30:  # fiecare numar trebuie sa fie mai mic decat 2^30
            raise ValueError
 
    file_out.write("Datele de intrare corespund restrictiilor impuse\n")
 
 
def sorteaza_elemente(numar_elemente, vector_intrare): # functia de rezolvare
     # Creăm două liste, una pentru elementele de pe poziții pare și una pentru cele de pe poziții impare
     # Creăm două liste, una pentru elementele de pe poziții pare și una pentru cele de pe poziții impare
     pare = sorted(vector[i] for i in range(n) if i % 2 != 0)
     pare = sorted(vector_intrare[i] for i in range(numar_elemente) if i % 2 != 0)
     impar = sorted((vector[i] for i in range(n) if i % 2 == 0), reverse=True)
     impar = sorted((vector_intrare[i] for i in range(numar_elemente) if i % 2 == 0), reverse=True)
   
 
     # Parcurgem vectorul și înlocuim fiecare element cu primul element din lista corespunzătoare
     # Parcurgem vectorul și înlocuim fiecare element cu primul element din lista corespunzătoare
     for i in range(n):
     for i in range(numar_elemente):
         if i % 2 == 0:
         if i % 2 == 0:
             vector[i] = impar.pop(0)
             vector_intrare[i] = impar.pop(0)
         else:
         else:
             vector[i] = pare.pop(0)
             vector_intrare[i] = pare.pop(0)
   
 
     # Întoarcem vectorul modificat
     # Întoarcem vectorul modificat
     return vector
     return vector_intrare
 
 
if __name__ == '__main__':
    file_in = open("halfsort2in.txt", "r")  # declararea fisierelor
    file_out = open("halfsort2out.txt", "w")  # fisierul out trebuie declarat cu optiunea "w" (write)
 
    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam
    try:
        n = int(file_in.readline())  # citirea numarului de elemente
        vector = list(map(int, file_in.readline().split()))  # citirea vectorului
 
        validare(n, vector)  # apelul functiei de validare
        vector = sorteaza_elemente(n, vector)  # apelul functiei de rezolvare
        file_out.write(' '.join(map(str, vector)) + '\n')


if __name__ == "__main__":
    except ValueError:
    n = 6
        file_out.write("Datele de intrare nu corespund restrictiilor impuse")
    vector = [8, 9, 9, 4, 5, 7]
     except IndexError:
      
        file_out.write("Datele de intrare nu corespund restrictiilor impuse")
    # Apelăm funcția cu valorile date și afișăm rezultatul
    print(sorteaza_elemente(n, vector))


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 14:27, 9 December 2023

Cerinţa[edit | edit source]

Se dă un vector cu n elemente numere întregi, n fiind număr par. Să se ordoneze crescător elementele situate pe poziții pare în vector și descrescător elementele situate pe poziții impare.

Date de intrare[edit | edit source]

Fişierul de intrare halfsort2in.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[edit | edit source]

Fişierul de ieşire halfsort2out.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[edit | edit source]

  • 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
  • indicii elementelor vectorului sunt 1,2,...,n

Exemplul 1[edit | edit source]

halfsort2.in
6
8 9 9 4 5 7
halfsort2.out
Datele introduse corespund restricțiilor impuse.
9 4 8 7 5 9

Exemplul 2[edit | edit source]

halfsort2in.txt
5
1 2 3 4 2**30
halfsort2out.txt
Datele introduse nu corespund restricțiilor impuse.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 0164 - Half Sort 2

def validare(numar_elemente, vector_intrare): # functia de validare a datelor de intrare

   if numar_elemente > 100 or numar_elemente < 0:
       raise ValueError
   for numar in vector_intrare:
       if abs(numar) >= 2 ** 30:  # fiecare numar trebuie sa fie mai mic decat 2^30
           raise ValueError
   file_out.write("Datele de intrare corespund restrictiilor impuse\n")


def sorteaza_elemente(numar_elemente, vector_intrare): # functia de rezolvare

   # Creăm două liste, una pentru elementele de pe poziții pare și una pentru cele de pe poziții impare
   pare = sorted(vector_intrare[i] for i in range(numar_elemente) if i % 2 != 0)
   impar = sorted((vector_intrare[i] for i in range(numar_elemente) if i % 2 == 0), reverse=True)
   # Parcurgem vectorul și înlocuim fiecare element cu primul element din lista corespunzătoare
   for i in range(numar_elemente):
       if i % 2 == 0:
           vector_intrare[i] = impar.pop(0)
       else:
           vector_intrare[i] = pare.pop(0)
   # Întoarcem vectorul modificat
   return vector_intrare


if __name__ == '__main__':

   file_in = open("halfsort2in.txt", "r")  # declararea fisierelor
   file_out = open("halfsort2out.txt", "w")  # fisierul out trebuie declarat cu optiunea "w" (write)
   # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam
   try:
       n = int(file_in.readline())  # citirea numarului de elemente
       vector = list(map(int, file_in.readline().split()))  # citirea vectorului
       validare(n, vector)  # apelul functiei de validare
       vector = sorteaza_elemente(n, vector)  # apelul functiei de rezolvare
       file_out.write(' '.join(map(str, vector)) + '\n')
   except ValueError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse")
   except IndexError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse")

</syntaxhighlight>