<?php
class SudokuSolver
{
protected $sudokuRows;
public function __construct ($sudoku)
{
$this->sudokuRows = $sudoku;
}
protected static function getNumbers ()
{
return 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!");
}
$this->calculatePossibleNumbers();
}
protected function calculatePossibleNumbers()
{
$rowIndex = 0;
while ($rowIndex < 9) {
$columnIndex = 0;
while ($columnIndex < 9) {
$columnIndex++;
}
$rowIndex++;
}
$cellValue =
}
protected function checkConsistenz ()
{
$columns = $this->sudokuRows;
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;
}
$indexOf = arrau_search($column,$numbers);
if (false === $indexOf)
{
return false;
}
unset($numbers[$indexOf]);
}
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);
- Output for 5.3.0 - 5.3.27, 5.4.0 - 5.4.17
- Parse error: syntax error, unexpected '}' in /in/A4H7m on line 54
Process exited with code 255.
preferences:
192.43 ms | 1395 KiB | 53 Q