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() { if (!$this->checkConsistenz()) { throw new Exception("inconsistent data!"); } } 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 ($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; } //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(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);
Output for 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, 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.. Array ( [0] => Array ( [0] => [1] => 3 [2] => [3] => 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.. Fatal error: Uncaught Exception: inconsistent data! in /in/8h6Z0:36 Stack trace: #0 /in/8h6Z0(114): SudokuSolver->solve(Array) #1 {main} thrown in /in/8h6Z0 on line 36
Process exited with code 255.
Output for 5.0.0 - 5.0.2, 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
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] => [3] => 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.. Fatal error: Uncaught exception 'Exception' with message 'inconsistent data!' in /in/8h6Z0:36 Stack trace: #0 /in/8h6Z0(114): SudokuSolver->solve(Array) #1 {main} thrown in /in/8h6Z0 on line 36
Process exited with code 255.
Output for 5.0.3 - 5.0.4
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] => [3] => 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.. Fatal error: Uncaught exception 'Exception' with message 'inconsistent data!' in /in/8h6Z0:36 Stack trace: #0 /in/8h6Z0(36): SudokuSolver::solve() #1 /in/8h6Z0(114): SudokuSolver->solve(Array) #2 {main} thrown in /in/8h6Z0 on line 36
Process exited with code 255.
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/8h6Z0 on line 5
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
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/8h6Z0 on line 5
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /in/8h6Z0 on line 5
Process exited with code 255.

preferences:
293.61 ms | 401 KiB | 388 Q