41 lines
1 KiB
Text
41 lines
1 KiB
Text
[ stack ] is deranges.num ( --> [ )
|
|
|
|
forward is (deranges)
|
|
[ over size
|
|
deranges.num share = iff
|
|
[ over temp take
|
|
swap nested join
|
|
temp put ]
|
|
else
|
|
[ dup size times
|
|
[ 2dup i^ pluck
|
|
dip [ over size ]
|
|
tuck != iff
|
|
[ rot swap
|
|
nested join
|
|
swap (deranges) ]
|
|
else
|
|
[ drop 2drop ] ] ]
|
|
2drop ] resolves (deranges) ( [ [ --> )
|
|
|
|
[ dup deranges.num put
|
|
[] swap times [ i^ join ]
|
|
[] temp put
|
|
[] swap (deranges)
|
|
temp take
|
|
deranges.num release ] is derangements ( n --> [ )
|
|
|
|
[ dup 0 = iff [ drop 1 ] done
|
|
1 0 rot
|
|
1 - times
|
|
[ swap over + i^ 1+ * ]
|
|
nip ] is sub! ( n --> n )
|
|
|
|
4 derangements witheach [ echo cr ]
|
|
cr
|
|
10 times
|
|
[ i^ echo sp
|
|
i^ derangements size echo sp
|
|
i^ sub! echo cr ]
|
|
cr
|
|
20 sub! echo
|