0130 - Sort Cif

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 dă un vector cu n elemente numere întregi.

Să se ordoneze crescător elementele unui vector crescător după suma cifrelor.

Date de intrare

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

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

Exemplu 1

Intrare
6
89 22 91 4005 51 721
Ieșire
Datele de intrare corespund restricțiilor impuse.
22 51 4005 91 721 89

Exemplu 2

Intrare
-2
89 22 91 4005 51 721
Ieșire
Datele de intrare nu corespund restricțiilor impuse.

Rezolvare

#0130 Sort Cif
def conditii(n, numere):
    return len(numere) == n and \
        0 < n <= 1000 and \
        all(abs(nr) < 2**30 for nr in numere)


def sort_cif(numere):
    rezultat = sorted(numere, key=lambda numar: sum([int(cifra) for cifra in str(numar)]))
    # cheia de sortare returneaza suma cifrelor unui număr, SCif(numar) -> sum([int(cifra) for cifra in str(numar)])
    # Numerele sunt sortate după SCif(x)
    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.")
        sort_cif(numere)