2304 - Cuvinte 7

From Bitnami MediaWiki

Cerinta

Scrieţi un program care citeşte de la tastatură, în această ordine, un număr natural n, apoi n cuvinte, separate prin Enter, urmate de un număr natural k. Numerele citite sunt din intervalul [1,20], iar fiecare cuvânt este format din cel mult 20 de caractere, numai litere mici ale alfabetului englez. Cel puţin unul dintre cuvinte are k litere.

Programul construiește în memorie, apoi afișează pe ecran, un șir care să cuprindă cuvintele citite, separate prin câte un spațiu, astfel încât toate cele care au k litere să ocupe primele poziţii, iar celelalte să se regăsească în continuarea acestora, într-o ordine oarecare.

Exemplul 1

Intrare
5
am
un
cires
de
mai
2
Iesire
Datele de intrare corespund restrictiilor impuse
am un de cires mai

Exemplul 2

Intrare
3
da
acestcuvantesteunulfoartelungdoarpentrucontext
2
2
Iesire
Datele de intrare nu corespund restrictiilor impuse

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

   # Citirea numărului n de la tastatură
   n = int(input().strip())
   # Citirea cuvintelor de la tastatură
   cuvinte = [input().strip() for _ in range(n)]
   # Citirea numărului k de la tastatură
   k = int(input().strip())
   # Verifică dacă datele de intrare respectă restricțiile
   if n < 1 or n > 20 or k < 1 or k > 20 or any(len(cuvant) > 20 or not cuvant.islower() for cuvant in cuvinte):
       print("Datele de intrare nu corespund restrictiilor impuse")
       return
   print("Datele de intrare corespund restrictiilor impuse")
   # Separarea cuvintelor în funcție de lungimea lor
   cuvinte_k = [cuvant for cuvant in cuvinte if len(cuvant) == k]
   cuvinte_altele = [cuvant for cuvant in cuvinte if len(cuvant) != k]
   # Construirea și afișarea șirului rezultat
   sir = ' '.join(cuvinte_k + cuvinte_altele)
   print(sir)

if __name__ == "__main__":

   main()

</syntaxhighlight>

Explicatie

Există și alte soluții corecte.