NAME
Regexp::Sudoku::Constants - Constants related to Regexp::Sudoku
SYNOPSIS
use Regexp::Sudoku;
use Regexp::Sudoku::Constants qw [:Houses :Constraints :Diagonals];
my $sudoku = Regexp::Sudoku:: -> new -> init (
clues => "...",
diagonals => $MAIN |. $MINOR,
houses => $NRC,
constaints => $ANTI_KING;
DESCRIPTION
This module exports constants to be used to configure Sudoku variants when using Regexp::Sudoku.
All constants are bitmasks based on vec. Constants are grouped based on Exporter tags; constants exported by the same tag can be mixed using the bitwise operators: |., &. and ~..
There are three tags :Houses, :Constraints and :Diagonals. There is also the tag :All, which can be used to import all the constants.
We'll discuss the constants below, grouped by the tag which imports them. (You can still import each constant individually if you wish to do so).
:Houses
These are used to signal the Sudoku variant uses additional houses. For a description of each additional house, see Regexp::Sudoku.
The constants are used for the houses parameter of the init function of Regexp::Sudoku.
$NRC-
This is for NRC Sudokus; also called Windokus or Hyper Sudokus.
$ASTERISK-
This is for Asterisk Sudokus.
$GIRANDOLA-
This is for Girandola Sudokus.
$CENTER_DOT-
This is for center dot Sudokus.
:Constraints
These constants are used for the constraints parameter, and indicate which additionally constraints apply to the Sudoku variant.
$ANTI_KNIGHT-
In an Anti-Knight Sudoku, cells which are a Knights move away (as in Chess) must be different.
$ANTI_KING-
In an Anti-King Sudoku, cells which touch each other (including cells which only touch by their corners) must be different. These cells corresponds with a Kings move in Chess. This type of Sudoku is also known as a No Touch Sudoku.
:Diagonals
Sudokus with constraints on diagonals (the constraint being that the cells on one or more diagonals should be different) are configured with the diagonals parameter, which takes one or more of the following constants as argument.
Note that there are many possible diagonals. For an N x N Sudoku, there are 4 * N - 2 possible diagonals; for a standard 9 x 9 Sudoku, this means 34 possible diagonals.
$MAIN-
This is used if the cells on the main diagonal, running from the top left to the bottom right, are all different. Aliases for
$MAINand$SUB0and$SUPER0. $MINOR-
This is used if the cells on the minor diagonal, running from the bottom left to the top right, are all different. Aliases for
$MINORand$MINOR_SUB0and$MINOR_SUPER0. $SUPER-
The super diagonal is the diagonal which runs one cell above (or to the right) of the main diagonal. This is an alias for
$SUPER1. $SUB-
The sub diagonal is the diagonal which runs one cell below (or to the left) of the main diagonal. This is an alias for
$SUB1. $MINOR_SUPER-
The minor super diagonal is the diagonal which runs one cell above (or to the left) of the minor diagonal. This is an alias for
$MINOR_SUPER1. $MINOR_SUB-
The minor sub diagonal is the diagonal which runs one cell below (or to the right) of the main diagonal. This is an alias for
$MINOR_SUB1. $SUPER1 .. $SUPER34-
$SUPERMis the diagonal which runs parallel to the main diagonal,Mcells above it (or to its right).Note: If we have an
N x NSudoku, then ifM >= N, this diagonal lies completely outside the Sudoku, and won't make any sense. IfM == N - 1the diagonal only contains a single cell (the one in the top right corner), and will not contain any other cells to differ from. For a standard9 x 9Sudoku, the diagonals$SUPER7and$SUPER6lie completely in the top right box, and hence, don't impose any additional constraints. $SUB1 .. $SUB34-
$SUBMis the diagonal which runs parallel to the main diagonal,Mcells below it (or to its left).The Note above applies here as well.
$MINOR_SUPER1 .. $MINOR_SUPER34-
$MINOR_SUPERMis the diagonal which runs parallel to the minor diagonal,Mcells above it (or to its left).The Note above applies here as well.
$MINOR_SUB1 .. $MINOR_SUB34-
$MINOR_SUBMis the diagonal which runs parallel to the minor diagonal,Mcells below it (or to its right).The Note above applies here as well.
$CROSS-
This is a mask oring
$MAINand$MINORtogether ($CROSS = $MAIN |. $MINOR). This is used to indicate cells on both the main and minor diagonals should differ. This is a common Sudoku variant, the X-Sudoku. $CROSS1 .. $CROSS34-
Each of those masks ors together the super, sub, minor super and minor sub diagonals
Msteps (for$CROSSM) above/below the main and minor diagonals. So, each$CROSSMmask implies uniqueness constraints on four diagonals. $DOUBLE-
This is an alias for
$CROSS1, and is used for a Sudoku variant where all the cells on the diagonals just next to the main and minor diagonals should be unique. $TRIPLE-
This mask combines
$CROSSand$CROSS1($TRIPLE = $CROSS |. $CROSS1). This is used for the variant where the cells on the six largest diagonals (the main and minor diagonals, and the four right next to them) should be unique. $ARGYLE-
This mask combines
$CROSS1and$CROSS4and is used for the Argyle Sudoku variant. The eight diagonals of this mask form a pattern known as an argyle pattern.
BUGS
There are no known bugs.
SEE ALSO
DEVELOPMENT
The current sources of this module are found on github, git://github.com/Abigail/Regexp-Sudoku.git.
AUTHOR
Abigail, mailto:cpan@abigail.freedom.nl.
COPYRIGHT and LICENSE
Copyright (C) 2021-2022 by Abigail.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
INSTALLATION
To install this module, run, after unpacking the tar-ball, the following commands:
perl Makefile.PL
make
make test
make install