0194 - Anagrame1

From Bitnami MediaWiki

Enunț[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

Fişierul de ieşire anagrameOUT.txt va conţine toate anagramele cuvântului S, fiecare pe o linie, în ordine alfabetică.

Exemplul 1[edit | edit source]

anagrameIN.txt

cal

anagrameOUT.txt

acl
alc
cal
cla
lac
lca

Exemplul 2[edit | edit source]

anagrameIN.txt

4tal

consola

Cuvântul trebuie să aibă între 1 și 8 litere și să nu conțină numere.

Rezolvare[edit | edit source]

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