@ 2013-08-10T14:06:52Z <?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 $numbers;
}
}
$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.5.1 0.000 0.040 17.21 5.5.0 0.007 0.033 17.23 5.4.17 0.000 0.040 19.08 5.4.16 0.013 0.033 19.08 5.4.15 0.007 0.033 18.93 5.4.14 0.003 0.033 16.40 5.4.13 0.007 0.037 16.50 5.4.12 0.003 0.033 16.36 5.4.11 0.000 0.037 16.49 5.4.10 0.000 0.037 16.35 5.4.9 0.000 0.037 16.35 5.4.8 0.000 0.037 16.32 5.4.7 0.003 0.033 16.58 5.4.6 0.003 0.033 16.46 5.4.5 0.000 0.040 16.21 5.4.4 0.000 0.037 16.44 5.4.3 0.010 0.063 16.52 5.4.2 0.003 0.033 16.36 5.4.1 0.007 0.050 16.45 5.4.0 0.010 0.053 15.75 5.3.27 0.000 0.040 14.65 5.3.26 0.007 0.033 14.64 5.3.25 0.007 0.030 14.46 5.3.24 0.010 0.030 14.65 5.3.23 0.003 0.037 14.64 5.3.22 0.003 0.037 14.64 5.3.21 0.007 0.033 14.65 5.3.20 0.000 0.040 14.79 5.3.19 0.000 0.040 14.64 5.3.18 0.013 0.027 14.68 5.3.17 0.000 0.037 14.59 5.3.16 0.007 0.033 14.62 5.3.15 0.003 0.033 14.64 5.3.14 0.000 0.040 14.52 5.3.13 0.003 0.037 14.66 5.3.12 0.010 0.030 14.64 5.3.11 0.003 0.047 14.61 5.3.10 0.003 0.077 14.09 5.3.9 0.007 0.047 14.24 5.3.8 0.003 0.080 14.24 5.3.7 0.000 0.043 14.07 5.3.6 0.007 0.037 13.91 5.3.5 0.010 0.070 13.99 5.3.4 0.007 0.040 14.02 5.3.3 0.010 0.050 13.94 5.3.2 0.007 0.077 13.71 5.3.1 0.010 0.070 13.73 5.3.0 0.010 0.057 13.54
preferences:dark mode live preview
178.99 ms | 1398 KiB | 7 Q