3155 - anagrame4

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

Exemplu 1[edit | edit source]

Intrare

sorina

Iesire

sarino
saroni
sirano
sirona
sorani
sorina

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> import itertools

def read_input():

   return input().strip()

def write_output(anagrams):

   for anagram in anagrams:
       print(anagram)

def generate_anagrams(word):

   vowels = 'aeiou'
   vowel_positions = [(i, char) for i, char in enumerate(word) if char in vowels]
   fixed_positions = [(i, char) for i, char in enumerate(word) if char not in vowels]
   
   if not vowel_positions:
       return [word]
   
   vowel_chars = [char for _, char in vowel_positions]
   vowel_permutations = sorted(set(itertools.permutations(vowel_chars)))
   
   anagrams = []
   for perm in vowel_permutations:
       perm_word = list(word)
       for (i, _), char in zip(vowel_positions, perm):
           perm_word[i] = char
       anagrams.append("".join(perm_word))
   
   return anagrams

def main():

   word = read_input()
   
   if not (1 <= len(word) <= 11):
       raise ValueError("Cuvântul trebuie să aibă între 1 și 11 caractere.")
   if not all(char.islower() and char.isalpha() for char in word):
       raise ValueError("Cuvântul trebuie să fie format doar din litere mici distincte.")
   
   anagrams = generate_anagrams(word)
   write_output(anagrams)

if __name__ == '__main__':

   main()

</syntaxhighlight>