0194 - Anagrame1

From Bitnami 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

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