Sudoku; valider un quadran 3x3
Résolu
Rashlack
-
Hydr0s Messages postés 1678 Date d'inscription Statut Membre Dernière intervention -
Hydr0s Messages postés 1678 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai beau me creuser la tête, mais je n'arrive pas à trouver la solution; comment valider un carré 3x3 dans un sudoku. Je ne veux pas vérifier toute la grille, mais seulement le carré dans lequel je viens de placer un chiffre.
ma méthode doit absolument utiliser commencé ainsi:
j'avais commencé par faire ceci:
Code :
cependant comme vous pouvez le constater, peut importe la ligne ou la colonne, on vérifie toujours le premier carré soit les ligne et colonne de 0 à 2. Alors si j'ai entré un chiffre dans la colonne 5, ca ne fonctionne pas du tout.
Des idées?
Je me doute bien que je dois utiliser mon i et mon j quelque part dans ma formule pour avoir la bonne ligne et la bonne colonne, c'est justement là que je bloque.
Par exemple si je place un chiffre dans la case (4,8) ma méthode dois vérifier les ligne 4,5 et 6, puis vérifier les colonnes 7, 8 et 9. Et éventuellement avoir vérifier les 9 case de ce petit carré 3x3.
Merci
J'ai beau me creuser la tête, mais je n'arrive pas à trouver la solution; comment valider un carré 3x3 dans un sudoku. Je ne veux pas vérifier toute la grille, mais seulement le carré dans lequel je viens de placer un chiffre.
ma méthode doit absolument utiliser commencé ainsi:
public boolean estDansLeBloc (int _valeur, int _ligne, int _colonne)
j'avais commencé par faire ceci:
Code :
public boolean estDansLeBloc (int _valeur, int _ligne, int _colonne){
//for (int i = 0; i < 3 ; i++) {
for (int j = 0; j < 3; j++) {
if (_valeur == board[(_ligne - 1 + 3) / 3][(_colonne + 3) / 3]) {
return false;
}
}
return true
cependant comme vous pouvez le constater, peut importe la ligne ou la colonne, on vérifie toujours le premier carré soit les ligne et colonne de 0 à 2. Alors si j'ai entré un chiffre dans la colonne 5, ca ne fonctionne pas du tout.
Des idées?
Je me doute bien que je dois utiliser mon i et mon j quelque part dans ma formule pour avoir la bonne ligne et la bonne colonne, c'est justement là que je bloque.
Par exemple si je place un chiffre dans la case (4,8) ma méthode dois vérifier les ligne 4,5 et 6, puis vérifier les colonnes 7, 8 et 9. Et éventuellement avoir vérifier les 9 case de ce petit carré 3x3.
Merci
A voir également:
- Sudoku; valider un quadran 3x3
- Captcha impossible à valider ✓ - Forum Mozilla Firefox
- Valider le captcha - Forum Réseaux sociaux
- Combien de temps pour valider une annonce le bon coin - Forum Réseaux sociaux
- Je ne peux pas valider mon iban sur le bon coin ✓ - Forum Réseaux sociaux
- Un problème est survenu lors de la validation de votre numéro de téléphone - Forum Gmail
3 réponses
Pas très pratique, tu te sers juste pas de la boucle :
Trust me and keep calm, I'm an engineer !
public boolean estDansLeBloc (int _valeur, int _ligne, int _colonne){ int i,j ; // En supposant que 0=<_ligne < 9 // On travaille sur des entiers (division entière) donc première ligne du bloc : int prem_li = (int) (_ligne/3) * 3; // Première colonne du bloc : int prem_col = (int) (_colonne /3) *3; for (int i = prem_li ; i < prem_li + 3 ; i++) { for (int j = prem_col; j < prem_col +3 ; j++) { if (_valeur == board[i][j]) { return false; } } return true ; }
Trust me and keep calm, I'm an engineer !
Salut,
Il manque des variables dans la ligne
Il manque des variables dans la ligne
board[(_ligne - 1 + 3) / 3][(_colonne + 3) / 3]: les numéros ne changent pas...
Finalement j'ai trouvé une une méthode, ce n'est peut-être pas la plus simple, mais elle fonctionne...
alors voici, si jamais ça peut aider quelqu'un d'autre:
Merci
alors voici, si jamais ça peut aider quelqu'un d'autre:
public boolean estDansLeBloc (int _valeur, int _ligne, int _colonne) {
int y = 1;
_ligne = (_ligne + 3) / 3;
//}
if (_ligne == 2) {
_ligne = 4;
}
if (_ligne == 3) {
_ligne = 7;
}
_colonne = (_colonne + 3) / 3;
if (_colonne == 2) {
_colonne = 4;
y = 4;
}
if (_colonne == 3) {
_colonne = 7;
y = 7;
}
for (int i = 0; i < 3 ; i++) {
for (int j = 0; j < 3; j++) {
if (board[_ligne-1][y-1] == _valeur) {
return false;
}
y++;
}
y = _colonne;
_ligne++;
}
return true;
}
Merci