1454 - Permutare Cuvant

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se dă un cuvânt format din litere ale alfabetului englez și cifre. Afișați toate permutările circulare spre stânga ale sale.

Date de intrare[edit | edit source]

Fișierul de intrare permutarecuvantin.txt conține cuvântul pentru care se vor afișa permutările circulare spre stânga.

Date de ieşire[edit | edit source]

Fișierul de ieșire permutarecuvantout.txt va conține pe o singura linie toate permutările circulare ale cuvântului, separate prin câte un spațiu.

Restricții și precizări[edit | edit source]

  • Cuvântul va avea maximum 20 de caractere.

Exemplul 1[edit | edit source]

permutarecuvantin.txt
Hello
permutarecuvantout.txt
Datele de intrare corespund restrictiilor impuse.
Hello elloH lloHe loHel oHell


Exemplul 2[edit | edit source]

permutarecuvantin.txt
car
permutarecuvantout.txt
Datele de intrare corespund restrictiilor impuse.
car arc rca


Exemplul 3[edit | edit source]

permutarecuvantin.txt
acestcuvantesteprealung
permutarecuvantout.txt
Datele de intrare nu corespund restrictiilor impuse.


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. functia de validare verifica daca datele de intrare sunt in intervalul specificat

def validare(cuvant_validare):

   # verificam daca lungimea cuvantului este mai mica sau egala cu 20
   if len(cuvant_validare) > 20:
       raise ValueError  # ridicam o eroare daca lungimea cuvantului nu este in intervalul 0-20
   for caracter in cuvant_validare:    # parcurgem fiecare caracter din cuvant
       # verificam daca caracterul este o litera a alfabetului englezesc sau o cifra
       if not caracter.isalpha() and not caracter.isdigit():
           raise ValueError
   file_out.write("Datele de intrare corespund restrictiilor impuse.\n")


  1. functia permutari_circulare genereaza toate permutarile circulare ale unui cuvant

def permutari_circulare(cuvant):

   # generam toate permutarile circulare ale cuvantului
   return [cuvant[i:] + cuvant[:i] for i in range(len(cuvant))]


if __name__ == '__main__':

   file_in = open("permutarecuvantin.txt", "r")
   file_out = open("permutarecuvantout.txt", "w")
   try:
       # citim cuvantul
       cuvant_main = file_in.readline().strip()
       # validam datele de intrare
       validare(cuvant_main)
       # generam toate permutarile circulare ale cuvantului si scriem rezultatul in fisierul de iesire
       file_out.write(' '.join(permutari_circulare(cuvant_main)) + '\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>