<?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()
{
$this->checkConsistenz();
}
protected function checkConsistenz ()
{
$columns = $this->sudokuColumns;
// 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) {
var_export($this->checkRow($rowIndex,$row));
}
}
protected function checkRow ($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(null,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 git.master, git.master_jit, rfc.property-hooks
- checking 0..
truechecking 1..
truechecking 2..
truechecking 3..
truechecking 4..
truechecking 5..
truechecking 6..
truechecking 7..
truechecking 8..
true
This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.
Active branches
Archived branches
Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page
preferences:
40.96 ms | 401 KiB | 8 Q