Nonogram solver: Difference between revisions

m
→‎{{header|Perl}}: lightly edited for clarity
mNo edit summary
m (→‎{{header|Perl}}: lightly edited for clarity)
Line 1,942:
 
=={{header|Perl}}==
<lang perl>#!/usr/bin/perluse strict;
 
use strict; # http://www.rosettacode.org/wiki/Nonogram_solver
use warnings;
 
Line 1,950 ⟶ 1,948:
open my $fd, '<', $file or die "$! opening $file";
 
while(my $row = <$fd> )
{
$row =~ /\S/ or next;
my @rpats$column = makepatterns(split)<$fd>;
my @cpatsrpats = makepatterns(split ' ', <$fd>row);
my @cpats = makepatterns($column);
my @rows = ( '.' x @cpats ) x @rpats;
for( my $prev = ''; $prev ne "@rows"; )
Line 1,983 ⟶ 1,982:
}
 
sub makepatterns {
map { qr/^$_$/ # convert strings to regex
{
map qr/^$_$/, } map { '[0.]*' . join('[0.]+', map { "[1.]{$_}" } # prepend static pattern
map -64+ord, split //) . join('[0.]*+', # join with }static @_;pattern
map { "[1.]{$_}" # require to match exactly 'n' times
}</lang>
} map { -64+ord # convert letter value to repetition count 'n'
} split // # for each letter in group
)
. '[0.]*' # append static pattern
} split ' ', shift; # for each letter grouping
}</lang>
{{out}}
<pre>
Line 2,058 ⟶ 2,063:
..................#######
</pre>
 
=={{header|Phix}}==
Deduction only, no exhaustive search.
2,392

edits