from math import factorial
n = 5 # matriz de orden nxn
lista = list(range(1,n+1)) # lista con los elementos a permutar
print(lista)
n = len(lista) # n es la longitud de la lista
print(f"El número de permutaciones posibles de {n} elementos es: {factorial(n)}")
import itertools
def permutations(elements):
if len(elements) <= 1:
yield elements
return
for perm in permutations(elements[1:]):
for i in range(len(elements)):
# nb elements[0:1] works in both string and list contexts
yield perm[:i] + elements[0:1] + perm[i:]
p = list(permutations(lista))
np = len(p) # p contiene todas las permutaciones posibles de la lista
print(np)
from random import seed, randint, sample
seed()
def comparalo(l, m): # compara la lista l con las listas de m
distinto = True
for i in range(len(m)):
for j in range(n):
if l[j]==m[i][j]: distinto = False
return distinto
def busca():
m = []
for fila in range(n): # las cuatro filas de la matriz m
cp = p[:] # cp es una copia de p
cp = sample(cp, np) # barajamos cp
if fila == 0: # primera fila de la matriz m
m.append(cp[0]) # la primera candidata se añade a m seguro
else:
for c in cp: # lista candidata tomada de cp
if comparalo(c, m):
m.append(c)
break
return m
if __name__=="__main__":
m = busca()
print(m, "\n")
for i in range(n):
print(*m[i])
import time
start = time.perf_counter()
def calcula_allm():
allm = []
contador = 0
num = np**2 # si n=5 entonces num=14400
while contador < num+100:
candidata = busca()
if candidata not in allm:
allm.append(candidata)
contador += 1
return allm
allm = calcula_allm()
end = time.perf_counter()
print(f"Time taken is {end - start}")
#print(sorted(allm))
print(len(allm))
def calcula_allm():
allm = []
contador = 0
num = np**2 # si n=5 entonces num=14400
while contador < 1_000_001: #num:
candidata = busca()
if candidata not in allm:
allm.append(candidata)
contador += 1
if contador > 160_530: print(contador)
return allm
allm = calcula_allm()
#print(sorted(allm))
print(len(allm))