Signaler

Sudoku, le script ne continue pas

Posez votre question Palepupet 1Messages postés jeudi 24 août 2017Date d'inscription 24 août 2017 Dernière intervention
Bonjour à tous,

J'essai de coder un sudoku afin de m'améliorer en javascript. Mais là je suis tombé sur un os qui me pose problème depuis plusieurs jours et que je ne comprend pas.

J'ai fait plusieurs petites fonctions qui me permettent de checker à chaque fois si le chiffre pioché est présent dans dans la ligne en cours ainsi que la colonne en cours (pour l'instant le carré n'est pas codé).

Tout fonctionne bien cependant arrivé à un certain moment, aléatoirement, le script s'arrête juste avant ma boucle while qui vérifie si le chiffre est présent dans la colonne. Il détecte que le chiffre est présent, il le supprime du tableau à piocher mais s'arrête juste avant le while qui devrait normalement le faire recommencer en piochant un nouveau chiffre etc.

Je vous joins le script complet ainsi que ce que cela me donne dans la console de chrome, si quelqu'un pourrait m'aider, ça serait super sympas.

Merci.


http://img-19.ccm2.net/xjNWoh8S-fwHy5rE2_7osdnjjfQ=/cd3c601affef491e997933b2ab9ab2b0/ccm-ugc/Capture_decran_2017-08-24_a_16.16.41.png

var tabLigne = Array(9);
		var tabColone = Array(9);
		var tabCarre = Array(9);
		var tabSud = Array(9);

		var tabPioche = [1,2,3,4,5,6,7,8,9];
		var min = 1;
		var max = tabPioche.length;

		var cologneGlobaleI = 0;
		var ligneGlobaleJ = 0;

		for(var i=0 ; i<9 ; i++){
			tabLigne[i] = Array(9);
			tabColone[i] = Array(9);
			tabCarre[i] = Array(9);
			tabSud[i] = Array(9);
		}

		console.log(tabLigne);
		console.log(tabColone);
		console.log(tabCarre);


		do{
			ligneGlobaleJ = 0;
			tabPioche = [1,2,3,4,5,6,7,8,9];

			do{
				testGlobal();
			}while(ligneGlobaleJ < 9);
			
			cologneGlobaleI++;

		}while(cologneGlobaleI < 4);


		function testGlobal(){
			do{
				var nbrLigne = checkLigne();
				console.log("nbrLigne vaut : " +nbrLigne);
				var nbrColonne = checkColonne(nbrLigne);

				console.log("test colonne donne : " + nbrColonne);

				console.log("avant test while");

			}while(nbrColonne === "present");

			console.log("après test while");

			console.log("on ajoute le nombre " + nbrLigne + " aux tableau ligne et colonne ");

			tabLigne[cologneGlobaleI][ligneGlobaleJ] = nbrLigne;
			tabColone[ligneGlobaleJ][cologneGlobaleI] = nbrLigne;
			tabSud[cologneGlobaleI][ligneGlobaleJ] = nbrLigne;

			console.log("tabLigne : ");
			console.log(tabLigne);

			console.log("tabColonne : ");
			console.log(tabColone);
			
			console.log("tabSud : ");
			console.log(tabSud);

			tabPioche = [1,2,3,4,5,6,7,8,9];

			ligneGlobaleJ++;
			console.log("%c on vient d'ajouter +1 a ligneGlobaleJ : " + ligneGlobaleJ, "color:red");

			return nbrLigne;
		}


		function checkLigne(){
			do{
				var nbr = piocheNombreDuTableau(max, min, tabPioche);
				var nbri = presentDansTableau(tabLigne[cologneGlobaleI], nbr, tabPioche);
				if(tabPioche.length<1){
					tabPioche = [1,2,3,4,5,6,7,8,9];
				}
			}while(nbri == "present");
			console.log("nombre " + nbri + " non present dans le tab Ligne");

			return nbri;
		}


		function checkColonne(nbr){
			console.log("test check colonne du nombre " + nbr);
			nbriCol = presentDansTableau(tabColone[ligneGlobaleJ], nbr, tabPioche);
			return nbriCol;
		}

		
		function piocheNombreDuTableau(max, min, tabPioche){
			do{
				let nbrTemp = Math.floor(Math.random() * (max - min +1)) + min;
				//console.log("nombre tmp : " + nbrTemp);
				var nbrDes = tabPioche[nbrTemp-1];
			}while(nbrDes == undefined);
			console.log("nombre pioché : " + nbrDes + " parmis le tabPioche : " + tabPioche);
			return nbrDes;
		}


		function trouveIndiceNombreTabPioche(tabPioche, nbr){
			for(let i=0 ; i<tabPioche.length ; i++){
				if(nbr === tabPioche[i]){
					let indiceASuppr = i;
					return i;
				}
			}
		}


		function presentDansTableau(tabOuChercher, nbr, tabPioche){
			for(let i=0 ; i<tabOuChercher.length ; i++){
				console.log("est ce que le nombre " + nbr + " est present à l'indice " +i + " dans le tableau " + tabOuChercher + " : " + tabOuChercher[i]);
				if(tabOuChercher[i] === nbr){
					var indiceOuNombrePresent = trouveIndiceNombreTabPioche(tabPioche, nbr);
					console.log("Le nombre est présent à l'indice " +indiceOuNombrePresent + " (" + (indiceOuNombrePresent+1) +"pos) on le supprime du tabPioche " + tabPioche);
					tabPioche.splice(indiceOuNombrePresent,1);
					if(tabPioche.length < 2){
						tabPioche = [1,2,3,4,5,6,7,8,9];
					}
					console.log("tabPioche actuel : " +tabPioche);
					return "present";
					break;

				} else if(undefined === tabOuChercher[i]){
					return nbr;
					break;
				}
			}
			if(!indiceOuNombrePresent){
				return nbr;
			}
		}

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !