Permutations/Derangements: Difference between revisions

(→‎{{header|Perl}}: Add second version using a module)
Line 2,167:
{{works with|Rakudo|2016.10}}
<lang perl6>
sub is-derangementderangements(List $@l) {
$x.permutations(@l).grep( *.&is-derangement> @p { none(@p Zeqv @l) })
return not grep { $l[$_] == $_ }, 0..($l.elems - 1);
}
 
sub prefix:<!>(Int $xn) {
# task 1
(1, 0, 1, -> $a, $b { ($++ + 2) × ($b + $a) } ... *)[$n]
sub derangements(Range $x) {
$x.permutations.grep( *.&is-derangement )
}
 
subsay derangements(Range[1, $x)2, {3, 4]);
# task 2
.say for (0..4).&derangements;
 
for ^0 .. 9 -> $n {
# task 3
say "count:!$n "== ~{ !$n; }"
sub prefix:<!>(Int $x) {
return +derangements(^$x);
}
 
# task 4
for ^9 -> $n {
say "number: " ~ $n;
say "count: " ~ !$n;
say "derangements: ";
.say for (0..$n-1).&derangements;
}
</lang>
{{out}}
<pre>
((2 1 4 3) (2 3 4 1) (2 4 1 3) (3 1 4 2) (3 4 1 2) (3 4 2 1) (4 1 2 3) (4 3 1 2) (4 3 2 1))
!0 == 1
!1 == 0
!2 == 1
!3 == 2
!4 == 9
!5 == 44
!6 == 265
!7 == 1854
!8 == 14833
!9 == 133496
</pre>
 
=={{header|Phix}}==
Anonymous user