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) { 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 ($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 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.28, 7.0.0 - 7.0.20, 7.1.0 - 7.1.20, 7.2.6 - 7.2.33, 7.3.12 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 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.. (3 * (0 / 3)) + (0 / 3) = 0 + 0 (3 * (0 / 3)) + (1 / 3) = 0 + 0.33333333333333 (3 * (0 / 3)) + (2 / 3) = 0 + 0.66666666666667 (3 * (0 / 3)) + (3 / 3) = 0 + 1 (3 * (0 / 3)) + (4 / 3) = 0 + 1.3333333333333 (3 * (0 / 3)) + (5 / 3) = 0 + 1.6666666666667 (3 * (0 / 3)) + (6 / 3) = 0 + 2 (3 * (0 / 3)) + (7 / 3) = 0 + 2.3333333333333 (3 * (0 / 3)) + (8 / 3) = 0 + 2.6666666666667 (3 * (1 / 3)) + (0 / 3) = 1 + 0 (3 * (1 / 3)) + (1 / 3) = 1 + 0.33333333333333 (3 * (1 / 3)) + (2 / 3) = 1 + 0.66666666666667 (3 * (1 / 3)) + (3 / 3) = 1 + 1 (3 * (1 / 3)) + (4 / 3) = 1 + 1.3333333333333 (3 * (1 / 3)) + (5 / 3) = 1 + 1.6666666666667 (3 * (1 / 3)) + (6 / 3) = 1 + 2 (3 * (1 / 3)) + (7 / 3) = 1 + 2.3333333333333 (3 * (1 / 3)) + (8 / 3) = 1 + 2.6666666666667 (3 * (2 / 3)) + (0 / 3) = 2 + 0 (3 * (2 / 3)) + (1 / 3) = 2 + 0.33333333333333 (3 * (2 / 3)) + (2 / 3) = 2 + 0.66666666666667 (3 * (2 / 3)) + (3 / 3) = 2 + 1 (3 * (2 / 3)) + (4 / 3) = 2 + 1.3333333333333 (3 * (2 / 3)) + (5 / 3) = 2 + 1.6666666666667 (3 * (2 / 3)) + (6 / 3) = 2 + 2 (3 * (2 / 3)) + (7 / 3) = 2 + 2.3333333333333 (3 * (2 / 3)) + (8 / 3) = 2 + 2.6666666666667 (3 * (3 / 3)) + (0 / 3) = 3 + 0 (3 * (3 / 3)) + (1 / 3) = 3 + 0.33333333333333 (3 * (3 / 3)) + (2 / 3) = 3 + 0.66666666666667 (3 * (3 / 3)) + (3 / 3) = 3 + 1 (3 * (3 / 3)) + (4 / 3) = 3 + 1.3333333333333 (3 * (3 / 3)) + (5 / 3) = 3 + 1.6666666666667 (3 * (3 / 3)) + (6 / 3) = 3 + 2 (3 * (3 / 3)) + (7 / 3) = 3 + 2.3333333333333 (3 * (3 / 3)) + (8 / 3) = 3 + 2.6666666666667 (3 * (4 / 3)) + (0 / 3) = 4 + 0 (3 * (4 / 3)) + (1 / 3) = 4 + 0.33333333333333 (3 * (4 / 3)) + (2 / 3) = 4 + 0.66666666666667 (3 * (4 / 3)) + (3 / 3) = 4 + 1 (3 * (4 / 3)) + (4 / 3) = 4 + 1.3333333333333 (3 * (4 / 3)) + (5 / 3) = 4 + 1.6666666666667 (3 * (4 / 3)) + (6 / 3) = 4 + 2 (3 * (4 / 3)) + (7 / 3) = 4 + 2.3333333333333 (3 * (4 / 3)) + (8 / 3) = 4 + 2.6666666666667 (3 * (5 / 3)) + (0 / 3) = 5 + 0 (3 * (5 / 3)) + (1 / 3) = 5 + 0.33333333333333 (3 * (5 / 3)) + (2 / 3) = 5 + 0.66666666666667 (3 * (5 / 3)) + (3 / 3) = 5 + 1 (3 * (5 / 3)) + (4 / 3) = 5 + 1.3333333333333 (3 * (5 / 3)) + (5 / 3) = 5 + 1.6666666666667 (3 * (5 / 3)) + (6 / 3) = 5 + 2 (3 * (5 / 3)) + (7 / 3) = 5 + 2.3333333333333 (3 * (5 / 3)) + (8 / 3) = 5 + 2.6666666666667 (3 * (6 / 3)) + (0 / 3) = 6 + 0 (3 * (6 / 3)) + (1 / 3) = 6 + 0.33333333333333 (3 * (6 / 3)) + (2 / 3) = 6 + 0.66666666666667 (3 * (6 / 3)) + (3 / 3) = 6 + 1 (3 * (6 / 3)) + (4 / 3) = 6 + 1.3333333333333 (3 * (6 / 3)) + (5 / 3) = 6 + 1.6666666666667 (3 * (6 / 3)) + (6 / 3) = 6 + 2 (3 * (6 / 3)) + (7 / 3) = 6 + 2.3333333333333 (3 * (6 / 3)) + (8 / 3) = 6 + 2.6666666666667 (3 * (7 / 3)) + (0 / 3) = 7 + 0 (3 * (7 / 3)) + (1 / 3) = 7 + 0.33333333333333 (3 * (7 / 3)) + (2 / 3) = 7 + 0.66666666666667 (3 * (7 / 3)) + (3 / 3) = 7 + 1 (3 * (7 / 3)) + (4 / 3) = 7 + 1.3333333333333 (3 * (7 / 3)) + (5 / 3) = 7 + 1.6666666666667 (3 * (7 / 3)) + (6 / 3) = 7 + 2 (3 * (7 / 3)) + (7 / 3) = 7 + 2.3333333333333 (3 * (7 / 3)) + (8 / 3) = 7 + 2.6666666666667 (3 * (8 / 3)) + (0 / 3) = 8 + 0 (3 * (8 / 3)) + (1 / 3) = 8 + 0.33333333333333 (3 * (8 / 3)) + (2 / 3) = 8 + 0.66666666666667 (3 * (8 / 3)) + (3 / 3) = 8 + 1 (3 * (8 / 3)) + (4 / 3) = 8 + 1.3333333333333 (3 * (8 / 3)) + (5 / 3) = 8 + 1.6666666666667 (3 * (8 / 3)) + (6 / 3) = 8 + 2 (3 * (8 / 3)) + (7 / 3) = 8 + 2.3333333333333 (3 * (8 / 3)) + (8 / 3) = 8 + 2.6666666666667 Array ( [0] => Array ( [0] => [1] => 3 [2] => [3] => [4] => [5] => [6] => [7] => [8] => 8 ) [1] => Array ( [0] => [1] => [2] => [3] => 1 [4] => 9 [5] => 5 [6] => [7] => [8] => ) [2] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => 6 [8] => ) [3] => Array ( [0] => 8 [1] => [2] => [3] => 4 [4] => [5] => [6] => [7] => [8] => ) [4] => Array ( [0] => [1] => 6 [2] => [3] => 8 [4] => [5] => [6] => [7] => 2 [8] => ) [5] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => 1 [6] => [7] => [8] => ) [6] => Array ( [0] => [1] => 6 [2] => [3] => [4] => [5] => [6] => [7] => [8] => ) [7] => Array ( [0] => [1] => [2] => [3] => 4 [4] => 1 [5] => 9 [6] => [7] => [8] => ) [8] => Array ( [0] => 2 [1] => 8 [2] => [3] => [4] => [5] => 5 [6] => [7] => 7 [8] => ) ) 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/MJH9Y</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/MJH9Y</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/MJH9Y</b> on line <b>5</b><br />
Process exited with code 255.

preferences:
301.03 ms | 401 KiB | 344 Q