3154 - anagrame pfv: Difference between revisions

From Bitnami MediaWiki
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...
 
Gabii (talk | contribs)
am adaugat explicatia
 
Line 22: Line 22:
  rodel
  rodel
  roled
  roled
== Explicație ==
Anagramele sunt afișate în ordine lexicografică, iar literele <code>o</code> și <code>e</code> rămân pe pozițiile inițiale.


== Exemplul 2 ==
== Exemplul 2 ==

Latest revision as of 21:43, 9 December 2023

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>