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.

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.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")