3155 - anagrame4
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 consoanele 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 consoanele 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
Exemplu 1
- Intrare
sorina
- Iesire
sarino
saroni
sirano
sirona
sorani
sorina
Rezolvare
<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>