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