19 lines
353 B
Text
19 lines
353 B
Text
derangements(n)=if(n,round(n!/exp(1)),1);
|
|
derange(n)={
|
|
my(v=[[]],tmp);
|
|
for(level=1,n,
|
|
tmp=List();
|
|
for(i=1,#v,
|
|
for(k=1,n,
|
|
if(k==level, next);
|
|
for(j=1,level-1,if(v[i][j]==k, next(2)));
|
|
listput(tmp, concat(v[i],k))
|
|
)
|
|
);
|
|
v=Vec(tmp)
|
|
);
|
|
v
|
|
};
|
|
derange(4)
|
|
for(n=0,9,print("!"n" = "#derange(n)" = "derangements(n)))
|
|
derangements(20)
|