"; for ($i = 0; $i < 3; $i++) { echo ""; for ($j = 0; $j < 3; $j++) { echo "\n"; echo "\n"; for ($i1 = 0; $i1 < 3; $i1++) { echo ""; for ($j1 = 0; $j1 < 3; $j1++) { echo "\n"; } echo "\n"; } echo "
"; if (($i==0 && $j==0)) { echo $s[$i*3+$j+1][$i1*3+$j1+1]; } else { echo $s[1][$s[$i*3+$j+1][$i1*3+$j1+1]]; } echo "
\n"; echo "\n"; } echo "\n"; } echo "\n"; } function print_sudoku2(&$s) { echo ""; for ($i=1;$i <=9;$i++) { echo ""; for ($j=1;$j <=9;$j++) { echo "\n"; } echo "\n"; } echo "
"; echo $s[$i][$j]; echo "
\n"; echo "
\n"; } function print_sudoku3(&$s,$g=0) { echo ""; for ($i = 0; $i < 3; $i++) { echo ""; for ($j = 0; $j < 3; $j++) { echo "\n"; } echo "\n"; } echo "
\n"; echo "\n"; for ($i1 = 0; $i1 < 3; $i1++) { echo ""; for ($j1 = 0; $j1 < 3; $j1++) { echo "\n"; } echo "\n"; } echo "
"; $x = $i*3+$i1+1; $y = $j*3+$j1+1; if ($g) { if ($g[$x][$y]) { echo $s[$x][$y]; } else { echo " "; } } else { echo $s[$x][$y]; } echo "
\n"; echo "

\n"; } function swap_rows(&$res) { for ($k=0;$k < rand(3,5);$k++) { for ($i=0;$i <3;$i++) { do { $p1 = rand(1,3)+3*$i; $p2 = rand(1,3)+3*$i; } while ($p1==$p2); swap($res,$p1,$p2); } } } function mesh_sudoku(&$s,&$n) { for ($i = 0; $i < 3; $i++) { for ($j = 0; $j < 3; $j++) { for ($i1 = 0; $i1 < 3; $i1++) { for ($j1 = 0; $j1 < 3; $j1++) { if (($i*3+$j+1) == 1) { $r= $s[$i*3+$j+1][$i1*3+$j1+1]; } else { $r= $s[1][$s[$i*3+$j+1][$i1*3+$j1+1]]; } $res[$i*3+$j+1][$i1*3+$j1+1]=$r; } } } } swap_rows($res); //print_sudoku2($res); // Traspongo for ($i=1;$i <=9;$i++) { for ($j=1;$j <=9;$j++) { $n[$i][$j]=$res[10-$j][$i]; } } swap_rows(&$n); //print_sudoku2($n); //print_sudoku3($n); } echo "SUDOKU generator"; echo "
\n"; $r[1] = array(0,1,2,3,4,5,6,7,8,9); $r[2] = array(0,4,5,6,7,8,9,1,2,3); $r[3] = array(0,7,8,9,1,2,3,4,5,6); $r[4] = array(0,2,3,1,5,6,4,8,9,7); $r[5] = array(0,5,6,4,8,9,7,2,3,1); $r[6] = array(0,8,9,7,2,3,1,5,6,4); $r[7] = array(0,3,1,2,6,4,5,9,7,8); $r[8] = array(0,6,4,5,9,7,8,3,1,2); $r[9] = array(0,9,7,8,3,1,2,6,4,5); // facile ci sono 7 riquadri con 4 numeri e 2 con 3; medio 5 riquadri con 4 numeri, 2 con 3 numeri e 2 con uno solo; difficile 6 riquadri con 3 numeri e 3 con 2 $g[1] = array(0,1,0,1,0,1,0,0,1,1); $g[2] = array(0,1,0,0,1,0,1,1,0,0); $g[3] = array(0,0,1,1,0,0,1,0,0,0); $g[4] = array(0,0,0,0,1,0,1,0,1,0); $g[5] = array(0,0,0,0,0,1,0,0,1,1); $g[6] = array(0,0,1,0,0,0,1,1,0,1); $g[7] = array(0,1,0,1,0,1,1,0,0,0); $g[8] = array(0,0,0,0,1,0,0,0,0,0); $g[9] = array(0,1,1,0,1,0,0,1,0,0); /* Prima produco un sudoku fisso, quindi in $r[1] scambio ogni numero con un altro, e produco il sudoku indicizzando su r[1] in r[2], r[3], .., r[9]. A questo punto scambio qualche riga, faccio la trasposta, e scambio ancora qualche riga. */ // sudoku originale //print_sudoku($r); //echo "
\n"; $p = (double) microtime() * 1000000; srand($p); for ($i=1; $i <=9; $i++) { $p = rand(1,9); swap($r[1],$i,$p); } // sudoku dopo il rand del primo gruppo //print_sudoku($r); //echo "
\n"; // sudoku dopo scambio di righe, trasposizione e ancora scambio di righe. mesh_sudoku($r,$new); print_sudoku3($new,$g); echo "\n"; echo "

\n"; echo "\n"; echo "

\n"; echo "
\n"; echo "
\n"; ?>