@ 2013-08-10T11:44:56Z <?php
class SudokuSolver
{
protected $sudokuColumns;
public function __construct ($sudoku)
{
$this->sudokuColumns = $sudoku;
}
protected static function getNumbers ()
{
return array_flip(str_split("123456789"));
}
// could be static as well
public function printOut ($sudoku)
{
foreach ($sudoku as $column) {
foreach ($column as $cell) {
echo "|";
if (null !== $cell) {
echo $cell;
} else {
echo " ";
}
}
echo "|\n";
}
}
public function solve()
{
if (!$this->checkConsistenz()) {
throw new Exception("inconsistent data!");
}
}
protected function checkConsistenz ()
{
$columns = $this->sudokuColumns;
foreach ($columns as $columnIndex => $column) {
if (!$this->checkLine($columnIndex,$column)) {
return false;
}
}
// check rows -> own method
$rows = array();
foreach ($columns as $columnIndex => $column) {
foreach ($column as $rowIndex => $cell) {
$rows[$rowIndex][$columnIndex] = $cell;
}
//$this->printOut($rows);
}
foreach ($rows as $rowIndex => $row) {
if (!$this->checkLine($rowIndex,$row)) {
return false;
}
}
// check field -> own method
$fields = array();
foreach ($columns as $columnIndex => $column) {
foreach ($column as $rowIndex => $cell) {
//echo "(3 * ($columnIndex / 3)) + ($rowIndex / 3) = ". (3 * ($columnIndex / 3)) ." + ". ($rowIndex / 3) ."\n";
$fields[(3 * intval($columnIndex / 3)) + intval($rowIndex / 3)][] = $cell;
}
}
print_r($fields);
foreach ($fields as $rowIndex => $row) {
if (!$this->checkLine($rowIndex,$row)) {
return false;
}
}
return true;
}
protected function checkLine ($rowIndex, $row)
{
$numbers = self::getNumbers();
echo "checking $rowIndex..\n";
foreach ($row as $column) {
if (null === $column) {
continue;
}
//echo "$column , $numbers\n" . var_export(strpos($numbers,$column),true);
if (!array_key_exists($column,$numbers))
{
return false;
}
unset($numbers[$column]);
}
return true;
}
}
$sudoku = array();
$sudoku[] = array(null,3,null, null,null,null, null,null,null);
$sudoku[] = array(3,null,null, 1,9,5, null,null,null);
$sudoku[] = array(null,null,8, null,null,null, null,6,null);
$sudoku[] = array(8,null,null, null,6,null, null,null,null);
$sudoku[] = array(4,null,null, 8,null,null, null,null,1);
$sudoku[] = array(null,null,null ,null,2,null, null,null,null);
$sudoku[] = array(null,6,null, null,null,null, 2,8,null);
$sudoku[] = array(null,null,null, 4,1,9, null,null,5);
$sudoku[] = array(null,null,null, null,null,null, null,7,null);
$sudokuSolver = new SudokuSolver($sudoku);
//$sudokuSolver->printOut($sudoku);
$sudokuSolver->solve($sudoku);
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 7.0.0 - 7.0.20 , 7.1.0 - 7.1.33 , 7.2.0 - 7.2.33 , 7.3.0 - 7.3.33 , 7.4.0 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 , 8.2.0 - 8.2.18 , 8.3.0 - 8.3.6 checking 0..
checking 1..
checking 2..
checking 3..
checking 4..
checking 5..
checking 6..
checking 7..
checking 8..
checking 0..
checking 1..
checking 2..
checking 3..
checking 4..
checking 5..
checking 6..
checking 7..
checking 8..
Array
(
[0] => Array
(
[0] =>
[1] => 3
[2] =>
[3] => 3
[4] =>
[5] =>
[6] =>
[7] =>
[8] => 8
)
[1] => Array
(
[0] =>
[1] =>
[2] =>
[3] => 1
[4] => 9
[5] => 5
[6] =>
[7] =>
[8] =>
)
[2] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] => 6
[8] =>
)
[3] => Array
(
[0] => 8
[1] =>
[2] =>
[3] => 4
[4] =>
[5] =>
[6] =>
[7] =>
[8] =>
)
[4] => Array
(
[0] =>
[1] => 6
[2] =>
[3] => 8
[4] =>
[5] =>
[6] =>
[7] => 2
[8] =>
)
[5] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] => 1
[6] =>
[7] =>
[8] =>
)
[6] => Array
(
[0] =>
[1] => 6
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] =>
[8] =>
)
[7] => Array
(
[0] =>
[1] =>
[2] =>
[3] => 4
[4] => 1
[5] => 9
[6] =>
[7] =>
[8] =>
)
[8] => Array
(
[0] => 2
[1] => 8
[2] =>
[3] =>
[4] =>
[5] => 5
[6] =>
[7] => 7
[8] =>
)
)
checking 0..
Fatal error: Uncaught Exception: inconsistent data! in /in/8h6Z0:36
Stack trace:
#0 /in/8h6Z0(114): SudokuSolver->solve(Array)
#1 {main}
thrown in /in/8h6Z0 on line 36
Process exited with code 255 . Output for 5.0.0 - 5.0.2 , 5.0.5 , 5.1.0 - 5.1.6 , 5.2.0 - 5.2.17 , 5.3.0 - 5.3.29 , 5.4.0 - 5.4.45 , 5.5.0 - 5.5.35 , 5.6.0 - 5.6.28 checking 0..
checking 1..
checking 2..
checking 3..
checking 4..
checking 5..
checking 6..
checking 7..
checking 8..
checking 0..
checking 1..
checking 2..
checking 3..
checking 4..
checking 5..
checking 6..
checking 7..
checking 8..
Array
(
[0] => Array
(
[0] =>
[1] => 3
[2] =>
[3] => 3
[4] =>
[5] =>
[6] =>
[7] =>
[8] => 8
)
[1] => Array
(
[0] =>
[1] =>
[2] =>
[3] => 1
[4] => 9
[5] => 5
[6] =>
[7] =>
[8] =>
)
[2] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] => 6
[8] =>
)
[3] => Array
(
[0] => 8
[1] =>
[2] =>
[3] => 4
[4] =>
[5] =>
[6] =>
[7] =>
[8] =>
)
[4] => Array
(
[0] =>
[1] => 6
[2] =>
[3] => 8
[4] =>
[5] =>
[6] =>
[7] => 2
[8] =>
)
[5] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] => 1
[6] =>
[7] =>
[8] =>
)
[6] => Array
(
[0] =>
[1] => 6
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] =>
[8] =>
)
[7] => Array
(
[0] =>
[1] =>
[2] =>
[3] => 4
[4] => 1
[5] => 9
[6] =>
[7] =>
[8] =>
)
[8] => Array
(
[0] => 2
[1] => 8
[2] =>
[3] =>
[4] =>
[5] => 5
[6] =>
[7] => 7
[8] =>
)
)
checking 0..
Fatal error: Uncaught exception 'Exception' with message 'inconsistent data!' in /in/8h6Z0:36
Stack trace:
#0 /in/8h6Z0(114): SudokuSolver->solve(Array)
#1 {main}
thrown in /in/8h6Z0 on line 36
Process exited with code 255 . Output for 5.0.3 - 5.0.4 checking 0..
checking 1..
checking 2..
checking 3..
checking 4..
checking 5..
checking 6..
checking 7..
checking 8..
checking 0..
checking 1..
checking 2..
checking 3..
checking 4..
checking 5..
checking 6..
checking 7..
checking 8..
Array
(
[0] => Array
(
[0] =>
[1] => 3
[2] =>
[3] => 3
[4] =>
[5] =>
[6] =>
[7] =>
[8] => 8
)
[1] => Array
(
[0] =>
[1] =>
[2] =>
[3] => 1
[4] => 9
[5] => 5
[6] =>
[7] =>
[8] =>
)
[2] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] => 6
[8] =>
)
[3] => Array
(
[0] => 8
[1] =>
[2] =>
[3] => 4
[4] =>
[5] =>
[6] =>
[7] =>
[8] =>
)
[4] => Array
(
[0] =>
[1] => 6
[2] =>
[3] => 8
[4] =>
[5] =>
[6] =>
[7] => 2
[8] =>
)
[5] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] => 1
[6] =>
[7] =>
[8] =>
)
[6] => Array
(
[0] =>
[1] => 6
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] =>
[8] =>
)
[7] => Array
(
[0] =>
[1] =>
[2] =>
[3] => 4
[4] => 1
[5] => 9
[6] =>
[7] =>
[8] =>
)
[8] => Array
(
[0] => 2
[1] => 8
[2] =>
[3] =>
[4] =>
[5] => 5
[6] =>
[7] => 7
[8] =>
)
)
checking 0..
Fatal error: Uncaught exception 'Exception' with message 'inconsistent data!' in /in/8h6Z0:36
Stack trace:
#0 /in/8h6Z0(36): SudokuSolver::solve()
#1 /in/8h6Z0(114): SudokuSolver->solve(Array)
#2 {main}
thrown in /in/8h6Z0 on line 36
Process exited with code 255 . Output for 4.4.2 - 4.4.9 Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/8h6Z0 on line 5
Process exited with code 255 . Output for 4.3.0 - 4.3.1 , 4.3.5 - 4.3.11 , 4.4.0 - 4.4.1 Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/8h6Z0 on line 5
Process exited with code 255 . Output for 4.3.2 - 4.3.4 Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /in/8h6Z0 on line 5
Process exited with code 255 . preferences:dark mode live preview
293.61 ms | 401 KiB | 388 Q