Magic squares/Perl: Difference between revisions
m
Fix link: Perl 6 --> Raku
SqrtNegInf (talk | contribs) (Added Perl example) |
SqrtNegInf (talk | contribs) m (Fix link: Perl 6 --> Raku) |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 7:
</ul>
<span style='font-family: "Linux Libertine",Georgia,Times,serif;font-size:150%;'>[[Perl]]</span><hr>
{{trans|
<lang perl>use strict;
use warnings;
Line 19 ⟶ 20:
$h = int($n / 2);
$q = int($n / 4);
validate_magic();
printf("N = $n, magic number = %d\n", sum @{$sq[0]});
printf(("%@{[1+length($n**2)]}d"x$n)."\n",@$_) for @sq;
Line 25 ⟶ 27:
}
sub
my($n) = @_;
Line 48 ⟶ 50:
for my $r (0..$q-1) {
for my $c ($q .. $n-$q-1) {
($sq[$r][$c], $sq[$rp][$cp]) = ($sq[$rp][$cp], $sq[$r][$c]);▼
}
}
} elsif (0 == int($n%2) && $n%4) { # singly even
$i *= 4;
for my $r (0..$h-1) {
Line 66:
for my $c (0..$q-1) {
next if $c == 0 and $r == int(($h-1)/2);
swap( (
}
if ($h > 4) {
}
}
swap( (
}
}
sub swap {
my($a,$b,$c,$d) = @_;
}
sub validate_magic {
my $magic = sum @{$sq[0]};
my @transpose;
foreach my $j (0..$#{$sq[0]}) {
push(@transpose, [map $_->[$j], @sq]);
}
for (0..$#sq) {
die unless $magic == sum @{ $sq[$_]} and $magic == sum @{$transpose[$_]}
}
}</lang>
|