2205 - permrep

De la Universitas MediaWiki

Enunț

Se consideră un cuvânt C format din litere mici, nu neapărat distincte.

Cerința

Să se afișeze în ordine lexicografică toate cuvintele distincte formate cu exact aceleași caractere ca și C.

Date de intrare

Fișierul de intrare permrepIN.txt conține pe prima linie cuvântul C.

Date de ieșire

Fișierul de ieșire permrepOUT.txt va conține pe câte o linie un cuvânt care are exact aceleași litere ca și C. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Nu corespunde restricțiilor".

Restricții și precizări

  • Cuvântul C va avea lungimea de cel mult 9

Exemplul 1

permrepIN.txt

mama

permrepOUT.txt

aamm
amam
amma
maam
mama
mmaa

Exemplul 2

permrepIN.txt

Pneumonomie

consola

Nu corespunde restricțiilor

Rezolvare

def genereaza_permutari(cuvant):
    if len(cuvant) == 0:
        return ['']

    litera = cuvant[0]
    permutari_rest = genereaza_permutari(cuvant[1:])
    rezultat = set()

    for perm in permutari_rest:
        for i in range(len(perm) + 1):
            rezultat.add(perm[:i] + litera + perm[i:])

    return list(rezultat)

def main():
    # Citire cuvânt din fișierul de intrare
    with open('permrepIN.txt', 'r') as intrare:
        cuvant = intrare.readline().strip()

    # Verificare lungime cuvânt
    if len(cuvant) > 9:
        print("Nu corespunde restricțiilor")
        return

    # Generare și sortare lexicografică a permutărilor cuvântului
    permutari = genereaza_permutari(cuvant)
    permutari.sort()

    # Scriere în fișierul de ieșire
    with open('permrepOUT.txt', 'w') as iesire:
        for perm in permutari:
            iesire.write(perm + '\n')

if __name__ == "__main__":
    main()