Added lot of junk laying around on harvie.cz
[mirrors/Programs.git] / php / skripty / sudoku_web.php
diff --git a/php/skripty/sudoku_web.php b/php/skripty/sudoku_web.php
new file mode 100644 (file)
index 0000000..0315b1d
--- /dev/null
@@ -0,0 +1,145 @@
+<form action="?" method="POST">\r
+<textarea rows="9" cols="9" name="sudokupost">43 6 5 89\r
+56     23\r
+   2 3   \r
+7 5 6 9 4\r
+   9 1   \r
+2 9 7 5 1\r
+   4 8   \r
+32     56\r
+89 5 6 12</textarea>\r
+<br /><input type="submit" value="Vyresit">\r
+</form>\r
+\r
+<?php\r
+//Sudoku\r
+\r
+//\r
+function sudoku_print ($sudo) {\r
+  $sudo = str_replace(" ", ".", implode("\n", $sudo) );\r
+  $sudo = explode("\n", $sudo);\r
+  print_r($sudo);\r
+}\r
+\r
+//X line\r
+//Y row\r
+\r
+//\r
+function sudoku_pos ($sudo, $x, $y) {\r
+  return($sudo[$x-1][$y-1]);\r
+}\r
+//\r
+function sudoku_row ($sudo, $y) {\r
+  $row = "";\r
+  foreach ($sudo as $line) {\r
+    $row = ($row.$line[$y-1]);\r
+  }\r
+  return $row;\r
+}\r
+//\r
+function sudoku_line ($sudo, $x) {\r
+  return $sudo[$x-1];\r
+}\r
+//\r
+function sudoku_square ($sudo, $x, $y) {\r
+  if ( $x == 1 || $x == 2 || $x == 3 ) { $x = 1; }\r
+  if ( $x == 4 || $x == 5 || $x == 6 ) { $x = 4; }\r
+  if ( $x == 7 || $x == 8 || $x == 9 ) { $x = 7; }\r
+  if ( $y == 1 || $y == 2 || $y == 3 ) { $y = 1; }\r
+  if ( $y == 4 || $y == 5 || $y == 6 ) { $y = 4; }\r
+  if ( $y == 7 || $y == 8 || $y == 9 ) { $y = 7; }\r
+  //echo("\n$x\n$y\n");\r
+  $square = "";\r
+  $x--;\r
+  $y--;\r
+  $y0 = $y;\r
+  \r
+  $i2 = 0;\r
+  while( $i2 < 3 ){\r
+    $i1 = 0;\r
+    $y = $y0;\r
+    while ( $i1 < 3 ){\r
+      $square = $square.$sudo[$x][$y];\r
+      $y++;\r
+      $i1++;\r
+      //echo("\n$x-$y");\r
+    }\r
+    $i2++;\r
+    $x++;\r
+  }\r
+  //echo("\n".$square);\r
+  return ($square);\r
+}\r
+\r
+//\r
+function sudoku_candidates ($sudo, $x, $y) {\r
+  $cands = "123456789";\r
+  $donenums = ( sudoku_line($sudo, $x).sudoku_row($sudo, $y).sudoku_square($sudo, $x, $y) );\r
+  //echo $donenums;\r
+  //echo "\n\n";\r
+  //foreach ( $donenums as $del ) {\r
+  $indx = strlen($donenums)-1;\r
+  while ($indx >= 0) {\r
+    $del = $donenums[$indx];\r
+    //echo("!".$del);\r
+    $cands = str_replace($del, "", $cands);\r
+    $indx--;\r
+  }\r
+  //echo "\n\n".$cands;\r
+  return $cands;\r
+}\r
+\r
+//\r
+function sudoku_compute($sudoku) {\r
+\r
+  $sudoku_old = "";\r
+  while( $sudoku_old != $sudoku ) {\r
+    $sudoku_old = $sudoku;\r
+\r
+    $is = sizeof($sudoku)-1;\r
+    while ($is >= 0) {\r
+      $line = $sudoku[$is];\r
+  \r
+      $i = strlen($line)-1;\r
+      while ($i >= 0) {\r
+        //echo($line[$i]);\r
+    \r
+        $cands = sudoku_candidates ( $sudoku, ($is+1), ($i+1) );\r
+        if ( strlen($cands) == 1 && !is_numeric($sudoku[$is][$i]) ) {\r
+          $sudoku[$is][$i] = $cands;\r
+        }\r
+    \r
+        $i--;\r
+      }\r
+      //echo("\n");\r
+  \r
+      $is--;\r
+    }\r
+  }\r
+  return($sudoku);\r
+}\r
+\r
+///CODE///////////////////////////////////////////\r
+/*\r
+$sudoku = array(\r
+  "43 6 5 89",\r
+  "56     23",\r
+  "   2 3   ",\r
+  "7 5 6 9 4",\r
+  "   9 1   ",\r
+  "2 9 7 5 1",\r
+  "   4 8   ",\r
+  "32     56",\r
+  "89 5 6 12"\r
+  );\r
+*/\r
+\r
+sudoku = explode ("\n",$_POST["sudokupost"]);\r
+\r
+\r
+echo("Zadani:\n");\r
+sudoku_print($sudoku);\r
+echo("\nVysledek:\n");\r
+sudoku_print(sudoku_compute($sudoku));\r
+\r
+?>\r
This page took 0.114045 seconds and 4 git commands to generate.