Games-Sudoku-General
view release on metacpan or search on metacpan
lib/Games/Sudoku/General.pm view on Meta::CPAN
my %constraint_method = (
'?' => '_constraint_backtrack',
);
sub _constrain {
my ( $self ) = @_;
my $stack = $self->{backtrack_stack} ||= []; # May hit this
# when initializing.
my $used = $self->{constraints_used} ||= {};
my $iterations;
$iterations = $self->{iteration_limit}
if $self->{iteration_limit} > 0;
$self->{no_more_solutions} and
return $self->_unload (undef, SUDOKU_NO_SOLUTION);
@{$self->{backtrack_stack}} and do {
$self->_constraint_remove and
return $self->_unload (undef, SUDOKU_NO_SOLUTION);
};
lib/Games/Sudoku/General.pm view on Meta::CPAN
} # Next set containing vacant cells
} # Next order
return [];
}
# ? constraint - initiate backtracking.
sub _constraint_backtrack {
my ( $self ) = @_;
## --$iterations >= 0 or return $self->_unload ('', SUDOKU_TOO_HARD)
## if defined $iterations;
my @try;
my $syms = @{$self->{symbol_list}};
foreach my $cell (@{$self->{cell}}) {
next if $cell->{content};
next unless @{$cell->{membership}};
my $possible = 0;
for (my $val = 1; $val < $syms; $val++) {
$possible++ unless $cell->{possible}{$val};
}
$possible or return ['backtrack'];
( run in 1.732 second using v1.01-cache-2.11-cpan-71847e10f99 )