3154 - anagrame pfv

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 vocalele sunt puncte fixe.

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 rămân pe pozițiile inițiale.

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

  • cuvântul s are cel mult 11 caractere și este format din litere mici distincte

Exemplul 1[edit | edit source]

Intrare

dorel

Ieșire

doler
dorel
loder
lored
rodel
roled

Explicație[edit | edit source]

Anagramele sunt afișate în ordine lexicografică, iar literele o și e rămân pe pozițiile inițiale.

Exemplul 2[edit | edit source]

Intrare

guadalahara

consola

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

Rezultat[edit | edit source]

<syntaxhighlight lang="python3" line="1"> from itertools import permutations

def este_vocala(caracter):

   return caracter in "aeiou"

def valideaza_cuvant(cuvant):

   return len(cuvant) <= 11 and len(set(cuvant)) == len(cuvant)

def genereaza_anagrame(cuvant):

   vocale = [caracter for caracter in cuvant if este_vocala(caracter)]
   consoane = [caracter for caracter in cuvant if not este_vocala(caracter)]
   vocale_unice = set(vocale)
   pozitii_vocale = {vocala: [i for i, caracter in enumerate(cuvant) if caracter == vocala] for vocala in vocale_unice}
   anagrame = set()
   for consoane_permutate in set(permutations(consoane)):
       anagrama_curenta = list(consoane_permutate)
       for vocala in vocale_unice:
           for pozitie in pozitii_vocale[vocala]:
               anagrama_curenta.insert(pozitie, vocala)
       anagrame.add("".join(anagrama_curenta))
   return sorted(anagrame)

def main():

   cuvant = input("Introduceți cuvântul s: ").lower()
   if valideaza_cuvant(cuvant):
       anagrame = genereaza_anagrame(cuvant)
       for anagrama in anagrame:
           print(anagrama)
   else:
       print("Cuvântul trebuie să aibă cel mult 11 litere distincte.")

if __name__ == "__main__":

   main()

</syntaxhighlight>