NAME
Games::Sudoku::CPSearch - Solve Sudoku problems quickly.
VERSION
Version 1.00
SYNOPSIS
use Games::Sudoku::CPSearch;
my $puzzle = <<PUZZLE;
4.....8.5
.3.......
...7.....
.2.....6.
....8.4..
....1....
...6.3.7.
5..2.....
1.4......
PUZZLE
open FH, ">example.txt";
print FH $puzzle;
close FH;
my $sudoku = Games::Sudoku::CPSearch->new("example.txt");
print $sudoku->solve(), "\n";
DESCRIPTION
This module solves a Sudoku puzzle using the same constraint propagation technique/algorithm explained on Peter Norvig's website (http://norvig.com/sudoku.html), and implemented there in Python.
METHODS
- $o = Games::Sudoku::CPSearch->new()
-
Initializes the sudoku solving framework.
- $o->solve()
-
Solves the puzzle. Returns the solution as a flat 81 character string.
- $o->set_puzzle($puzzle)
-
Sets the puzzle to be solved. The only parameter is the 81 character string representing the puzzle. The only characters allowed are [0-9\.\-]. Sets the puzzle to be solved. You can then reuse the object:
my $o = Games::Sudoku::CPSearch->set_puzzle($puzzle); print $o->solve(), "\n"; $o->set_puzzle($another_puzzle); print $o->solve(), "\n";
- $o->solution()
-
Returns the solution string, or the empty string if there is no solution.
INTERNAL METHODS
These methods are exposed but are not intended to be used.
- $o->_fullgrid()
-
Returns a hash with squares as keys and "123456789" as each value.
- $o->_puzzle()
-
Returns the object's puzzle as an 81 character string.
- $o->_unitlist($square)
-
Returns an list of sudoku "units": rows, columns, boxes for a given square.
- $o->_propagate()
-
Perform the constraint propagation on the Sudoku grid.
- $o->_eliminate($grid, $square, $digit)
-
Eliminate digit from the square in the grid.
- $o->_assign($grid, $square, $digit)
-
Assign digit to square in grid. Mutually recursive with eliminate().
- $o->_rows()
-
Returns array of row values: A-I
- $o->_cols()
-
Returns array of column values: 1-9
- $o->_squares()
-
Return list of all the squares in a Sudoku grid: A1, A2, ..., A9, B1, ..., I1, ..., I9
- $o->_units($square)
-
Return list of all the units for a given square.
- $o->_peers($square)
-
Return list of all the peers for a given square.
- $o->_search()
-
Perform search for a given grid after constraint propagation.
- $o->_cross()
-
Return "cross product" of 2 arrays.
- $o->_verify($solution)
-
Returns undef if the sudoku solution is not valid. Returns 1 if it is.
AUTHOR
Martin-Louis Bright, <mlbright at gmail.com>
BUGS
Please report any bugs or feature requests to bug-games-sudoku-cpsearch at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Games-Sudoku-CPSearch. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Games::Sudoku::CPSearch
You can also look for information at:
RT: CPAN's request tracker
http://rt.cpan.org/NoAuth/Bugs.html?Dist=Games-Sudoku-CPSearch
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
Search CPAN
ACKNOWLEDGEMENTS
Peter Norvig, for the explanation/tutorial and python code at http://www.norvig.com/sudoku.html.
COPYRIGHT & LICENSE
Copyright 2008 Martin-Louis Bright, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.