yuuzhantar Posté 19 Avril 2006 Posté 19 Avril 2006 Bonjour vu que je ne comprend pas trop les scripts sudoku que j'ai précédement vu, je cherche un script qui génère des grilles sudoku mais ce que j'aimerais trouver c'est un script qui enregistre les nombres et leur position dans une table mysql est ce que quelqun pourrais m'aider svp merci d'avance yuuzhantar
Kalt Posté 19 Avril 2006 Posté 19 Avril 2006 Dans le script suivant : Sudoku en PHP il te suffit de remplacer la sauvegarde d'une grille dans un fichier texte par une insertion dans ta base de données.
goldo73 Posté 19 Avril 2006 Posté 19 Avril 2006 ce script est trés intéressant mais le problème est que les différents niveau sont généré en enlevant plus ou oins de chiffre. Or cette methode n'est pas valable. Une grille qui a plus de chiffre qu'une autre peux être beaucoup plus compliquée à résoudre ...
yuuzhantar Posté 19 Avril 2006 Auteur Posté 19 Avril 2006 peut on le modifier pour avoir par exemple ( A : ligne 1 B : ligne 2 ... 1 : colonne 1 2 colonne 2 ... et A1 : ligne 1 colonne 1 C9 ... ) $a1 = ... $a2 = ... $a3 = ... mais vu qu'il y a des cases qui sont vides ( avec le niveau de difficulté ) $ta1 = (1 pour pleine et 0 pour vide) ... après, je peut me débrouiller tout seul, j'aime bien le mysql
yuuzhantar Posté 19 Avril 2006 Auteur Posté 19 Avril 2006 je voudrais juste sortir les chiffres en fait mais je ne vois pas ou les prendre qqn pourrait m'aider svp merci
Anonymus Posté 19 Avril 2006 Posté 19 Avril 2006 ce script est trés intéressant mais le problème est que les différents niveau sont généré en enlevant plus ou oins de chiffre. Or cette methode n'est pas valable. Une grille qui a plus de chiffre qu'une autre peux être beaucoup plus compliquée à résoudre ... <{POST_SNAPBACK}> Tu soulèves 2 problèmes : - ca doit être un script automatique, donc il tient sur un algorithme, qui va simuler la complexité de la grille. Mais la complexité ne tient que par l'algorithme. - Ce qui est compliqué pour les uns peut se révéler facile pour les autres, et inversement. L'auteur du programme a décidé d'une méthode pour complexifier ses grilles, il est lui aussi dépendant du nombre de méthodes restreintes pour complexifier ce genre de programmes. A mon avis, le seul critère qui pourrait être valable pour décider si une grille est complexe ou non serait de calculer sur un échantillon de personnes, le taux de réussite de telle ou telle grille. C'est autrement plus simple, autrement plus 'complexe' à mettre en oeuvre (il faut trouver des membres, noter le taux de réussite, etc..), mais ca correspondrait exactement au classement nécessaire. Pour faire des sudoku de temps en temps, ben... Y'a des faciles qui sont difficiles, et des difficiles qui sont faciles. C'est comme ca
yuuzhantar Posté 19 Avril 2006 Auteur Posté 19 Avril 2006 euhhhhhhhhh sa m'aide pas vraiment ce que tu raconte
NorSeb Posté 20 Avril 2006 Posté 20 Avril 2006 Bonjour, Quelle aide attends-tu de nous ? Qu'on aille télécharger le script, analyser les sources et faire la modif uniquement pour tes beaux yeux sans que tu ais pris la peine de faire la même chose ? après, je peut me débrouiller tout seul, j'aime bien le mysql <{POST_SNAPBACK}> Bonne idée En revanche, si tu rencontre un obstacle (précis), n'hésite pas à revenir poser la question.
Anonymus Posté 20 Avril 2006 Posté 20 Avril 2006 euhhhhhhhhh sa m'aide pas vraiment ce que tu raconte <{POST_SNAPBACK}> Ce que je veux dire, c'est que le créateur du programme a choisi une méthode, qui en vaut une autre. Il n'y a pas à mon avis, de méthode optimale pour calculer la difficulté d'une grille, dans la mesure où la difficulté n'est qu'une valeur relative. Ce qui te parait difficile à toi ne le sera pas forcément pour d'autres
MarvinLeRouge Posté 20 Avril 2006 Posté 20 Avril 2006 Salut, Je pense quand même qu'on peut déterminer un niveau de complexité d'une grille en comptant le nombre minimal de tests pour déterminer l'ensemble de la grille (mais je ne sais pas s'il y a une méthode pour déterminer ça).
yuuzhantar Posté 20 Avril 2006 Auteur Posté 20 Avril 2006 en fait, voila le code test.php affiche les grilles PHP: <html> <head> <title>Untitled Document</title> </head> <body> <? if(!$niveau = @$_COOKIE["niveau"]) $niveau = 5; if($tmp = @$_GET["niveau"]) { $niveau = max(2,min(8,$niveau+$tmp)); setcookie("niveau",$niveau); } ?> <html><body> <div align=center> <? // Chargement $tmp = _AT_file("sudoku.txt"); if($tmp) { $nb = sizeof($tmp); $n = @$_GET["n"]; if(!@$tmp[$n]) $n=$nb-1; // Choix de la grille $ligne = trim($tmp[$n]); $sudoku=unserialize($ligne); $sudoku2=$sudoku; // Application du masque if(!@$_GET["soluce"]) { $liste = range(0,8); for($i=0;$i<9;$i++) { // pour chaque grille 3x3 $niv = rand($niveau-1,$niveau+1); shuffle($liste); for($j=0;$j<$niv;$j++) $sudoku[$i][$liste[$j]] = ""; } } // Affichage ?> <style> td.s { font:normal 18pt verdana } A { text-decoration:none } A.hover { text-decoration:underline } .f7 { font:normal 7pt Verdana } </style> <script language="JavaScript"> sauve=""; sauve3 = new Array(); function drawcase() { tmp = sauve.id.split("-"); mem = sauve3[tmp[0]*9+tmp[1]]+""; if(mem=="undefined") mem=""; if(mem=="") tmp2 = " "; else { if(mem.length==1) tmp2 = "<font color=red>"+mem+"</font>"; else { tmp2 = "<table cellspacing=0 cellpadding=0 border=0>"; for(i=0;i<2;i++) { tmp2+="<tr>"; for(j=0;j<4;j++) { t = i*4+j; tmp2+="<td class=f7>"+String.fromCharCode(mem.charCodeAt(t))+"</td>"; } tmp2+="</tr>"; } tmp2 += "</table>"; } } sauve.innerHTML = tmp2; } function drawgrid() { tmp = sauve.id.split("-"); mem = sauve3[tmp[0]*9+tmp[1]]+""; if(mem=="undefined") mem=""; for(i=1;i<10;i++) { ch = String.fromCharCode(i+4; if(mem.indexOf(ch)>=0) document.getElementById("j"+i).style.background="yellow"; else document.getElementById("j"+i).style.background=""; } } function soluce() { tmp = sauve.id.split("-"); sauve3[tmp[0]*9+tmp[1]]=sauve.s; drawcase(); drawgrid(); } function joue(lacase) { if(sauve!="") sauve.style.background=""; sauve=lacase; lacase.style.background="yellow"; lejeu = document.getElementById("jeu"); tmp = sauve.id.split("-"); mem = sauve3[tmp[0]*9+tmp[1]]+""; if(mem=="undefined") mem=""; drawgrid(); lejeu.style.visibility="visible"; } function store(n) { tmp = sauve.id.split("-"); ch = String.fromCharCode(n+4; mem = sauve3[tmp[0]*9+tmp[1]]+""; if(mem=="undefined") mem=""; t = mem.indexOf(ch) if(t>=0) { t2 = mem.split(""); t2[t]=""; mem = t2.join(""); } else mem+=ch; sauve3[tmp[0]*9+tmp[1]]=mem; drawcase(); drawgrid(); } </script> <h1>Sudoku</h1> <table><tr><td width=50 nowrap> <div id="jeu" style="visibility:hidden"> <table style="cursor:help" width=45><tr> <th id=j1 onclick=store(1)>1</th> <th id=j2 onclick=store(2)>2</th> <th id=j3 onclick=store(3)>3</th> </tr><tr> <th id=j4 onclick=store(4)>4</th> <th id=j5 onclick=store(5)>5</th> <th id=j6 onclick=store(6)>6</th> </tr><tr> <th id=j7 onclick=store(7)>7</th> <th id=j8 onclick=store(>8</th> <th id=j9 onclick=store(9)>9</th> </tr><tr> <th colspan=3 ><A href="java script:;" onClick="soluce()">Soluce</A></th> </tr></table> </div> </td><td align=center> <table border=0> <? for($i=0;$i<3;$i++) { ?> <tr> <? for($j=0;$j<3;$j++) { ?> <td><table align=center border=1 cellspacing=0 width=100%> <? for($k=0;$k<3;$k++) { ?> <tr> <? for($l=0;$l<3;$l++) { ?> <td class=s align=center width=30 nowrap <? $id = ($i*3+$j)."-".($k*3+$l); echo "id='".$id."' "; $tmp=@$sudoku[$i*3+$j][$k*3+$l]; if(!$tmp) { echo "style='cursor:help' "; echo "title='Cliquer pour jouer' "; echo "onclick=joue(this) "; echo "s='".@$sudoku2[$i*3+$j][$k*3+$l]."'"; } ?>><b><? echo ($tmp)?$tmp:" "; ?></b></td> <? } ?> </tr> <? } ?> </table></td> <? } ?> </tr> <? } ?> </table> <table width=300><tr> <td> <A href="?n=<?=$n?>&niveau=-1">-</A> <A href="?n=<?=$n?>">Niveau <?=$niveau?></A> <A href="?n=<?=$n?>&niveau=1">+</A> </td><td align=right> <?if($n>1) { ?><A href="?n=0">|<</A> <? } ?> <?if($n) { ?><A href="?n=<?=$n-1?>"><</A> <? } ?> <i>Grille n° <?=($n+1)?></i> <?if($n<$nb-1) { ?> <A href="?n=<?=$n+1?>">></A> <? } ?> <?if($n<$nb-2) { ?><A href="?n=<?=$nb-1?>">>|</A> <? } ?> </td> </tr></table> <button onClick="window.print();">Imprimer</button> <button onClick="location.replace('?n=<?=$n?>&soluce=1')">Solution</button> </td></tr></table> <? } else { $search = 1;?> Création d'une grille en cours... <? } ?> <br /> <iframe src="sudoku.php?search=<?=@$search?>" frameborder=no /> </div> </body></html> </body> </html> sudoku.php génère les grilles <html> <head> <title>Untitled Document</title> </head> <body> <? $TempsMax = 5; // 5 secondes semblent suffire $Temps = time(); // Propose un carré pour compléter la ligne function complete_h($c1,$c2) { $t = range(1,9); $r1 = array($c1[0],$c1[1],$c1[2],$c2[0],$c2[1],$c2[2]); $r2 = array($c1[3],$c1[4],$c1[5],$c2[3],$c2[4],$c2[5]); $r3 = array($c1[6],$c1[7],$c1[8],$c2[6],$c2[7],$c2[8]); $v1 = array_diff($t,$r1); shuffle($v1); $v2 = array_diff($t,$r2); shuffle($v2); $v3 = array_diff($t,$r3); shuffle($v3); return array_merge($v1,$v2,$v3); } // Propose un carré pour compléter la colonne function complete_v($c1,$c2) { $t = range(1,9); $r1 = array($c1[0],$c1[3],$c1[6],$c2[0],$c2[3],$c2[6]); $r2 = array($c1[1],$c1[4],$c1[7],$c2[1],$c2[4],$c2[7]); $r3 = array($c1[2],$c1[5],$c1[8],$c2[2],$c2[5],$c2[8]); $v1 = array_diff($t,$r1); shuffle($v1); $v2 = array_diff($t,$r2); shuffle($v2); $v3 = array_diff($t,$r3); shuffle($v3); return array($v1[0],$v2[0],$v3[0],$v1[1],$v2[1],$v3[1],$v1[2],$v2[2],$v3[2]); } // Détermine le n° du carré et le rang de la case d'après les coordonnées function ij2nr($i,$j) { // coords i-j => coords carré $n = 3*floor($i/3)+floor($j/3); $r = 3*($i%3)+$j%3; return array($n,$r); } // Teste si la ligne ou la colonne est conforme function test(&$c,$colflag) { $s = sizeof($c); // nombre de carrés // limite le nombre de lignes/colonnes à tester if($colflag) { // Test sur les colonnes $nc=3; if($s==2) $nc=6; elseif($s>2) $nc = 9; } else // Test sur les lignes $nc = (floor(($s-1)/3)+1)*3; // On teste for($i=0;$i<$nc;$i++) { for($j=0;$j<9;$j++) { $t = ($colflag) ? ij2nr($j,$i) : ij2nr($i,$j); if($t[0]>=$s) continue; $row[$i][] = $c[$t[0]][$t[1]]; } if(array_unique($row[$i])!=$row[$i]) return false; } return true; } // Tente de générer une grille dans le temps imparti function genere() { global $Temps,$TempsMax; // Liste des 9 valeurs possibles $liste = range(1,9); // carré haut-gauche shuffle($liste); // Mélange la liste $carre[0] = $liste; $result = $carre; $nbcarre = 1; // Pour les autres carrés while($nbcarre<9) { // Soit c'est une fin de ligne => on complète if(($nbcarre==2)||($nbcarre==5)||($nbcarre==8)) $l = complete_h($carre[$nbcarre-2],$carre[$nbcarre-1]); // Soit c'est une fin de colonne => on complète elseif(($nbcarre==6)||($nbcarre==7)) $l = complete_v($carre[$nbcarre-6],$carre[$nbcarre-3]); // Sinon => tirage random else { shuffle($liste); $l = $liste; } // On teste $carre[$nbcarre] = $l; if($test = (test($carre,0)&&test($carre,1)) ) { // OK, mémorise et passe au carré suivant $result[$nbcarre] = $l; $nbcarre++; // echo (time()-$Temps)." - "; } // Le temps de recherche est dépassé ? if(time()-$Temps>$TempsMax) break; } return $result; } if($search=@$_GET["search"]) { echo "Recherche".str_repeat(".",@$_GET["n"]+1); if(@$_GET["n"]) $sudoku = genere(); } $tmp = _AT_file("sudoku.txt"); $s=0; if($tmp) $s = sizeof($tmp); // On a trouvé une nouvelle grille => on la sauve if($search&&@$sudoku[8]) { $search = 0; // Fin de la recherche $t = serialize($sudoku)."\n"; if($tmp) { if(!in_array($t,$tmp)) { $f=fopen("sudoku.txt","a"); fputs($f,$t); fclose($f); $s++; } else $search=1; // déjà trouvée... } else { $f=fopen("sudoku.txt","w"); fputs($f,$t); fclose($f); $s++; } if(!$search) { ?> <script language="JavaScript"> t=top.location.href.split("?"); top.location.replace(t[0]+"?n=last"); </script> <? } } ?> <center> <?if($search) { ?> <script>document.location.replace("sudoku.php?n=<?=@$_GET["n"]+1?>&search=1");</script> <? } else { ?> <b><?=$s?> grille<?=($s>1)?"s":""?> disponible<?=($s>1)?"s":""?></b><br /> <A href="?search=1">Créer une nouvelle grille</A> <? } ?> </center> </body> </html> et en fait je voudrais trouver en modifiant un des deux scripts un moyen pour avoir les chiffres du sudoku tous à la suite par ligne dans une variable ( array ) et pour plusieurs niveaux les chiffres qui sont masqués de la grille de sudoku dans une variable par ligne ( 1 pour affiché et 0 pôur masquer ) c'est sa que je voudrais après pour exploiter tout sa je peut faire moi même mais je voudrais trouver ces chiffres mais je ne sais pas où ! j'ai testé des trucs mais c'est trop compliqué pour moi ce script et je n'ai pas réussi à avoir les chiifres ensuite, je peut me débrouiller pour afficher sa dans des grilles à partir de base mysql ... si vous m'avez pas compris ... voici une grille de sudoku je voudrais modifier le script pour avoir une variable par exemple $nombres avec ( imaginons qu'il y ai tous les chiffres ) $nombres = X7X6X148XXX9XXXXX63 ... on voit que c'est les chiffres du sudoku tous à la suite par ligne sa il faut modifier sudoku.php ( la seconde boite de code ) $niveau1 chiffres masqués du niveau 1 ( modifier la première boite de code test.php ) pareil pour la suite des nombres mais avec ceci : 1 pour affiché et 0 pour masquer le script de test.php a 7 niveaux, a chaque niveau supplémentaire il y a de plus en plus de chiffres masqués( c'est logique ) avec par exemple pour la grille affichée, $niveau1 = 01010111000010000011 ... mais avec plusieurs niveaux voila je précise au cas ou que il y en a qui ne s'en seraient pas douté, que le script viens d'ici : http://www.asp-php.net/scripts/asp-php/sudoku.php il faut juste que j'arrive à trouver dans le script prééxistant l'endroit ou avoir ces nombres, le modifier un peu pour n'avoir que l'essentiel et que je rajoute une requete sql pour enregistrer ca dans une base et pas un fichier pour un expert sa devrait pas etre très dur mais moi je suis perdu dans ce script voila, merci d'avance ! yann
yuuzhantar Posté 21 Avril 2006 Auteur Posté 21 Avril 2006 Je suis en train de préparer un jeu de sudoku en ligne, c'est pour sa que je vous demande ceci
yuuzhantar Posté 29 Avril 2006 Auteur Posté 29 Avril 2006 ah j'ai trouvé un nouveau script sudoku en php http://pagesperso.laposte.net/ttu/sudoku.php ou peut on trouver dedans les chiffres du sudoku ????
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant