Regexp-Sudoku
view release on metacpan or search on metacpan
lib/Regexp/Sudoku.pm view on Meta::CPAN
package Regexp::Sudoku;
use 5.028;
use strict;
use warnings;
no warnings 'syntax';
use experimental 'signatures';
use experimental 'lexical_subs';
our $VERSION = '2022062101';
use lib qw [lib];
use Hash::Util::FieldHash qw [fieldhash];
use List::Util qw [min max];
use Regexp::Sudoku::Utils;
use Regexp::Sudoku::Battenburg;
use Regexp::Sudoku::Quadruple;
use Regexp::Sudoku::Diagonal;
use Regexp::Sudoku::Parity;
use Regexp::Sudoku::Renban;
use Regexp::Sudoku::German_Whisper;
our @ISA = qw [
Regexp::Sudoku::Battenburg
Regexp::Sudoku::Quadruple
Regexp::Sudoku::Diagonal
Regexp::Sudoku::Parity
Regexp::Sudoku::Renban
Regexp::Sudoku::German_Whisper
];
fieldhash my %size;
fieldhash my %values;
fieldhash my %box_width;
fieldhash my %box_height;
fieldhash my %values_range;
fieldhash my %cell2houses;
fieldhash my %house2cells;
fieldhash my %clues;
fieldhash my %subject;
fieldhash my %pattern;
fieldhash my %constraints;
################################################################################
#
# new ($class)
#
# Create an uninitialized object.
#
################################################################################
sub new ($class) {bless \do {my $v} => $class}
################################################################################
#
# init_sizes ($self, $size)
#
# Initialize the sizes of the soduko.
#
# Calls init_size () and init_box () doing the work.
#
# TESTS: 010_size.t
#
################################################################################
sub init_sizes ($self, $args) {
$self -> init_size ($args)
-> init_box ($args);
}
################################################################################
#
# init_size ($self, $size)
#
# Initialize the size of a sudoku. If the size is not given, use the default.
#
# TESTS: 010_size.t
#
################################################################################
sub init_size ($self, $args = {}) {
$size {$self} = delete $$args {size} || $DEFAULT_SIZE;
die "Size should not exceed $NR_OF_SYMBOLS\n"
if $size {$self} > $NR_OF_SYMBOLS;
$self;
}
################################################################################
#
# size ($self)
#
# Returns the size of the sudoku.
#
# TESTS: 010_size.t
#
################################################################################
sub size ($self) {
$size {$self}
}
################################################################################
#
# init_values ($self, $args)
#
# Initializes the values. We calculate them from the range (1-9, A-Z),
# as many as needed.
#
( run in 3.609 seconds using v1.01-cache-2.11-cpan-140bd7fdf52 )