2937 - Ora

From Bitnami MediaWiki

Context[edit | edit source]

Gigel este la ora de informatică, iar profesorul i-a cerut să sorteze numele celor n colegi ai săi după o regulă specială. Fiecărui nume i se asociază un număr care iniţial este 0 și crește cu 1 pentru fiecare pereche de vocale consecutive și scade cu 1 pentru fiecare pereche de consoane consecutive din nume. Dacă perechea este formată dintr-o vocală și o consoană, numărul nu se modifică.

Cerinţa[edit | edit source]

Dându-se cele n nume ale colegilor, să se sorteze crescător după numerele asociate. La numere egale, se vor sorta alfabetic.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n , iar apoi n nume, fiecare pe câte o linie nouă.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran cele n nume sortate, pe linii separate.

Î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 respecta cerintele impuse." , iar daca se indeplinesc, se afiseaza mesajul "Datele de intrare respecta cerintele impuse."

Restricţii şi precizări[edit | edit source]

  • 1 ≤ n ≤ 300.000 ;
  • numele conțin cel mult 20 de caractere;
  • numele copiilor sunt distincte două câte două.

Exemplul 1[edit | edit source]

Intrare
5
George
Steve
Jotaro
Aeioubc
Star
Ieșire
Datele de intrare respecta cerintele impuse.
Star
Steve
George
Jotaro
Aeioubc


Exemplul 2[edit | edit source]

Intrare
0


Ieșire
Datele de intrare nu respecta cerintele impuse.


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def calculeaza_numar(nume):

   numar = 0
   vocale = "aeiouAEIOU"
   for i in range(len(nume) - 1):
       pereche = nume[i:i + 2]
       if pereche[0] in vocale and pereche[1] in vocale:
           numar += 1
       elif pereche[0] not in vocale and pereche[1] not in vocale:
           numar -= 1
   return numar


if __name__ == "__main__":

   try:
       n = int(input("Introdu numărul de colegi: "))
       if 1 <= n <= 300000:
           colegi = [input() for _ in range(n)]
           if len(set(colegi)) == n and all(1 <= len(nume) <= 20 for nume in colegi):
               print("Datele de intrare respecta cerintele impuse.")
               # Sortare utilizând funcția cal0uleaza_numar și apoi numele în caz de egalitate
               colegi_sortati = sorted(colegi, key=lambda x: (calculeaza_numar(x), x))
               # Afișare rezultat
               for coleg in colegi_sortati:
                   print(coleg)
           else:
               print("Datele de intrare nu respecta cerintele impuse.")
       else:
           print("Datele de intrare nu respecta cerintele impuse.")
   except ValueError:
       print("Datele de intrare nu respecta cerintele impuse.")

</syntaxhighlight>