Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def det_golf(m):
- side = int(len(m)**.5)
- fac = lambda n:(lambda f,a:f(f,a))(lambda f,a:a*f(f,a-1)if a else 1,n)
- poista = lambda t,i:t[:i]+t[i+1:]
- perm = lambda m,i:(lambda f,*a:f(f,*a))(lambda f,m,i:[m[i//fac(len(m)-1)]]+f(f,poista(m,i//fac(len(m)-1)),i%fac(len(m)-1))if m else [],m,i-1)
- sign = lambda m,p:(lambda f,*a:f(f,*a))(lambda f,m,p:1if len(p)<2else-f(f,m[1:],p[1:p.index(m[0])]+[p[0]]+p[p.index(m[0])+1:])if m[0]-p[0]else f(f,m[1:],p[1:]),m,p)
- prod = lambda t:print(t)or(lambda f,a:f(f,a))(lambda f,a:a[0]*f(f,a[1:])if a else 1,t)
- mat = list(range(side))
- for n in range(fac(len(mat))):print(perm(mat,n+1), sign(mat,perm(mat,n+1)))
- det = sum(sign(mat,perm(mat,n+1))*prod(list(m[i+side*perm(mat,n+1)[i]]for i in range(side)))for n in range(fac(side)))
- return det
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement