Bonjour,
J'ai commencé un cours en programmation Java par correspondance, j'ai de la difficulté à commencer, vous pouvez m'éclairer S.V.P.
Je dois élaborer les algorithmes des trois niveaux de difficultés (débutant, moyen et expert) de résolution de sudoku.
Et écrire le pseudo code de la technique de résolution niveau expert.
Par quoi je dois commencer
Merci de votre aide
Bonsoir à tous, voici ce par quoi j'ai commencé suis-je vers une bonne solution???
Algorithmes de résolution
Débutant
------------------
|. . .| 7.1 |. . .|
|1. . |. . .|. . .|
|.9 5 |. 3 8|. . .|
------------------
| 9 8.|. . . |. . 6|
|. . .| 6 4 7|8 . .|
|. . .|. . . | . .2|
-----------------
|. 1 .|. 5 4 |6 . .|
|6 7 .|8 . . |9 . .|
|. . .|2 . . |. . 1|
------------------
Moyen
---------------
|. 6 8|. . .| 4 .5 |
|. . .|. . .|. . . |
|7 . .|. 1 4|. . 9 |
-----------------
|. . .|. . 1| 7 . .|
|. 1 .|6. . | 2 . .|
|6 . .|. . .| 3 . .|
------------------
|. . .|. 3 .| . 2 .|
|.3 5 |. 2. | . . 6|
|. 4 .|. . 5| . . .|
------------------
Expert
---------------
|38 . |. . 2|. 4 .|
|7 . . |8 . 1|9 . .|
| . . .|5 . .|. . .|
-------------------
|1 2 . |6 4 .|. 8. |
| . . .|. . .|. 1 .|
| . . .|1 . 3|7 . .|
-------------------
|. . . | . ..|4 . .|
|. 1 5 |. . .|6 . .|
|8 . 7 | . . |. . 9|
--------------------
Résolution expert
|3 8 6 | 7 9 2| 5 4 1|
|7 5 4 | 8 3 1| 9 6 2|
|2 9 1 | 5 6 4| 8 7 3|
--------------------
|1 2 9 | 6 4 7| 3 8 5|
|6 7 3 | 9 8 5| 2 1 4|
|5 4 8 | 1 2 3| 7 9 6|
--------------------
|9 6 2 | 3 1 8| 4 5 7|
|4 1 5 | 2 7 9| 6 3 8|
|8 3 7 | 4 5 6| 1 2 9|
------------------
Pseudo code niveau expert ?
J'ai encore besoin d'aide pour le reste...si le début est bon!
Merci
Salut !
Je comprends pas bien ce que tu dois faire en fait.
En fait j'avais l'impression de comprendre jusqu'à ton deuxième post
As-tu une structure de données pour le sudoku ? As-tu une base pour ton code ?
Je m'y connais pas trop en Sudoku, il y'a une autre différence entre les niveaux (facile, moyen, ...) que le nombre de cases laissées vide, par exemple les techniques à utiliser ?
T'as un énoncé plus complet non ?
Bonjour,
C'est surment moi qui est dans le champ, en fait pour le moment je n'ai pas de structure de données pour le sudoku ni de base.
J'ai débuté avec ce que je pensais dans le deuxième poste , mais sans être certaine de rien.
J'ai seulement ceci comme information pour faire l'exercise:
(Je dois élaborer les algorithmes des trois niveaux de difficultés (débutant, moyen et expert) de résolution de sudoku. Et écrire le pseudo code de la technique de résolution niveau expert.)
Merci
J'ai un peu du mal à comprendre ce que tu veux faire en fait, tu parles de résolution et tu affiches des grilles, je comprends pas trop le rapport en fait …
Bonjour,
Je suis dans le meme cours que toi janou789
L'exercice nous demande de se référer à la leçon 2 où les techniques de résolutions de Sudoku sont expliquées :
Je recopie le texte pour toi ici
Les techniques de résolution par ordre croissant de difficultés (débutant, moyen, expert) de SUDOKU peuvent apparaître comme suit :
Les techniques de résolution de niveau débutant
sur une ligne : lorsqu'une ligne ne comporte plus qu'une seule case vide, cette case doit forcément contenir le seul chiffre non présent dans la ligne;
sur une colonne : lorsqu'une colonne ne comporte plus qu'une seule case vide, cette case doit forcément contenir le seul chiffre non présent dans la colonne;
dans un carré : lorsqu'un un carré ne comporte plus qu'une seule case vide, cette case doit forcément contenir le seul chiffre non présent dans le carré.
Les techniques de résolution de niveau moyen
sur un ensemble de trois : pour chaque ensemble de trois carrés alignés horizontalement ou verticalement, chaque chiffre ne doit apparaître qu'une seule fois par carré et par ligne, ou par carré et par colonne; pour chaque chiffre, cette technique doit être appliquée pour chaque ensemble horizontal de trois carrés puis pour chaque ensemble vertical de trois carrés;
sur un ensemble de trois carrés horizontaux : dans un ensemble de trois carrés alignés horizontalement, lorsque la partie d'une ligne à l'intérieur d'un carré est remplie de chiffres différents du chiffre considéré, un des deux autres carrés horizontaux contient forcément le chiffre considéré;
sur un ensemble de trois carrés verticaux : dans un ensemble de trois carrés alignés verticalement, lorsque la portion d'une colonne à l'intérieur d'un carré est remplie de chiffres différents du chiffre considéré, un des deux autres carrés verticaux contient forcément le chiffre considéré.
Les techniques de résolution de niveau expert
l'intersection : chaque case est à l'intersection d'une ligne et d'une colonne, par conséquent, chaque case vide ne peut contenir qu'un chiffre non présent dans sa ligne et dans sa colonne; cette technique doit être appliquée à chaque case vide;
la paire exclusive : lorsque deux cases vides d'une même ligne, d'une même colonne ou d'un même carré ne peuvent contenir que deux mêmes chiffres, alors les autres cases vides de cette ligne, de cette colonne ou de ce carré ne peuvent pas contenir ces deux chiffres.
Il me semble donc évident que l'algorithme doive inclure les techniques mentionnées ci-haut.
Donc ton post #2 est à côté de la plaque.
Je n'ai pas encore trouvé de solution moi-même à cet exercice.
Par contre j'espère que ce post t'aidera.
@+
Bonjour didou123 et janou789
Nous avons tous les 3 le même cours
Dans ce TP2 il me reste juste le # 4 à faire et j'ai rien trouvé encore.
Je commence aujourd'hui le TP3.
On pourrait travailler ensemble car j'ai une 4e personne de mon côté qui fait le cours aussi
Bonjour a vous deux didou123 et mjmaheux,
J'ai essayé de comprendre cette question en allant sur différent site d'information et c'est ce qui en résulte au poste 2.
Mais justement je ne suis certaine de rien et je ne comprend pas très bien cette question moi non plus , il me reste seulement moi aussi cette question #4 pour le TP2.
Très heureuse de pouvoir travaillé avec vous si vous le désirer.
Peût-être arriverons nous à comprendre!
A+
Merci
Bonjour,
Ce que je comprend du problème 4, c'est kek chose du genre pour le niveau débutant :
La grille[9][9] de sudoku est placée en variable globale */ void resolution ( ) {int ligne = 0 , colonne = 0 ; int chiffre_test = 1 ... 9) pour les tester ensuite selon la ligne, colonne et le petit carre 3x3
Ca fait-tu du sens ce que j'écris?
Est-ce qu'il y a des experts en maths/java svp qui pourraient nous assister pcq sur le net y a pas grand chose à ce sujet!!! et C un peu frustrant surtout quand le tuteur explique pas bien.
Merci mjmaheux et janou789 de votre aide
Salut
J'ai fait un code en Python pour implémenter la méthode "expert". Ça devrait être assez clair, mais n'hésitez pas à demander si vous ne comprenez pas un truc.
Bonjour,
Alors c'est un code comme j'ai fais dans mon deuxième poste excepté que je dois mettre des zéros au-lieu de points ?
Merci
Tu peux mettre des points si tu veux. L'affichage, ce n'est pas important, c'est la méthode de résolution qui l'est. :p
Mes amis, c'est un plaisir de retrouver des personnes suivant le même cours que moi.
Avez vous trouvez l'astuce pour le problème 4 du TP2 ? Je ne comprend pas très bien. Merci de m'aider....
Bonjour,
Je suis présentement inscrit au même cours que vous et moi aussi et je suis bloqué à la question 4.
Est-ce que quelqu'un peut m'aider à débuter ?
Merci
bonjour les amis,
Moi aussi, je me suis inscrite au même cours et je me suis coincée à la quatrième question du tp2,
J'ai fait tous les questions sauf la 4eme je ne sais pas d'ou commencer à vrai dire je n'ai pas arrivé meme à le comprendre malgré mes recherches sur internet mais en vain.
Je serai très reconnaissante si quelqu'un pourra m'aider?
Merci d'avance
Bonjour
Je prends comme structure un tableau à double entrée d'entier, et comme convention que 0 est un champs non renseigné dans ce tableau
l'algo de résolution facile devrait être:
--
boolean continuer = true;
int[][] sudoku; //qu'on suppose déja initialisé
while(continuer) //tant qu'on a trouvé un chiffre, on recommencer à chercher, sinon on s'arrête
{
continuer=false;
for(int i=0;i<9;i++) //ici le test sur les lignes et les colonnes
{
int nbCaseVideColonne=0;
int nbCaseVideRangee=0;
int valeurTotaleColonne=0;
int valeurTotaleRangee=0;
int valeurColonne=0;
int valeurRangee=0;
for(int j=0;j<9;j++)
{
if(sudoku[i][j]==0)
{
nbCaseVideColonne++;
valeurColonne=j;
}
if(sudoku[j][i]==0)
{
nbCaseVideRangee++;
valeurRangee++;
}
valeurTotaleColonne+=sudoku[i][j];
valeurTotaleRangee+=sudoku[j][i];
}
if(nbCaseVideColonne==1) //une seule case vide dans la colonne
{
continuer=true;
sudoku[i][valeurColonne]=45-valeurTotaleColonne; //45: somme d'une ligne complete
}
if(nbCaseVideRangee==1) //une seule case vide dans la rangée
{
continuer=true;
sudoku[valeurRangee][i]=45-valeurTotaleRangee;
}
}
for(int i=0;i<3;i++) //ici le test sur les carrés (grand carré colonne)
{
for(int j=0;j<3;j++) //grand carré rangée
{
int nbCaseVide=0;
int valeurTotale=0;
int valeurColonne=0;
int valeurrangee=0;
for(int k=0;k<3;k++) //case dans un carré
{
for(int l=0;l<3;l++} //case vesticale dans un carré
{
if(sudoku[3*i+k][3*j+l]==0)
{
nbCaseVide++;
valeurColonne=3*i+k;
valeurRangee=3*j+l;
}
valeurTotale+=sudoku[3*i+k][3*j+l];
}
}
if(nbCaseVide==1) //une seule case vide dans le carré
{
continuer=true;
sudoku[valeurColonne][valeurRangee]=45-valeurTotaleColonne;
}
}
}
}
Ca doit etre un truc semblable à cela.
Note: j'ai mélangé le test sur les colonnes et rangées pour ne faire qu'une seule fois la double boucle de 1 à 9
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :