3154 - anagrame pfv

From Bitnami MediaWiki
Revision as of 12:51, 4 December 2023 by Gabii (talk | contribs) (Pagină nouă: = Cerința = Se citește de la tastatură un cuvânt <code>s</code> format din cel mult <code>11</code> litere mici distincte. Să se genereze în ordine alfabetică și să se afișeze toate anagramele cuvântului <code>s</code> în care vocalele sunt puncte fixe. = Date de intrare = Programul citește de la tastatură cuvântul <code>s</code>. = Date de ieșire = Programul va afișa pe ecran pe rânduri separate anagramele cuvântului citit în care vocalele rămân pe po...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința

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

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

Date de ieșire

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

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

Exemplul 1

Intrare

dorel

Ieșire

doler
dorel
loder
lored
rodel
roled

Exemplul 2

Intrare

guadalahara

consola

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

Rezultat

<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>