0194 - Anagrame1
Enunț
Se numește anagramă a unui cuvânt dat, un alt cuvânt ce conține toate literele primului, eventual în altă ordine.
Cerinţa
Se dă un cuvânt din cel mult 8 litere distincte. Să se afișeze, în ordine alfabetică, toate anagramele acestui cuvânt.
Date de intrare
Fişierul de intrare anagrameIN.txt conţine pe pe prima linie un cuvânt S, format din cel mult 8 litere distincte ale alfabetului englez.
Date de ieşire
Fişierul de ieşire anagrameOUT.txt va conţine toate anagramele cuvântului S, fiecare pe o linie, în ordine alfabetică.
Exemplul 1
anagrameIN.txt
cal
anagrameOUT.txt
acl alc cal cla lac lca
Exemplul 2
anagrameIN.txt
4tal
consola
Cuvântul trebuie să aibă între 1 și 8 litere și să nu conțină numere.
Rezolvare
<syntaxhighlight lang="python3" line="1"> from itertools import permutations
def generate_anagrams(word):
# Generăm toate permutările cuvântului all_permutations = permutations(word)
# Sortăm permutările în ordine alfabetică sorted_anagrams = sorted(set(.join(perm) for perm in all_permutations))
return sorted_anagrams
def validate_word(word):
# Verificăm restricțiile return 1 <= len(word) <= 8 and word.isalpha()
def main():
try:
# Citim cuvântul din fișierul de intrare
with open("anagrameIN.txt", "r") as file:
word = file.readline().strip()
# Verificăm restricțiile utilizând funcția separată
if not validate_word(word):
print("Cuvântul trebuie să aibă între 1 și 8 litere și să nu conțină numere.")
return
# Generăm anagramele
anagrams = generate_anagrams(word)
# Scriem anagramele în fișierul de ieșire
with open("anagrameOUT.txt", "w") as file:
for anagram in anagrams:
file.write(anagram + '\n')
except Exception as e:
print(f"A intervenit o eroare: {e}")
if __name__ == "__main__":
main()
</syntaxhighlight>