3149 - anagrame vocale

De la Universitas MediaWiki

Cerința

Se citește un cuvânt format din cel puțin două și cel mult zece caractere litere mici distincte care conține cel puțin două vocale. Afișați în ordine lexicografică anagramele cuvântului citit care au proprietatea că încep și se termină cu o vocală.

Date de intrare

Programul citește de la tastatură șirul de caractere.

Date de ieșire

Programul va afișa pe ecran anagramele cerute, câte una pe un rând.

Restricții și precizări

  • numărul de caractere ale șirului dat este cuprins între 2 și 10;
  • cuvântul dat este format din litere mici distincte și conține cel puțin două vocale;
  • vocalele sunt a, e, i, o, u;

Exemplul 1

Intrare

alin

Ieșire

alni
anli
ilna
inla

Exemplul 1

Intrare

arc

consola

Cuvântul trebuie să aibă între 2 și 10 litere mici distincte și să conțină cel puțin două vocale.

Rezolvare

def este_anagrama_valida(cuvant):
    # Verificăm dacă cuvântul începe și se termină cu o vocală
    return cuvant[0] in 'aeiou' and cuvant[-1] in 'aeiou'

def genereaza_anagrame(curent, ramase, rezultat):
    if not ramase:
        if este_anagrama_valida(curent):
            rezultat.append(curent)
        return

    for i in range(len(ramase)):
        genereaza_anagrame(curent + ramase[i], ramase[:i] + ramase[i+1:], rezultat)

def valideaza_cuvant(cuvant):
    # Verificăm restricțiile
    return 2 <= len(cuvant) <= 10 and len(set(cuvant)) == len(cuvant) and sum(1 for char in cuvant if char in 'aeiou') >= 2

def main():
    try:
        # Citim cuvântul de la tastatură
        cuvant = input("Introduceți un cuvânt: ")

        # Verificăm restricțiile utilizând funcția separată
        if not valideaza_cuvant(cuvant):
            print("Cuvântul trebuie să aibă între 2 și 10 litere mici distincte și să conțină cel puțin două vocale.")
            return

        # Inițializăm o listă pentru a stoca anagramele rezultate
        anagrame = []

        # Generăm anagramele cuvântului care încep și se termină cu o vocală
        genereaza_anagrame('', cuvant, anagrame)

        # Sortăm și afișăm anagramele
        for anagrama in sorted(anagrame):
            print(anagrama)

    except Exception as e:
        print(f"A intervenit o eroare: {e}")

if __name__ == "__main__":
    main()