Data una certa parola si ottengono tutti gli anagrammi generando tutte le permutazioni dei caratteri.
def scambia(lista, p1, p2):
temp = lista[p1]
lista[p1] = lista[p2]
lista[p2] = temp
def permuta(lista, pos, n):
if(pos == n-1):
print(str().join(lista), end = "\t")
else:
for k in range(pos, n):
scambia(lista, pos, k)
permuta(lista, pos+1, n)
scambia(lista, pos, k)
PAROLA = "amor"
permuta(list(PAROLA), 0, len(PAROLA))
Gli scambi avvengono comunque su lista.
Per riavere la stringa in uscita si utilizza str().join(lista).
Le parole non sono in ordine alfabetico.
Parole ordinate
Le parole possono essere inserite in una lista e poi ordinate.
def scambia(lista, p1, p2):
temp = lista[p1]
lista[p1] = lista[p2]
lista[p2] = temp
def permuta(lista, pos, n, elenco):
if(pos == n):
parola = str().join(lista)
elenco.append(parola)
else:
for k in range(pos, n):
scambia(lista, pos, k)
permuta(lista, pos+1, n, elenco)
scambia(lista, pos, k)
PAROLA = "amor"
ELENCO = []
permuta(list(PAROLA), 0, len(PAROLA), ELENCO)
ELENCO.sort()
for parola in ELENCO:
print(parola, end = "\t")
Parole senza ripetizioni
Se ci sono lettere ripetute alcune parole si ripeteranno più volte.
La sequenza di tipo set elimina le ripetizioni.
def scambia(lista, p1, p2):
temp = lista[p1]
lista[p1] = lista[p2]
lista[p2] = temp
def permuta(lista, pos, n, elenco):
if(pos == n):
parola = str().join(lista)
elenco.add(parola)
else:
for k in range(pos, n):
scambia(lista, pos, k)
permuta(lista, pos+1, n, elenco)
scambia(lista, pos, k)
PAROLA = "amar"
elenco = set()
permuta(list(PAROLA), 0, len(PAROLA), elenco)
ELENCO = list(elenco)
ELENCO.sort()
for parola in ELENCO:
print(parola, end = "\t")