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