3v4l.org

run code in 300+ PHP versions simultaneously
<?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; 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) { $fields[(3 * ($columnIndex / 3)) + $rowIndex / 3][] = $cell; } } print_r($fields); foreach ($rows 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(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 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.. Deprecated: Implicit conversion from float 0.3333333333333333 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 0.6666666666666666 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 1.3333333333333333 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 1.6666666666666667 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 2.3333333333333335 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 2.6666666666666665 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 1.3333333333333333 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 1.6666666666666665 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 2.333333333333333 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 2.666666666666667 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 3.3333333333333335 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 3.6666666666666665 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 2.3333333333333335 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 2.6666666666666665 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 3.333333333333333 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 3.666666666666667 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 4.333333333333334 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 4.666666666666666 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 3.3333333333333335 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 3.6666666666666665 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 4.333333333333333 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 4.666666666666667 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 5.333333333333334 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 5.666666666666666 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 4.333333333333333 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 4.666666666666667 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 5.333333333333333 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 5.666666666666667 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 6.333333333333334 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 6.666666666666666 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 5.333333333333333 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 5.666666666666667 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 6.333333333333333 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 6.666666666666667 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 7.333333333333334 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 7.666666666666666 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 6.333333333333333 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 6.666666666666667 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 7.333333333333333 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 7.666666666666667 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 8.333333333333334 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 8.666666666666666 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 7.333333333333333 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 7.666666666666667 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 8.333333333333334 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 8.666666666666666 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 9.333333333333334 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 9.666666666666666 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 8.333333333333334 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 8.666666666666666 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 9.333333333333334 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 9.666666666666666 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 10.333333333333334 to int loses precision in /in/QFd9G on line 65 Deprecated: Implicit conversion from float 10.666666666666666 to int loses precision in /in/QFd9G on line 65 Array ( [0] => Array ( [0] => [1] => 3 [2] => ) [1] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => ) [2] => Array ( [0] => [1] => [2] => [3] => 1 [4] => 9 [5] => 5 [6] => [7] => [8] => 8 ) [3] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => 8 [7] => [8] => ) [4] => Array ( [0] => [1] => 6 [2] => [3] => [4] => 6 [5] => [6] => 4 [7] => [8] => ) [5] => Array ( [0] => [1] => [2] => [3] => 8 [4] => [5] => [6] => [7] => [8] => ) [6] => Array ( [0] => [1] => [2] => 1 [3] => [4] => 2 [5] => [6] => [7] => 6 [8] => ) [7] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => ) [8] => Array ( [0] => 2 [1] => 8 [2] => [3] => 4 [4] => 1 [5] => 9 [6] => [7] => [8] => ) [9] => Array ( [0] => [1] => [2] => 5 [3] => [4] => [5] => ) [10] => Array ( [0] => [1] => 7 [2] => ) ) checking 0.. checking 1.. checking 2.. checking 3.. checking 4.. checking 5.. checking 6.. checking 7.. checking 8..
Output for 5.0.0 - 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.21, 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
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] => ) [1] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => ) [2] => Array ( [0] => [1] => [2] => [3] => 1 [4] => 9 [5] => 5 [6] => [7] => [8] => 8 ) [3] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => 8 [7] => [8] => ) [4] => Array ( [0] => [1] => 6 [2] => [3] => [4] => 6 [5] => [6] => 4 [7] => [8] => ) [5] => Array ( [0] => [1] => [2] => [3] => 8 [4] => [5] => [6] => [7] => [8] => ) [6] => Array ( [0] => [1] => [2] => 1 [3] => [4] => 2 [5] => [6] => [7] => 6 [8] => ) [7] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => ) [8] => Array ( [0] => 2 [1] => 8 [2] => [3] => 4 [4] => 1 [5] => 9 [6] => [7] => [8] => ) [9] => Array ( [0] => [1] => [2] => 5 [3] => [4] => [5] => ) [10] => Array ( [0] => [1] => 7 [2] => ) ) checking 0.. checking 1.. checking 2.. checking 3.. checking 4.. checking 5.. checking 6.. checking 7.. checking 8..
Output for 4.4.2 - 4.4.9
<br /> <b>Parse error</b>: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in <b>/in/QFd9G</b> on line <b>5</b><br />
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
<br /> <b>Parse error</b>: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in <b>/in/QFd9G</b> on line <b>5</b><br />
Process exited with code 255.
Output for 4.3.2 - 4.3.4
<br /> <b>Parse error</b>: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in <b>/in/QFd9G</b> on line <b>5</b><br />
Process exited with code 255.

preferences:
276.49 ms | 401 KiB | 388 Q