| 1 | <form action="?" method="POST">\r |
| 2 | <textarea rows="9" cols="9" name="sudokupost">43 6 5 89\r |
| 3 | 56 23\r |
| 4 | 2 3 \r |
| 5 | 7 5 6 9 4\r |
| 6 | 9 1 \r |
| 7 | 2 9 7 5 1\r |
| 8 | 4 8 \r |
| 9 | 32 56\r |
| 10 | 89 5 6 12</textarea>\r |
| 11 | <br /><input type="submit" value="Vyresit">\r |
| 12 | </form>\r |
| 13 | \r |
| 14 | <?php\r |
| 15 | //Sudoku\r |
| 16 | \r |
| 17 | //\r |
| 18 | function sudoku_print ($sudo) {\r |
| 19 | $sudo = str_replace(" ", ".", implode("\n", $sudo) );\r |
| 20 | $sudo = explode("\n", $sudo);\r |
| 21 | print_r($sudo);\r |
| 22 | }\r |
| 23 | \r |
| 24 | //X line\r |
| 25 | //Y row\r |
| 26 | \r |
| 27 | //\r |
| 28 | function sudoku_pos ($sudo, $x, $y) {\r |
| 29 | return($sudo[$x-1][$y-1]);\r |
| 30 | }\r |
| 31 | //\r |
| 32 | function sudoku_row ($sudo, $y) {\r |
| 33 | $row = "";\r |
| 34 | foreach ($sudo as $line) {\r |
| 35 | $row = ($row.$line[$y-1]);\r |
| 36 | }\r |
| 37 | return $row;\r |
| 38 | }\r |
| 39 | //\r |
| 40 | function sudoku_line ($sudo, $x) {\r |
| 41 | return $sudo[$x-1];\r |
| 42 | }\r |
| 43 | //\r |
| 44 | function sudoku_square ($sudo, $x, $y) {\r |
| 45 | if ( $x == 1 || $x == 2 || $x == 3 ) { $x = 1; }\r |
| 46 | if ( $x == 4 || $x == 5 || $x == 6 ) { $x = 4; }\r |
| 47 | if ( $x == 7 || $x == 8 || $x == 9 ) { $x = 7; }\r |
| 48 | if ( $y == 1 || $y == 2 || $y == 3 ) { $y = 1; }\r |
| 49 | if ( $y == 4 || $y == 5 || $y == 6 ) { $y = 4; }\r |
| 50 | if ( $y == 7 || $y == 8 || $y == 9 ) { $y = 7; }\r |
| 51 | //echo("\n$x\n$y\n");\r |
| 52 | $square = "";\r |
| 53 | $x--;\r |
| 54 | $y--;\r |
| 55 | $y0 = $y;\r |
| 56 | \r |
| 57 | $i2 = 0;\r |
| 58 | while( $i2 < 3 ){\r |
| 59 | $i1 = 0;\r |
| 60 | $y = $y0;\r |
| 61 | while ( $i1 < 3 ){\r |
| 62 | $square = $square.$sudo[$x][$y];\r |
| 63 | $y++;\r |
| 64 | $i1++;\r |
| 65 | //echo("\n$x-$y");\r |
| 66 | }\r |
| 67 | $i2++;\r |
| 68 | $x++;\r |
| 69 | }\r |
| 70 | //echo("\n".$square);\r |
| 71 | return ($square);\r |
| 72 | }\r |
| 73 | \r |
| 74 | //\r |
| 75 | function sudoku_candidates ($sudo, $x, $y) {\r |
| 76 | $cands = "123456789";\r |
| 77 | $donenums = ( sudoku_line($sudo, $x).sudoku_row($sudo, $y).sudoku_square($sudo, $x, $y) );\r |
| 78 | //echo $donenums;\r |
| 79 | //echo "\n\n";\r |
| 80 | //foreach ( $donenums as $del ) {\r |
| 81 | $indx = strlen($donenums)-1;\r |
| 82 | while ($indx >= 0) {\r |
| 83 | $del = $donenums[$indx];\r |
| 84 | //echo("!".$del);\r |
| 85 | $cands = str_replace($del, "", $cands);\r |
| 86 | $indx--;\r |
| 87 | }\r |
| 88 | //echo "\n\n".$cands;\r |
| 89 | return $cands;\r |
| 90 | }\r |
| 91 | \r |
| 92 | //\r |
| 93 | function sudoku_compute($sudoku) {\r |
| 94 | \r |
| 95 | $sudoku_old = "";\r |
| 96 | while( $sudoku_old != $sudoku ) {\r |
| 97 | $sudoku_old = $sudoku;\r |
| 98 | \r |
| 99 | $is = sizeof($sudoku)-1;\r |
| 100 | while ($is >= 0) {\r |
| 101 | $line = $sudoku[$is];\r |
| 102 | \r |
| 103 | $i = strlen($line)-1;\r |
| 104 | while ($i >= 0) {\r |
| 105 | //echo($line[$i]);\r |
| 106 | \r |
| 107 | $cands = sudoku_candidates ( $sudoku, ($is+1), ($i+1) );\r |
| 108 | if ( strlen($cands) == 1 && !is_numeric($sudoku[$is][$i]) ) {\r |
| 109 | $sudoku[$is][$i] = $cands;\r |
| 110 | }\r |
| 111 | \r |
| 112 | $i--;\r |
| 113 | }\r |
| 114 | //echo("\n");\r |
| 115 | \r |
| 116 | $is--;\r |
| 117 | }\r |
| 118 | }\r |
| 119 | return($sudoku);\r |
| 120 | }\r |
| 121 | \r |
| 122 | ///CODE///////////////////////////////////////////\r |
| 123 | /*\r |
| 124 | $sudoku = array(\r |
| 125 | "43 6 5 89",\r |
| 126 | "56 23",\r |
| 127 | " 2 3 ",\r |
| 128 | "7 5 6 9 4",\r |
| 129 | " 9 1 ",\r |
| 130 | "2 9 7 5 1",\r |
| 131 | " 4 8 ",\r |
| 132 | "32 56",\r |
| 133 | "89 5 6 12"\r |
| 134 | );\r |
| 135 | */\r |
| 136 | \r |
| 137 | sudoku = explode ("\n",$_POST["sudokupost"]);\r |
| 138 | \r |
| 139 | \r |
| 140 | echo("Zadani:\n");\r |
| 141 | sudoku_print($sudoku);\r |
| 142 | echo("\nVysledek:\n");\r |
| 143 | sudoku_print(sudoku_compute($sudoku));\r |
| 144 | \r |
| 145 | ?>\r |