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 \n"; $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 git.master, git.master_jit, rfc.property-hooks
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 (3 * (0 / 3)) + 1 / 3 Deprecated: Implicit conversion from float 0.3333333333333333 to int loses precision in /in/r0SDG on line 66 (3 * (0 / 3)) + 2 / 3 Deprecated: Implicit conversion from float 0.6666666666666666 to int loses precision in /in/r0SDG on line 66 (3 * (0 / 3)) + 3 / 3 (3 * (0 / 3)) + 4 / 3 Deprecated: Implicit conversion from float 1.3333333333333333 to int loses precision in /in/r0SDG on line 66 (3 * (0 / 3)) + 5 / 3 Deprecated: Implicit conversion from float 1.6666666666666667 to int loses precision in /in/r0SDG on line 66 (3 * (0 / 3)) + 6 / 3 (3 * (0 / 3)) + 7 / 3 Deprecated: Implicit conversion from float 2.3333333333333335 to int loses precision in /in/r0SDG on line 66 (3 * (0 / 3)) + 8 / 3 Deprecated: Implicit conversion from float 2.6666666666666665 to int loses precision in /in/r0SDG on line 66 (3 * (1 / 3)) + 0 / 3 (3 * (1 / 3)) + 1 / 3 Deprecated: Implicit conversion from float 1.3333333333333333 to int loses precision in /in/r0SDG on line 66 (3 * (1 / 3)) + 2 / 3 Deprecated: Implicit conversion from float 1.6666666666666665 to int loses precision in /in/r0SDG on line 66 (3 * (1 / 3)) + 3 / 3 (3 * (1 / 3)) + 4 / 3 Deprecated: Implicit conversion from float 2.333333333333333 to int loses precision in /in/r0SDG on line 66 (3 * (1 / 3)) + 5 / 3 Deprecated: Implicit conversion from float 2.666666666666667 to int loses precision in /in/r0SDG on line 66 (3 * (1 / 3)) + 6 / 3 (3 * (1 / 3)) + 7 / 3 Deprecated: Implicit conversion from float 3.3333333333333335 to int loses precision in /in/r0SDG on line 66 (3 * (1 / 3)) + 8 / 3 Deprecated: Implicit conversion from float 3.6666666666666665 to int loses precision in /in/r0SDG on line 66 (3 * (2 / 3)) + 0 / 3 (3 * (2 / 3)) + 1 / 3 Deprecated: Implicit conversion from float 2.3333333333333335 to int loses precision in /in/r0SDG on line 66 (3 * (2 / 3)) + 2 / 3 Deprecated: Implicit conversion from float 2.6666666666666665 to int loses precision in /in/r0SDG on line 66 (3 * (2 / 3)) + 3 / 3 (3 * (2 / 3)) + 4 / 3 Deprecated: Implicit conversion from float 3.333333333333333 to int loses precision in /in/r0SDG on line 66 (3 * (2 / 3)) + 5 / 3 Deprecated: Implicit conversion from float 3.666666666666667 to int loses precision in /in/r0SDG on line 66 (3 * (2 / 3)) + 6 / 3 (3 * (2 / 3)) + 7 / 3 Deprecated: Implicit conversion from float 4.333333333333334 to int loses precision in /in/r0SDG on line 66 (3 * (2 / 3)) + 8 / 3 Deprecated: Implicit conversion from float 4.666666666666666 to int loses precision in /in/r0SDG on line 66 (3 * (3 / 3)) + 0 / 3 (3 * (3 / 3)) + 1 / 3 Deprecated: Implicit conversion from float 3.3333333333333335 to int loses precision in /in/r0SDG on line 66 (3 * (3 / 3)) + 2 / 3 Deprecated: Implicit conversion from float 3.6666666666666665 to int loses precision in /in/r0SDG on line 66 (3 * (3 / 3)) + 3 / 3 (3 * (3 / 3)) + 4 / 3 Deprecated: Implicit conversion from float 4.333333333333333 to int loses precision in /in/r0SDG on line 66 (3 * (3 / 3)) + 5 / 3 Deprecated: Implicit conversion from float 4.666666666666667 to int loses precision in /in/r0SDG on line 66 (3 * (3 / 3)) + 6 / 3 (3 * (3 / 3)) + 7 / 3 Deprecated: Implicit conversion from float 5.333333333333334 to int loses precision in /in/r0SDG on line 66 (3 * (3 / 3)) + 8 / 3 Deprecated: Implicit conversion from float 5.666666666666666 to int loses precision in /in/r0SDG on line 66 (3 * (4 / 3)) + 0 / 3 (3 * (4 / 3)) + 1 / 3 Deprecated: Implicit conversion from float 4.333333333333333 to int loses precision in /in/r0SDG on line 66 (3 * (4 / 3)) + 2 / 3 Deprecated: Implicit conversion from float 4.666666666666667 to int loses precision in /in/r0SDG on line 66 (3 * (4 / 3)) + 3 / 3 (3 * (4 / 3)) + 4 / 3 Deprecated: Implicit conversion from float 5.333333333333333 to int loses precision in /in/r0SDG on line 66 (3 * (4 / 3)) + 5 / 3 Deprecated: Implicit conversion from float 5.666666666666667 to int loses precision in /in/r0SDG on line 66 (3 * (4 / 3)) + 6 / 3 (3 * (4 / 3)) + 7 / 3 Deprecated: Implicit conversion from float 6.333333333333334 to int loses precision in /in/r0SDG on line 66 (3 * (4 / 3)) + 8 / 3 Deprecated: Implicit conversion from float 6.666666666666666 to int loses precision in /in/r0SDG on line 66 (3 * (5 / 3)) + 0 / 3 (3 * (5 / 3)) + 1 / 3 Deprecated: Implicit conversion from float 5.333333333333333 to int loses precision in /in/r0SDG on line 66 (3 * (5 / 3)) + 2 / 3 Deprecated: Implicit conversion from float 5.666666666666667 to int loses precision in /in/r0SDG on line 66 (3 * (5 / 3)) + 3 / 3 (3 * (5 / 3)) + 4 / 3 Deprecated: Implicit conversion from float 6.333333333333333 to int loses precision in /in/r0SDG on line 66 (3 * (5 / 3)) + 5 / 3 Deprecated: Implicit conversion from float 6.666666666666667 to int loses precision in /in/r0SDG on line 66 (3 * (5 / 3)) + 6 / 3 (3 * (5 / 3)) + 7 / 3 Deprecated: Implicit conversion from float 7.333333333333334 to int loses precision in /in/r0SDG on line 66 (3 * (5 / 3)) + 8 / 3 Deprecated: Implicit conversion from float 7.666666666666666 to int loses precision in /in/r0SDG on line 66 (3 * (6 / 3)) + 0 / 3 (3 * (6 / 3)) + 1 / 3 Deprecated: Implicit conversion from float 6.333333333333333 to int loses precision in /in/r0SDG on line 66 (3 * (6 / 3)) + 2 / 3 Deprecated: Implicit conversion from float 6.666666666666667 to int loses precision in /in/r0SDG on line 66 (3 * (6 / 3)) + 3 / 3 (3 * (6 / 3)) + 4 / 3 Deprecated: Implicit conversion from float 7.333333333333333 to int loses precision in /in/r0SDG on line 66 (3 * (6 / 3)) + 5 / 3 Deprecated: Implicit conversion from float 7.666666666666667 to int loses precision in /in/r0SDG on line 66 (3 * (6 / 3)) + 6 / 3 (3 * (6 / 3)) + 7 / 3 Deprecated: Implicit conversion from float 8.333333333333334 to int loses precision in /in/r0SDG on line 66 (3 * (6 / 3)) + 8 / 3 Deprecated: Implicit conversion from float 8.666666666666666 to int loses precision in /in/r0SDG on line 66 (3 * (7 / 3)) + 0 / 3 (3 * (7 / 3)) + 1 / 3 Deprecated: Implicit conversion from float 7.333333333333333 to int loses precision in /in/r0SDG on line 66 (3 * (7 / 3)) + 2 / 3 Deprecated: Implicit conversion from float 7.666666666666667 to int loses precision in /in/r0SDG on line 66 (3 * (7 / 3)) + 3 / 3 (3 * (7 / 3)) + 4 / 3 Deprecated: Implicit conversion from float 8.333333333333334 to int loses precision in /in/r0SDG on line 66 (3 * (7 / 3)) + 5 / 3 Deprecated: Implicit conversion from float 8.666666666666666 to int loses precision in /in/r0SDG on line 66 (3 * (7 / 3)) + 6 / 3 (3 * (7 / 3)) + 7 / 3 Deprecated: Implicit conversion from float 9.333333333333334 to int loses precision in /in/r0SDG on line 66 (3 * (7 / 3)) + 8 / 3 Deprecated: Implicit conversion from float 9.666666666666666 to int loses precision in /in/r0SDG on line 66 (3 * (8 / 3)) + 0 / 3 (3 * (8 / 3)) + 1 / 3 Deprecated: Implicit conversion from float 8.333333333333334 to int loses precision in /in/r0SDG on line 66 (3 * (8 / 3)) + 2 / 3 Deprecated: Implicit conversion from float 8.666666666666666 to int loses precision in /in/r0SDG on line 66 (3 * (8 / 3)) + 3 / 3 (3 * (8 / 3)) + 4 / 3 Deprecated: Implicit conversion from float 9.333333333333334 to int loses precision in /in/r0SDG on line 66 (3 * (8 / 3)) + 5 / 3 Deprecated: Implicit conversion from float 9.666666666666666 to int loses precision in /in/r0SDG on line 66 (3 * (8 / 3)) + 6 / 3 (3 * (8 / 3)) + 7 / 3 Deprecated: Implicit conversion from float 10.333333333333334 to int loses precision in /in/r0SDG on line 66 (3 * (8 / 3)) + 8 / 3 Deprecated: Implicit conversion from float 10.666666666666666 to int loses precision in /in/r0SDG on line 66 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..

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:
36.9 ms | 421 KiB | 8 Q