@ 2013-08-10T13:15:59Z <?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);
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).
Version System time (s) User time (s) Memory (MiB) 5.4.17 0.015 0.043 12.40 5.4.16 0.014 0.045 12.39 5.4.15 0.012 0.049 12.39 5.4.14 0.014 0.045 12.08 5.4.13 0.012 0.047 12.06 5.4.12 0.014 0.043 12.03 5.4.11 0.014 0.043 12.02 5.4.10 0.018 0.041 12.02 5.4.9 0.014 0.043 12.02 5.4.8 0.013 0.044 12.02 5.4.7 0.021 0.052 12.02 5.4.6 0.015 0.042 12.02 5.4.5 0.018 0.039 12.02 5.4.4 0.016 0.040 12.00 5.4.3 0.014 0.044 12.00 5.4.2 0.016 0.041 11.99 5.4.1 0.016 0.040 12.00 5.4.0 0.014 0.042 11.49 5.3.27 0.018 0.043 12.72 5.3.26 0.014 0.047 12.72 5.3.25 0.014 0.046 12.72 5.3.24 0.016 0.044 12.72 5.3.23 0.023 0.070 12.71 5.3.22 0.016 0.045 12.68 5.3.21 0.019 0.043 12.68 5.3.20 0.016 0.045 12.68 5.3.19 0.019 0.043 12.68 5.3.18 0.016 0.043 12.67 5.3.17 0.017 0.043 12.67 5.3.16 0.014 0.045 12.68 5.3.15 0.017 0.043 12.68 5.3.14 0.018 0.042 12.66 5.3.13 0.017 0.043 12.66 5.3.12 0.014 0.047 12.66 5.3.11 0.016 0.060 12.66 5.3.10 0.019 0.042 12.13 5.3.9 0.015 0.043 12.11 5.3.8 0.015 0.045 12.09 5.3.7 0.016 0.043 12.10 5.3.6 0.015 0.045 12.08 5.3.5 0.014 0.045 12.03 5.3.4 0.015 0.043 12.03 5.3.3 0.016 0.042 11.99 5.3.2 0.016 0.042 11.77 5.3.1 0.015 0.041 11.74 5.3.0 0.016 0.056 11.72
preferences:dark mode live preview
161.32 ms | 1394 KiB | 7 Q