Algorithm-X-DLX
view release on metacpan or search on metacpan
examples/polyomino/Shape.pm view on Meta::CPAN
my ($self) = @_;
my @rows = map { [reverse @$_] } @{$self->{bits}};
return Shape->new($self->{name}, \@rows);
}
sub rotations {
my ($self) = @_;
my @result = ($self);
my $shape = $self->rotate();
#TODO: compare shapes
while ($shape->not_equals($result[0])) {
push @result, $shape;
$shape = $shape->rotate();
}
return @result;
}
sub reflections {
my ($self) = @_;
my @refl = ($self->reflect());
for my $rot ($self->rotations()) {
examples/polyomino/Shape.pm view on Meta::CPAN
use Data::Dumper;
sub equals {
my ($self, $rhs) = @_;
#print Dumper($self->{content}), "\n == ? \n" , Dumper($rhs->{content});
#exit 0;
return $self->{content} eq $rhs->{content};
# return reduce { $a &&= $_ eq $_[2] } (map { $_ eq $_[2] } @{$rhs->{bits}}) == scalar(@{$rhs->{bits}});
}
sub not_equals {
my ($self, $rhs) = @_;
return !($self->equals($rhs));
}
sub less_than {
my ($self, $rhs) = @_;
return join(',', map { join(',', @$_) } @{$self->{bits}}) lt join(',', map { join(',', @$_) } @{$rhs->{bits}});
}
1; # End of package return true;
examples/sudoku/Sudoku.pm view on Meta::CPAN
}
sub array_equals {
my ($a1, $a2) = @_;
# a replacement for the smartmatch operator '~~', giving warnings (experimental) since 5.18
# optional modules: List::Compare, Array::Compare, Data::Compare
my $match = @$a1 == @$a2 && !grep { !$_ } map { $a1->[$_] eq $a2->[$_] } 0 .. $#$a1;
return $match
}
sub not_equals {
my ($self, $other) = @_;
return !($self->equals($other));
}
sub to_string {
my ($self) = @_;
return $self->to_string_format(SudokuFormat->new($self->{type_}));
}
sub to_string_format {
( run in 0.314 second using v1.01-cache-2.11-cpan-0a987023a57 )