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