0086 - Half Sort

De la Universitas MediaWiki

Cerința

Se dă un vector cu n elemente numere întregi, n fiind număr par.

Să se ordoneze crescător elementele din prima jumătate a vectorului și descrescător elementele din a doua jumătate.

Date de intrare

Fişierul de intrare halfsort.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

Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse."

Pe următoarea linie se vor afișa cele n elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.

În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse."

Restricții și precizări

  • 1 ≤ n ≤ 100, n număr par
  • valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât 1.000.000.000

Exemplu 1

Intrare
6
8 2 9 4 5 7
Ieșire
Datele de intrare corespund restricțiilor impuse.
2 8 9 7 5 4

Exemplu 2

Intrare
-2
8 2 9 4 5 7
Ieșire
Datele de intrare nu corespund restricțiilor impuse.

Rezolvare

#0086 Half Sort
def conditii(n, numere):
    return len(numere) == n and \
        1 <= n <= 100 and \
        n % 2 == 0 and \
        all(abs(nr) < 1_000_000_000 for nr in numere)


def half_sort(numere):
    # Secționăm și sortăm crescător prima jumătate a listei: numere[ :len(numere)//2]
    # Secționăm și sortăm descrescător a doua jumătate a listei: numere[len(numere)//2: ]
    # Folosim operatorul + pentru a concatena elementele celor două liste
    rezultat = sorted(numere[:len(numere)//2], reverse=False) + \
               sorted(numere[len(numere)//2:], reverse=True)
    print(" ".join([str(x) for x in rezultat]))


if __name__ == "__main__":
    n = int(input())
    numere = [int(x) for x in input().split()]
    if not conditii(n, numere):
        print("Datele de intrare nu corespund restricțiilor impuse.")
    else:
        print("Datele de intrare corespund restricțiilor impuse.")
        half_sort(numere)