Sudoku: Difference between revisions

(→‎{{header|Groovy}}: minor changes, run on faster machine)
Line 3,640:
 
=={{header|Perl 6}}==
(Translation of Perl)
 
<lang perl6>use v6;
my @A = <
sub solve(@A is copy) {
constant IJK = [
my &I = * div 9;, # line number
my &J = * %mod 9;, # column number
my &K = { ($_ div 27) * 3 + $_ % 9 div 3 };, # bloc number
}];
for ^@A -> $i {
next if @A[$i];
my @taken-values = @A[
grep { [||] IJK[]».($_) Z== IJK[]».($i) }, ^@A
my $i = 1 ];
for grep none(@taken-values), 1..9 {
@A[$i] = $_;
solve @A;
}
return @A[$i] = 0;
}, ^@A
forreturn ^@A {;
sub show(@A is copy) {
say join "\n\n", (
join "\n", (
join ' ', (
join ' ', @A.shift xx 3
) xx 3
) xx 3
) xx 3;
}
show solve <
5 3 0 0 2 4 7 0 0
0 0 2 0 0 0 8 0 0
Line 3,655 ⟶ 3,683:
9 6 0 0 1 0 3 0 0
0 5 0 6 9 0 0 1 0
>;</lang>
my &I = * div 9; # line number
my &J = * % 9; # column number
my &K = { ($_ div 27) * 3 + $_ % 9 div 3 }; # bloc number
 
sub solve {
for ^@A -> $i {
next if @A[$i];
my @taken-values = @A[
grep {
I($_) == I($i) || J($_) == J($i) || K($_) == K($i)
}, ^@A
];
for grep none(@taken-values), 1..9 {
@A[$i] = $_;
solve;
}
return @A[$i] = 0;
}
my $i = 1;
for ^@A {
print "@A[$_] ";
print " " if $i %% 3;
print "\n" if $i %% 9;
print "\n" if $i++ %% 27;
}
solve;</lang>
 
{{out}}
1,934

edits