2018-06-22 20:57:24 +00:00
|
|
|
|
sub derangements(@l) {
|
|
|
|
|
|
@l.permutations.grep(-> @p { none(@p Zeqv @l) })
|
2013-04-10 23:57:08 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-06-22 20:57:24 +00:00
|
|
|
|
sub prefix:<!>(Int $n) {
|
|
|
|
|
|
(1, 0, 1, -> $a, $b { ($++ + 2) × ($b + $a) } ... *)[$n]
|
2016-12-05 22:15:40 +01:00
|
|
|
|
}
|
2013-04-10 23:57:08 -07:00
|
|
|
|
|
2018-06-22 20:57:24 +00:00
|
|
|
|
say 'derangements([1, 2, 3, 4])';
|
|
|
|
|
|
say derangements([1, 2, 3, 4]), "\n";
|
2013-04-10 23:57:08 -07:00
|
|
|
|
|
2018-06-22 20:57:24 +00:00
|
|
|
|
say 'n == !n == derangements(^n).elems';
|
|
|
|
|
|
for 0 .. 9 -> $n {
|
|
|
|
|
|
say "!$n == { !$n } == { derangements(^$n).elems }"
|
2013-04-10 23:57:08 -07:00
|
|
|
|
}
|