0194 - Anagrame1
De la Universitas MediaWiki
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
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()