Cramer's rule: Difference between revisions

m
→‎{{header|Raku}}: some sigil-less, other changes for code-readability
m (syntax highlighting fixup automation)
m (→‎{{header|Raku}}: some sigil-less, other changes for code-readability)
Line 2,333:
(formerly Perl 6)
<syntaxhighlight lang="raku" line>sub det(@matrix) {
my @a = @matrix.map: { [|$_] };
my $sign = +1;
my $pivot = 1;
for ^@a -> $\k {
my @r = ($k+1 ..^ @a.end);
my $previous-pivot = $pivot;
if 0 == ($pivot = @a[$k][$;k]) {
(my $\s = @r.first: { @a[$_][$;k] != 0 }) // return 0;
(@a[$s], @a[$k]) = (@a[$k], @a[$s]);
my $pivot = @a[$k][$;k];
$sign = -$sign;
}
for @r X @r -> ($\i, $\j) {
((@a[$i][$;j] *×= $pivot) -= @a[$i][$;k]*×@a[$k][$;j]) /= $previous-pivot;
}
}
$sign *× $pivot
}
 
sub cramers_rule(@A, @terms) {
gather for ^@A -> $\i {
my @Ai = @A.map: { [|$_] };
for ^@terms -> $\j {
@Ai[$j][$;i] = @terms[$j];
}
take det(@Ai);
Line 2,369:
);
 
my @free_terms = (<-3, -32, -47, 49)>;
my ($w, $x, $y, $z) = |cramers_rule(@matrix, @free_terms);
("w = $w", "x = $x", "y = $y", "z = $z").join("\n").say;</syntaxhighlight>
 
say "w = $w";
say "x = $x";
say "y = $y";
say "z = $z";</syntaxhighlight>
{{out}}
<pre>
2,392

edits