Jump to content

Solve a Numbrix puzzle: Difference between revisions

m (→‎{{header|SystemVerilog}}: Remove vanity tags)
Line 1,213:
41 42 45 46 49 50 81 80 79
</pre>
 
=={{header|Perl}}==
Tested on perl v5.26.1
<lang Perl>#!/usr/bin/perl
 
use strict;
use warnings;
 
$_ = <<END;
0 0 0 0 0 0 0 0 0
0 0 46 45 0 55 74 0 0
0 38 0 0 43 0 0 78 0
0 35 0 0 0 0 0 71 0
0 0 33 0 0 0 59 0 0
0 17 0 0 0 0 0 67 0
0 18 0 0 11 0 0 64 0
0 0 24 21 0 1 2 0 0
0 0 0 0 0 0 0 0 0
END
 
my $gap = /.\n/ * $-[0];
print;
s/ (?=\d\b)/0/g;
my $max = sprintf "%02d", tr/0-9// / 2;
 
solve( '01', $_ );
 
sub solve
{
my ($have, $in) = @_;
$have eq $max and exit !print "solution\n", $in =~ s/\b0/ /gr;
if( $in =~ ++(my $want = $have) )
{
$in =~ /($have|$want)( |.{$gap})($have|$want)/s and solve($want, $in);
}
else
{
($_ = $in) =~ s/$have \K00/$want/ and solve( $want, $_ ); # R
($_ = $in) =~ s/$have.{$gap}\K00/$want/s and solve( $want, $_ ); # D
($_ = $in) =~ s/00(?= $have)/$want/ and solve( $want, $_ ); # L
($_ = $in) =~ s/00(?=.{$gap}$have)/$want/s and solve( $want, $_ ); # U
}
}</lang>
 
{{out|case=first example}}
<b>
<pre> 0 0 0 0 0 0 0 0 0
0 0 46 45 0 55 74 0 0
0 38 0 0 43 0 0 78 0
0 35 0 0 0 0 0 71 0
0 0 33 0 0 0 59 0 0
0 17 0 0 0 0 0 67 0
0 18 0 0 11 0 0 64 0
0 0 24 21 0 1 2 0 0
0 0 0 0 0 0 0 0 0
solution
49 50 51 52 53 54 75 76 81
48 47 46 45 44 55 74 77 80
37 38 39 40 43 56 73 78 79
36 35 34 41 42 57 72 71 70
31 32 33 14 13 58 59 68 69
30 17 16 15 12 61 60 67 66
29 18 19 20 11 62 63 64 65
28 25 24 21 10 1 2 3 4
27 26 23 22 9 8 7 6 5
</pre>
</b>
 
=={{header|Perl 6}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.