3915 - anagrame cv

From Bitnami MediaWiki

Cerința[edit | edit source]

Se citește de la tastatură un cuvânt s format din cel mult 11 litere mici distincte. Să se genereze în ordine alfabetică și să se afișeze toate anagramele cuvântului s în care nu există două vocale alăturate și nici două consoane alăturate.

Date de intrare[edit | edit source]

Programul citește de la tastatură cuvântul s.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran pe rânduri separate anagramele cuvântului citit în care vocalele și consoanele alternează (nu există două vocale alăturate și nici două consoane alăturate).

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

  • cuvântul s are cel mult 11 caractere și este format din litere mici distincte
  • dacă nu există soluții, atunci se va afișa mesajul IMPOSIBIL.

Exemplu:[edit | edit source]

Intrare

cosmina

Ieșire

caminos
camison
camonis
camosin
canimos
canisom
canomis
canosim
casimon
casinom
casomin
casonim
cimanos
cimason
cimonas
cimosan
cinamos
cinasom
cinomas
cinosam
...
sonimac
(în total 144 de anagrame)

Exemplu:[edit | edit source]

Intrare

cosmin

Ieșire

IMPOSIBIL

Exemplu:[edit | edit source]

Intrare

ana

consola

Cuvântul trebuie să aibă cel mult 11 litere mici distincte.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def sunt_alternante(cuvant):

   # Verificăm dacă vocalele și consoanele alternează în cuvânt
   for i in range(1, len(cuvant)):
       if (cuvant[i-1] in 'aeiou' and cuvant[i] in 'aeiou') or (cuvant[i-1] not in 'aeiou' and cuvant[i] not in 'aeiou'):
           return False
   return True

def genereaza_anagrame_alternante(curent, ramase, rezultat):

   if not ramase:
       if sunt_alternante(curent):
           rezultat.append(curent)
       return
   for i in range(len(ramase)):
       genereaza_anagrame_alternante(curent + ramase[i], ramase[:i] + ramase[i+1:], rezultat)

def valideaza_cuvant(cuvant):

   # Verificăm restricțiile
   return 1 <= len(cuvant) <= 11 and len(set(cuvant)) == len(cuvant) and cuvant.islower()

def main():

   try:
       # Citim cuvântul de la tastatură
       cuvant = input("Introduceți un cuvânt: ")
       # Verificăm restricțiile utilizând funcția separată
       if not valideaza_cuvant(cuvant):
           print("Cuvântul trebuie să aibă cel mult 11 litere mici distincte.")
           return
       # Inițializăm o listă pentru a stoca anagramele rezultate
       anagrame = []
       # Generăm anagramele cuvântului în care vocalele și consoanele alternează
       genereaza_anagrame_alternante(, cuvant, anagrame)
       # Sortăm și afișăm anagramele sau afișăm mesajul IMPOSIBIL dacă nu există soluții
       if anagrame:
           for anagrama in sorted(anagrame):
               print(anagrama)
       else:
           print("IMPOSIBIL")
   except Exception as e:
       print(f"A intervenit o eroare: {e}")

if __name__ == "__main__":

   main()

</syntaxhighlight>