par
yuuzhantar » 19 avr. 2006, 17:55
voila le script que j'ai trouvé
( un peut long )
test.php
affiche les grilles
<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 = @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+48);
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+48);
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)>8</th>
<th id=j9 onclick=store(9)>9</th>
</tr><tr>
<th colspan=3 ><A href="javascript:;" 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 = @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>
voila
je voudrais trouvé la dedans les variables que je vous ai décrites tout à l'heure
merci d'avance
voila le script que j'ai trouvé
( un peut long )
[quote]
test.php
affiche les grilles
[/quote]
[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 = @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+48);
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+48);
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)>8</th>
<th id=j9 onclick=store(9)>9</th>
</tr><tr>
<th colspan=3 ><A href="javascript:;" 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>
[/php]
[quote]
sudoku.php
génère les grilles
[/quote]
[php]
<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 = @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>
[/php]
voila
je voudrais trouvé la dedans les variables que je vous ai décrites tout à l'heure
merci d'avance