Anagrammi

Data una lista qualsiasi visualizza tutte le liste permutazioni: Pn=n!

def scambia(lista, p1, p2):
    temp     =lista[p1]
    lista[p1]=lista[p2]
    lista[p2]=temp

def permuta(lista, pos, n):
    if(pos == n):
        print(lista,end="\t")
    else:
        for k in range(pos, n):
            scambia(lista,pos, k)
            permuta(lista, pos+1, n)
            scambia(lista,pos, k)

LISTA=[1,2,3,4]
permuta(LISTA, 0, len(LISTA))

Parola

Data una certa parola si ottengono tutti gli anagrammi

Si utilizzano le funzioni

  • list(...)
  • str().join(...)
def scambia(lista, p1, p2):
    temp     =lista[p1]
    lista[p1]=lista[p2]
    lista[p2]=temp

def permuta(lista, pos, n):
    if(pos == n):
        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))

Le parole non sono in ordine alfabetico
L’elenco può essere ordinato

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)
        print(parola, end="\t")
        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()
print("\n")
for parola in ELENCO:
    print(parola, end="\t")

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)
        print(parola, end="\t")
        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)
ELENCO2=list(ELENCO)
ELENCO2.sort()
print("\n")
for parola in ELENCO2:
    print(parola, end="\t")