amrounix
Messages postés78Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention12 juillet 2010
-
29 juil. 2008 à 14:54
thomas boulenger -
17 mai 2017 à 21:41
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
J'ai essayé tes grilles, elles ont souvent plusieurs solutions
exemple avec cette grille il y a 2 solutions : http://www.lamarmite.fr/felix/sudoky_17_05_17.jpg
mais avec celle ci il y en a 18.
http://www.lamarmite.fr/felix/sudoky_4.jpg
J'ai même trouvé une de tes grilles où tu as 225 solutions ...
pour t'aider j'ai fait une page html :
http://www.lamarmite.fr/felix/amrounix.html
un peu long à charger il y a les 225 solutions !!!
évidement quand la solution qu'on a trouvé ne correspond pas à la solution que tu proposes, il te dit que ta réponse est fausse alors que les contraintes du sudoku sont respectées.
Les grilles générées sont parfois introuvables.
j'en ai mis quelques unes à l'épreuve d'un algorithme qui trouve des grilles difficiles, parfois on reste bloquer avec plusieurs cases avec deux possibilités équivalentes (exemple 7,8 sur une case et 7,8 sur une autre)
En mettant un chiffre au hasard (ici 7 ou 8), ça se débloque. Il faut parfois répéter l'opération hasardeuses plusieurs fois. Ensuite je fini toujours par trouver une solution mais qui n'est pas obligatoirement celle qui est proposée ...
Donc bonne chance à ceux qui cherche manuellement la solution à vos grilles générées !!!
kiadimoundi
Messages postés4Date d'inscriptionvendredi 22 décembre 2006StatutMembreDernière intervention30 décembre 2008 29 déc. 2008 à 12:02
cs_chaoun
Messages postés2Date d'inscriptionlundi 15 septembre 2008StatutMembreDernière intervention18 septembre 2008 18 sept. 2008 à 12:03
Merci pour les chiffres ! ça marche nickel
et c'est une bonne idée pour les commentaires...
Pour éviter le problème du "onload", tu pourrais peut-être afficher une grille
blanche et la remplir seulement quand on choisit un niveau ?
à part ces quelques détails, c'est vraiment un bon code, bravo !
amrounix
Messages postés78Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention12 juillet 2010 18 sept. 2008 à 08:11
-pour les chiffres sur PC portable, c'est corrigé
-j'ai remplacé les commentaires // par /*...*/
je pense que le problème de miloka vient sur le onload du , quand la page se charge, on initialise la grille sinon rien ne s'affiche !
vérifie qu'il n'y a pas 2 dans ta page, sinon as tu une URL, qu'on puisse regarder le source et trouver le problème ?
cs_chaoun
Messages postés2Date d'inscriptionlundi 15 septembre 2008StatutMembreDernière intervention18 septembre 2008 17 sept. 2008 à 13:15
petit bug : j'ai un ordinateur portable et je ne peux pas rentrer les chiffres dans la grille...
pour Miloka : quand le navigateur lit le programme et qu'il rencontre "//" dans une ligne,
il lit pas ce qui suit (le commentaire) et recommence à lire directement à la ligne suivante.
D'une façon générale, pour que le code fonctionne, il vaut mieux recréer les passages à la ligne
de façon à ce que le code sur ta page ressemble à celui qui est affiché ici.
Si tu télécharges le zip, le code sera "comme il faut" et tu pourras faire un copier-coller sur
ta page sans problème.
miloka
Messages postés5Date d'inscriptionjeudi 11 septembre 2008StatutMembreDernière intervention13 septembre 2008 13 sept. 2008 à 14:33
Voilou j'ai ôté les commentaires de codes.
La grille ne s'affiche tjs pas.
Désolé de t'embêter ...
miloka
Messages postés5Date d'inscriptionjeudi 11 septembre 2008StatutMembreDernière intervention13 septembre 2008 13 sept. 2008 à 09:28
* pour html c'est ma faute lol, erreur de frappe ...
J'ai copié le code et coller ensuite sur ma page html mais qd je le valide, tout s'écrit à la suite comme ci-dessus. Je ne suis pas développeuse donc je ne sais pas quelle écritues sont ensemble .. enfin
J'essai sans les écritures, erreur de débutant ...
Merci à toi
amrounix
Messages postés78Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention12 juillet 2010 13 sept. 2008 à 02:15
tu peut faire des passages à la ligne ?
parce que comme ca, les commentaires de code avec le "//" devant, va mettre en commentaire tte la suite du code
du coup, il ne retrouve plus rien !
au faite c'est <html> et non <htlm> :)
miloka
Messages postés5Date d'inscriptionjeudi 11 septembre 2008StatutMembreDernière intervention13 septembre 2008 13 sept. 2008 à 02:07
J'ai apporté les modifications mais rien n'y fait !!
je te joins le code que j'ai installé sur ma page de portail
<htlm><head><style>.tabloInterieur{width:20px;height:20px;font-family:Tahoma;font-size:12px;color:lightblue;text-align:center;border:1px #c0c0c0 solid;cursor:pointer;}.tabloInterieur b{color:blue;cursor:pointer;}.tabloExterieur{border:2px #c0c0c0 solid;text-align:center;}td{font-family:Tahoma;font-size:12px;}a{font-family:Tahoma;font-size:12px;text-decoration:none;}</style><script language="javascript">//14 grilles possibles + remplacement des chiffres de 1-9 par d'autres chiffres ca fait beaucoup de combinaisons !!!var puzzles = new Array ("123745698459681732678392145269584371513267948784913526937412856826375194451869237","126895374437621985958473126457983612193246578862517394269548731314769852785231649","142685973936217458857394612329451867174862593568973241298534716745621389136789425","158469372362587914794312658637215984259648173841973526726841593435796821189235467","269548731314769852785231649126895374437621985958473126457983612193246578862517394","362175948845963217179248635713296854458731629962584713439527681576184392821396457","386751942574928361291364875614837529793245186528619743478293165659817432132456987","418957632297643581563812794286571394354928716179436285723845169865139472941627358","452371986618429573379865241734629815162845397598713624293148567754236981186957432","531428679628579143749163825986217345214835967537496281792854163381796452654312978","753896412196274538482153679385624971421759683967318245248567139365912847791834526","872351946139264758654987321269587134843612975175439268418725693526391487793846512","921437568583629174674158392283746195765912438419835267674319852251847396983526741","954126783836759124172834956295431678371568492648297315849567312215983647763421589");var niveaux = //nombre de chiffre qui vont apparaitre en fonction du niveau (affichage symétrique, donc faire *2){0 : 41, //affiche tout (pour debuger et tester...)1 : 17, //faible2 : 15, //moyen3 : 13, //difficile4 : 11 //diabolique }var grille,masque,chiffres,choixCase= null,grilleUser= new Array(81);//retourne un chiffre entre min & maxfunction aleatoire(min,maxi) {return (parseInt(Math.random()*1000)%(maxi-min+1)+min);}//test si c'est un chiffrefunction isChiffre(nbre){return (nbre!=null&&nbre>0&&nbre<=9);}//creer un tableau 3x3//grille= liste des chiffres, chiffres = chiffre de 1 à 9 ds le désordre, masque = code binaire des emplacement des chiffres, id = index du tableau, sub = tableau principale / sous tableau function creerGrille3x3(grille,chiffres,masque,id,sub){var htm="\";var x,y;for (y=0;y<3;y++){htm+=\"----
";for (x=0;x<3;x++){index = y*3+x;if (sub) { htm+=""; htm+=creerGrille3x3(grille,chiffres,masque,index,false); //recursif pour afficher les sous tableaux htm+=", "; } else { if (masque[id*9+index] == true) //test binaire sur le masque { htm+=""+chiffres[parseInt(grille.charAt(id*9+index))]+", "; grilleUser[id*9+index]=chiffres[parseInt(grille.charAt(id*9+index))]; } else { //htm+= chiffres[parseInt(grille.charAt(id*9+index))]; htm+= ""; //if (isChiffre(grilleUser[id*9+index])) htm+=isChiffre(grilleUser[id*9+index]) ? grilleUser[id*9+index] : " "; htm+=", "; } }}htm+="n";}htm+="
";return htm;}//changement du style au passage de la souris + selection de la case selectionnéefunction choix(source,code){if (code == 0) {source.style.background=(source == choixCase) ? '#c0ffc0':'yellow'}else if (code == 1){ source.style.background=(source == choixCase) ? '#c0ffc0':'';} else{if (choixCase!=null) {choixCase.style.background='';}choixCase=source;choix(source,0);}}//retourne un chiffre qui n'appartient pas à la liste envoyé en paramètrefunction uniqueChiffre(list){var nbr=aleatoire(1,9);for(var a=0;a<list.length;a++){if(list[a]==nbr){nbr=aleatoire(1,9);a=0;}}return nbr;}//retourne les chiffres de 1 à 9 dans le desordrefunction chiffreDesordre(){liste=new Array("0");for(j=0;j<9;j++){nvx_chiffre=uniqueChiffre(liste);liste.push(nvx_chiffre);}return liste;}//retourne un masque correspondant au niveau de difficultéfunction getMasque(nbmax){var list = new Array(81);for (i=0;i<nbmax;i++){x = aleatoire(0,40);while (list[x]==true){x = aleatoire(0,40);}list[x]=true;}for (i = 0; i<40; i++){if (list[39-i]==true) list[41+i] = true;}return list;}//génère la grillefunction creerGrille(niveau,nvx){if (nvx){grilleUser= new Array(81);grille = puzzles[aleatoire(0,13)];nbChiffre = niveaux[parseInt(niveau)];masque = getMasque(nbChiffre);chiffres = chiffreDesordre();choixCase=null;}html=creerGrille3x3(grille,chiffres,masque,0,true);document.getElementById("grille").innerHTML = html;}//remise a zéro de la grillefunction initGrille(code,msg){grilleUser= new Array(81);if (!msg||confirm("êtes-vous sûr de réinitialiser la grille ?")) {creerGrille(document.getElementById('level').value,code);}}//récupère le code du clavierfunction toucher(e){var key = window.event ? e.keyCode : e.which;supp = (key==32||key==46||key==96||key==8); //supprime le chiffre (touches : espace,del,0 ou back)key -=96;if (key>=1&&key<=9||supp) { if (choixCase==null) {alert("vous devez selectionner une case pour taper un chiffre");} else { choixCase.innerHTML = supp ? " " : key; grilleUser[parseInt(choixCase.id.split("_")[1])]= supp ? "" : key; } }}//verifie la grillefunction verif(code){for (i=0;i<81;i++){if (isChiffre(grilleUser[i])&&masque[i]!=true)if (code&&parseInt(chiffres[parseInt(grille.charAt(i))])!=grilleUser[i]) { document.getElementById("c_"+i).style.color="red"; } else { document.getElementById("c_"+i).style.color="lightblue"; }}}//Affiche les réponses de la grillefunction reponse(code){for (i=0;i<81;i++){if (masque[i]!=true)if (code&&!isChiffre(grilleUser[i])) { document.getElementById("c_"+i).innerHTML=chiffres[parseInt(grille.charAt(i))]; } else { document.getElementById("c_"+i).innerHTML=isChiffre(grilleUser[i])?grilleUser[i]:" "; }}verif(code);}</script></head>
<center>SuDoKy V1.0 par AmRouNiX (A. Selim)
[# reponse]
</center></html>
voilà je pense que j'ai fait comme indiqué ... encore mer ci !
amrounix
Messages postés78Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention12 juillet 2010 13 sept. 2008 à 01:51
ok ok , je vois le pb,
tu enleve les lignes :
<script language="javascript">
window.onload = function () {
initGrille(true,false);}
</script>
et tu remplace :
// (en + il y'a une erreur dans la ligne ...)
par
verifie qu'il y'a un seul dans ta page ! sinon envoi moi ton source si ca ne marche pas !
miloka
Messages postés5Date d'inscriptionjeudi 11 septembre 2008StatutMembreDernière intervention13 septembre 2008 13 sept. 2008 à 01:13
re moi ...
merci de ton écoute.
Au niveau balise et "id" j'ai du rien touché puisque j'ai bêtement copié le code source, d'où peu être ma boulette ???
j'ai voulu télécharger le script mais mon ms dos affiche une erreur dite d'"ouverture".
Sur mon forum, seul le niveau et le texte s'affiche en aucun cas la grille de jeu.
Merci de ton aide
amrounix
Messages postés78Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention12 juillet 2010 12 sept. 2008 à 21:08
salut ... ca m'arrive souvent aussi ce genre de souci !
verifie que tu as bien fermé les balises, que tu n'a pas mis 2 fois les mêmes "id"
tu as un message d'erreur ? si oui à quelle ligne ?
miloka
Messages postés5Date d'inscriptionjeudi 11 septembre 2008StatutMembreDernière intervention13 septembre 2008 11 sept. 2008 à 21:41
Bonsoir,
C'est le script enfin l'apparence définitive qui m'a fait venir ici. Ce petit jeu est bien présenté et clair !
Je ne suis pas une experte en info mais qd même, j'ai installé le script sur ma bulle de forum mais la grille ne s'affiche pas. Aurais je fait une erreur qqe part.
Merci de m'éclairer un peu ...
lakichemole
Messages postés253Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention18 mai 2009 1 août 2008 à 15:39
Oki je pourrais m'en servir alors nikel j'avai peur que tu enlève juste un nombre au hazard de case et pas conséquent la règle d'unicité aurait été compromise :)
amrounix
Messages postés78Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention12 juillet 2010 1 août 2008 à 14:35
salut !
concernant le niveau de difficulté, je ne sais pas si tu as remarqué mais la disposition des chiffes affichée était symétrique par rapport au centre de la grille.
en fonction du niveau, j'affiche un certain nombre de chiffre sur la demi grille,
17 chiffre pour le niveau faible, 15 niveau moyen, 13 difficile et 11 chiffres pour le niveau diabolique
et par symétrie, on trouve 34 chiffres visible pour le niveau faible ... jusqu'a 22 chiffres pour le niveau diabolique qui est suffisent pour résoudre la grille car théoriquement il faut un minimum de 17 chiffres disposés n'importe où pour résoudre la grille et avoir une solution unique (je l'ai lu sur un site)
nb : le nombre de chiffres affichés correspond à la variable "niveaux", et la valeur 41 permet de rendre visible toute la grille (utilisé pour débugger) ...
PS: merci pr la note !
@+
lakichemole
Messages postés253Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention18 mai 2009 1 août 2008 à 12:19
C'est encore moi ! pour le niveau de difficulté tu enlèves un nombre aléatoire de chiffres suivant les niveaux dans ta grille??
nicomilville
Messages postés3472Date d'inscriptionlundi 16 juillet 2007StatutMembreDernière intervention28 février 201436 1 août 2008 à 11:44
Salut,
Encore une bonne source !
Continue comme ça amrounix !
a++
cs_petifa
Messages postés215Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention10 mars 2014 30 juil. 2008 à 12:06
c vrai mais c plus fun d'avoir un jeu avec toutes les possibilités possibles :p
5 millions de grilles dja pour les faire il faut y aller, donc ton système suffit :)
amrounix
Messages postés78Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention12 juillet 2010 30 juil. 2008 à 11:59
c'est clair que comme ca on peut encore augementer le nombre de combinaison ...
x4 pour la rotation
x2 pour la symétrie
x6 permutations des blocs horizontalements (3!)
x6 permutations des blocs verticalements
x6 permutations des lignes dans un même bloc
x6 permutations des colonnes dans un même bloc
5080320x2x4x6x6x6x6 = 52 672 757 760 combinaisons à cela faut supprmier les doublons (symétrie + permutation)
amrounix
Messages postés78Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention12 juillet 2010 30 juil. 2008 à 11:47
quel intérêt de faire des algorithmes (bien que j'aime ca) sachant qu'avec mon système on aboutie à + de 5 millions de grilles différentes, et c'est sans compter le temps d'exécution, algorithme récursif, équations à 72 paramètres (81-9) même en utilisant des matrices, ca fait beaucoup de calcul !
Pour info sans tenir compte des symétries (rotation, transposition), il existe 5 472 730 538 de combinaisons possibles ...
cs_petifa
Messages postés215Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention10 mars 2014 30 juil. 2008 à 11:47
Pour mélanger il y a une autre solution sinon,
c'est d'intervertir deux lignes, ou deux colonnes qui se trouvent dans le même "carré" en gros sur le carré de 9x9 tu intervertis la ligne 1 et 2, ca te donne une nouvelle grille et après tu as encore plus de solutions je pense.
mais bon ca nécessite que tu ne stock pas de la même façon tes éléments car il faudrait les mettre dans un seul tableau.
XtremDuke
Messages postés626Date d'inscriptionsamedi 28 septembre 2002StatutMembreDernière intervention18 mai 20094 30 juil. 2008 à 11:30
C'est pas mal mais pourquoi n'avoir pas utilisé un algorithme de génération de grille ?
amrounix
Messages postés78Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention12 juillet 2010 30 juil. 2008 à 11:10
mici ci cooool
lakichemole
Messages postés253Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention18 mai 2009 30 juil. 2008 à 11:05
mais si!!! :)
amrounix
Messages postés78Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention12 juillet 2010 30 juil. 2008 à 10:51
yes ! et c'est la méthode chiffreDesordre() qui réalise ce mélange !
pas de note pour ce source ? :-/
@+
lakichemole
Messages postés253Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention18 mai 2009 30 juil. 2008 à 10:30
J'imagine que quand tu dis que tu mélange les chiffre de de 1 à 9 tu remplace par exemple tous les 1 de la grille par le 8 le 8 par un 7 etc?
amrounix
Messages postés78Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention12 juillet 2010 30 juil. 2008 à 10:23
Non, en faite il y'a 14 grilles différentes déjà mémorisées dans la variable puzzles, c'est des grilles déjà résolues, l'astuce c'est qu'en seconde phase je mélange les chiffres de 1 à 9, qui donneront beaucoup plus de grilles différentes .
Pour chaque grille on a 9! (362880) combinaisons possibles, soit un totale de :
362880 x 14 = 5080320 grilles possibles.
Une fois la grille créée, j'applique un masque qui laisse un certain nombre de chiffre visible en fonction du niveau, mais normalement, on a qu'une seule possibilité à moins qu'on a vraiment vraiment pas de chance (statistiquement quasi impossible)
Ce qui est aléatoire, c'est le mélange des chiffres et l'emplacement des chiffres visibles !
Lors de la vérification, je fait des tests entre ce qu'on a saisie et la grille générée (variable grille combiné avec la variable chiffres)
Si tu as d'autres questions, n'hesite pas !
@+
lakichemole
Messages postés253Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention18 mai 2009 30 juil. 2008 à 09:52
Salut une petite question, j'ai regardé le code vite fait et je crois avoir compris que tu remplissais la grille de ton sudoku aléatoirement, mais je n'ai pas vu la fonction qui permettais de savoir si la grille était résolvable et à fortiori d'une seul façon ais-je mal vu?
cs_petifa
Messages postés215Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention10 mars 2014 30 juil. 2008 à 09:20
Mouai c vrai la classe,
heu franchement jprend pas le paris, jvais le perdre a tous les coups :p
J'ai pas encore testé le jeux mais ca va vnir soon.
amrounix
Messages postés78Date d'inscriptionlundi 10 mars 2003StatutMembreDernière intervention12 juillet 2010 29 juil. 2008 à 14:54
246 lignes de pur code... j'aime ca ! dites moi ce que vous en pensez ?
je donne une médaille à celui qui fera + court ! (sans repomper ... lol )
17 mai 2017 à 21:41
exemple avec cette grille il y a 2 solutions : http://www.lamarmite.fr/felix/sudoky_17_05_17.jpg
mais avec celle ci il y en a 18.
http://www.lamarmite.fr/felix/sudoky_4.jpg
J'ai même trouvé une de tes grilles où tu as 225 solutions ...
pour t'aider j'ai fait une page html :
http://www.lamarmite.fr/felix/amrounix.html
un peu long à charger il y a les 225 solutions !!!
évidement quand la solution qu'on a trouvé ne correspond pas à la solution que tu proposes, il te dit que ta réponse est fausse alors que les contraintes du sudoku sont respectées.
10 mai 2017 à 23:18
j'en ai mis quelques unes à l'épreuve d'un algorithme qui trouve des grilles difficiles, parfois on reste bloquer avec plusieurs cases avec deux possibilités équivalentes (exemple 7,8 sur une case et 7,8 sur une autre)
En mettant un chiffre au hasard (ici 7 ou 8), ça se débloque. Il faut parfois répéter l'opération hasardeuses plusieurs fois. Ensuite je fini toujours par trouver une solution mais qui n'est pas obligatoirement celle qui est proposée ...
Donc bonne chance à ceux qui cherche manuellement la solution à vos grilles générées !!!
29 déc. 2008 à 12:02
Si des personnes sont intéressées par un générateur (beta) de grilles de sudoku :
j'en ai mis un ici : http://www.javascriptfr.com/codes/GENERATEUR-GRILLES-SUDOKU_48813.aspx
n'hésitez pas à me faire par de vos suggestions !
18 sept. 2008 à 12:03
et c'est une bonne idée pour les commentaires...
Pour éviter le problème du "onload", tu pourrais peut-être afficher une grille
blanche et la remplir seulement quand on choisit un niveau ?
à part ces quelques détails, c'est vraiment un bon code, bravo !
18 sept. 2008 à 08:11
-j'ai remplacé les commentaires // par /*...*/
je pense que le problème de miloka vient sur le onload du , quand la page se charge, on initialise la grille sinon rien ne s'affiche !
vérifie qu'il n'y a pas 2 dans ta page, sinon as tu une URL, qu'on puisse regarder le source et trouver le problème ?
17 sept. 2008 à 13:15
pour Miloka : quand le navigateur lit le programme et qu'il rencontre "//" dans une ligne,
il lit pas ce qui suit (le commentaire) et recommence à lire directement à la ligne suivante.
D'une façon générale, pour que le code fonctionne, il vaut mieux recréer les passages à la ligne
de façon à ce que le code sur ta page ressemble à celui qui est affiché ici.
Si tu télécharges le zip, le code sera "comme il faut" et tu pourras faire un copier-coller sur
ta page sans problème.
13 sept. 2008 à 14:33
La grille ne s'affiche tjs pas.
Désolé de t'embêter ...
13 sept. 2008 à 09:28
J'ai copié le code et coller ensuite sur ma page html mais qd je le valide, tout s'écrit à la suite comme ci-dessus. Je ne suis pas développeuse donc je ne sais pas quelle écritues sont ensemble .. enfin
J'essai sans les écritures, erreur de débutant ...
Merci à toi
13 sept. 2008 à 02:15
parce que comme ca, les commentaires de code avec le "//" devant, va mettre en commentaire tte la suite du code
du coup, il ne retrouve plus rien !
au faite c'est <html> et non <htlm> :)
13 sept. 2008 à 02:07
je te joins le code que j'ai installé sur ma page de portail
<htlm><head><style>.tabloInterieur{width:20px;height:20px;font-family:Tahoma;font-size:12px;color:lightblue;text-align:center;border:1px #c0c0c0 solid;cursor:pointer;}.tabloInterieur b{color:blue;cursor:pointer;}.tabloExterieur{border:2px #c0c0c0 solid;text-align:center;}td{font-family:Tahoma;font-size:12px;}a{font-family:Tahoma;font-size:12px;text-decoration:none;}</style><script language="javascript">//14 grilles possibles + remplacement des chiffres de 1-9 par d'autres chiffres ca fait beaucoup de combinaisons !!!var puzzles = new Array ("123745698459681732678392145269584371513267948784913526937412856826375194451869237","126895374437621985958473126457983612193246578862517394269548731314769852785231649","142685973936217458857394612329451867174862593568973241298534716745621389136789425","158469372362587914794312658637215984259648173841973526726841593435796821189235467","269548731314769852785231649126895374437621985958473126457983612193246578862517394","362175948845963217179248635713296854458731629962584713439527681576184392821396457","386751942574928361291364875614837529793245186528619743478293165659817432132456987","418957632297643581563812794286571394354928716179436285723845169865139472941627358","452371986618429573379865241734629815162845397598713624293148567754236981186957432","531428679628579143749163825986217345214835967537496281792854163381796452654312978","753896412196274538482153679385624971421759683967318245248567139365912847791834526","872351946139264758654987321269587134843612975175439268418725693526391487793846512","921437568583629174674158392283746195765912438419835267674319852251847396983526741","954126783836759124172834956295431678371568492648297315849567312215983647763421589");var niveaux = //nombre de chiffre qui vont apparaitre en fonction du niveau (affichage symétrique, donc faire *2){0 : 41, //affiche tout (pour debuger et tester...)1 : 17, //faible2 : 15, //moyen3 : 13, //difficile4 : 11 //diabolique }var grille,masque,chiffres,choixCase= null,grilleUser= new Array(81);//retourne un chiffre entre min & maxfunction aleatoire(min,maxi) {return (parseInt(Math.random()*1000)%(maxi-min+1)+min);}//test si c'est un chiffrefunction isChiffre(nbre){return (nbre!=null&&nbre>0&&nbre<=9);}//creer un tableau 3x3//grille= liste des chiffres, chiffres = chiffre de 1 à 9 ds le désordre, masque = code binaire des emplacement des chiffres, id = index du tableau, sub = tableau principale / sous tableau function creerGrille3x3(grille,chiffres,masque,id,sub){var htm="\";var x,y;for (y=0;y<3;y++){htm+=\"----
";for (x=0;x<3;x++){index = y*3+x;if (sub) { htm+=""; htm+=creerGrille3x3(grille,chiffres,masque,index,false); //recursif pour afficher les sous tableaux htm+=", "; } else { if (masque[id*9+index] == true) //test binaire sur le masque { htm+=""+chiffres[parseInt(grille.charAt(id*9+index))]+", "; grilleUser[id*9+index]=chiffres[parseInt(grille.charAt(id*9+index))]; } else { //htm+= chiffres[parseInt(grille.charAt(id*9+index))]; htm+= ""; //if (isChiffre(grilleUser[id*9+index])) htm+=isChiffre(grilleUser[id*9+index]) ? grilleUser[id*9+index] : " "; htm+=", "; } }}htm+="n";}htm+="
";return htm;}//changement du style au passage de la souris + selection de la case selectionnéefunction choix(source,code){if (code == 0) {source.style.background=(source == choixCase) ? '#c0ffc0':'yellow'}else if (code == 1){ source.style.background=(source == choixCase) ? '#c0ffc0':'';} else{if (choixCase!=null) {choixCase.style.background='';}choixCase=source;choix(source,0);}}//retourne un chiffre qui n'appartient pas à la liste envoyé en paramètrefunction uniqueChiffre(list){var nbr=aleatoire(1,9);for(var a=0;a<list.length;a++){if(list[a]==nbr){nbr=aleatoire(1,9);a=0;}}return nbr;}//retourne les chiffres de 1 à 9 dans le desordrefunction chiffreDesordre(){liste=new Array("0");for(j=0;j<9;j++){nvx_chiffre=uniqueChiffre(liste);liste.push(nvx_chiffre);}return liste;}//retourne un masque correspondant au niveau de difficultéfunction getMasque(nbmax){var list = new Array(81);for (i=0;i<nbmax;i++){x = aleatoire(0,40);while (list[x]==true){x = aleatoire(0,40);}list[x]=true;}for (i = 0; i<40; i++){if (list[39-i]==true) list[41+i] = true;}return list;}//génère la grillefunction creerGrille(niveau,nvx){if (nvx){grilleUser= new Array(81);grille = puzzles[aleatoire(0,13)];nbChiffre = niveaux[parseInt(niveau)];masque = getMasque(nbChiffre);chiffres = chiffreDesordre();choixCase=null;}html=creerGrille3x3(grille,chiffres,masque,0,true);document.getElementById("grille").innerHTML = html;}//remise a zéro de la grillefunction initGrille(code,msg){grilleUser= new Array(81);if (!msg||confirm("êtes-vous sûr de réinitialiser la grille ?")) {creerGrille(document.getElementById('level').value,code);}}//récupère le code du clavierfunction toucher(e){var key = window.event ? e.keyCode : e.which;supp = (key==32||key==46||key==96||key==8); //supprime le chiffre (touches : espace,del,0 ou back)key -=96;if (key>=1&&key<=9||supp) { if (choixCase==null) {alert("vous devez selectionner une case pour taper un chiffre");} else { choixCase.innerHTML = supp ? " " : key; grilleUser[parseInt(choixCase.id.split("_")[1])]= supp ? "" : key; } }}//verifie la grillefunction verif(code){for (i=0;i<81;i++){if (isChiffre(grilleUser[i])&&masque[i]!=true)if (code&&parseInt(chiffres[parseInt(grille.charAt(i))])!=grilleUser[i]) { document.getElementById("c_"+i).style.color="red"; } else { document.getElementById("c_"+i).style.color="lightblue"; }}}//Affiche les réponses de la grillefunction reponse(code){for (i=0;i<81;i++){if (masque[i]!=true)if (code&&!isChiffre(grilleUser[i])) { document.getElementById("c_"+i).innerHTML=chiffres[parseInt(grille.charAt(i))]; } else { document.getElementById("c_"+i).innerHTML=isChiffre(grilleUser[i])?grilleUser[i]:" "; }}verif(code);}</script></head>
<center>SuDoKy V1.0 par AmRouNiX (A. Selim)
[# reponse]
</center></html>
voilà je pense que j'ai fait comme indiqué ... encore mer ci !
13 sept. 2008 à 01:51
tu enleve les lignes :
<script language="javascript">
window.onload = function () {
initGrille(true,false);}
</script>
et tu remplace :
// (en + il y'a une erreur dans la ligne ...)
par
verifie qu'il y'a un seul dans ta page ! sinon envoi moi ton source si ca ne marche pas !
13 sept. 2008 à 01:13
merci de ton écoute.
Au niveau balise et "id" j'ai du rien touché puisque j'ai bêtement copié le code source, d'où peu être ma boulette ???
j'ai voulu télécharger le script mais mon ms dos affiche une erreur dite d'"ouverture".
Sur mon forum, seul le niveau et le texte s'affiche en aucun cas la grille de jeu.
Merci de ton aide
12 sept. 2008 à 21:08
verifie que tu as bien fermé les balises, que tu n'a pas mis 2 fois les mêmes "id"
tu as un message d'erreur ? si oui à quelle ligne ?
11 sept. 2008 à 21:41
C'est le script enfin l'apparence définitive qui m'a fait venir ici. Ce petit jeu est bien présenté et clair !
Je ne suis pas une experte en info mais qd même, j'ai installé le script sur ma bulle de forum mais la grille ne s'affiche pas. Aurais je fait une erreur qqe part.
Merci de m'éclairer un peu ...
1 août 2008 à 15:39
1 août 2008 à 14:35
concernant le niveau de difficulté, je ne sais pas si tu as remarqué mais la disposition des chiffes affichée était symétrique par rapport au centre de la grille.
en fonction du niveau, j'affiche un certain nombre de chiffre sur la demi grille,
17 chiffre pour le niveau faible, 15 niveau moyen, 13 difficile et 11 chiffres pour le niveau diabolique
et par symétrie, on trouve 34 chiffres visible pour le niveau faible ... jusqu'a 22 chiffres pour le niveau diabolique qui est suffisent pour résoudre la grille car théoriquement il faut un minimum de 17 chiffres disposés n'importe où pour résoudre la grille et avoir une solution unique (je l'ai lu sur un site)
nb : le nombre de chiffres affichés correspond à la variable "niveaux", et la valeur 41 permet de rendre visible toute la grille (utilisé pour débugger) ...
PS: merci pr la note !
@+
1 août 2008 à 12:19
1 août 2008 à 11:44
Encore une bonne source !
Continue comme ça amrounix !
a++
30 juil. 2008 à 12:06
5 millions de grilles dja pour les faire il faut y aller, donc ton système suffit :)
30 juil. 2008 à 11:59
x4 pour la rotation
x2 pour la symétrie
x6 permutations des blocs horizontalements (3!)
x6 permutations des blocs verticalements
x6 permutations des lignes dans un même bloc
x6 permutations des colonnes dans un même bloc
5080320x2x4x6x6x6x6 = 52 672 757 760 combinaisons à cela faut supprmier les doublons (symétrie + permutation)
30 juil. 2008 à 11:47
Pour info sans tenir compte des symétries (rotation, transposition), il existe 5 472 730 538 de combinaisons possibles ...
30 juil. 2008 à 11:47
c'est d'intervertir deux lignes, ou deux colonnes qui se trouvent dans le même "carré" en gros sur le carré de 9x9 tu intervertis la ligne 1 et 2, ca te donne une nouvelle grille et après tu as encore plus de solutions je pense.
mais bon ca nécessite que tu ne stock pas de la même façon tes éléments car il faudrait les mettre dans un seul tableau.
30 juil. 2008 à 11:30
30 juil. 2008 à 11:10
30 juil. 2008 à 11:05
30 juil. 2008 à 10:51
pas de note pour ce source ? :-/
@+
30 juil. 2008 à 10:30
30 juil. 2008 à 10:23
Pour chaque grille on a 9! (362880) combinaisons possibles, soit un totale de :
362880 x 14 = 5080320 grilles possibles.
Une fois la grille créée, j'applique un masque qui laisse un certain nombre de chiffre visible en fonction du niveau, mais normalement, on a qu'une seule possibilité à moins qu'on a vraiment vraiment pas de chance (statistiquement quasi impossible)
Ce qui est aléatoire, c'est le mélange des chiffres et l'emplacement des chiffres visibles !
Lors de la vérification, je fait des tests entre ce qu'on a saisie et la grille générée (variable grille combiné avec la variable chiffres)
Si tu as d'autres questions, n'hesite pas !
@+
30 juil. 2008 à 09:52
30 juil. 2008 à 09:20
heu franchement jprend pas le paris, jvais le perdre a tous les coups :p
J'ai pas encore testé le jeux mais ca va vnir soon.
29 juil. 2008 à 14:54
je donne une médaille à celui qui fera + court ! (sans repomper ... lol )