SudokuFX
Loading...
Searching...
No Matches
fr.softsf.sudokufx.utils.sudoku.GridMaster Class Reference

Provides essential functionalities for generating and solving Sudoku puzzles. More...

+ Inheritance diagram for fr.softsf.sudokufx.utils.sudoku.GridMaster:
+ Collaboration diagram for fr.softsf.sudokufx.utils.sudoku.GridMaster:

Public Member Functions

 GridMaster (SecureRandomGenerator secureRandomGenerator)
 Générateur de grilles de Sudoku.
 
final int[][] creerLesGrilles (final int niveau)
 Crée les grilles de Sudoku (résolue et à résoudre) en fonction du niveau de difficulté.
 
final int resoudreLaGrille (final int[] grille)
 Génère une grille de Sudoku complète à partir d'une grille vide ou partiellement remplie.
 

Package Functions

void setAverageImpossiblePossibilitiesForTests ()
 Définit une possibilité moyenne inaccessible, pour générer une grille par défaut après une seconde.
 
void setDifficultImpossiblePossibilitiesForTests ()
 Définit une possibilité difficile inaccessible, pour générer une grille par défaut après une seconde.
 
void setEasyImpossiblePossibilitiesForTests ()
 Définit une possibilité facile inaccessible, pour générer une grille par défaut après une seconde.
 

Private Member Functions

void cacherLesCases (int nombreDeCasesACacher, final int[] grilleAResoudre)
 Cache un nombre spécifié de cases dans la grille à résoudre en les remplaçant par zéro.
 
int choisirValeurAleatoire (final int possibilitesDeLaCase)
 Choisit une valeur aléatoire parmi les possibilités données.
 
long dureeEnMs ()
 Calcule la durée de temps écoulé entre la dernière et la nouvelle demande de grille en millisecondes.
 
int genererLaGrilleAResoudre (final int niveau, final int[] grilleResolue, final int[] grilleAResoudre)
 Génère une grille de Sudoku à résoudre en masquant des cases selon le niveau de difficulté.
 
int getPossibilitesGrilleAresoudreDifficile (int[] grilleResolue, int[] grilleAResoudre)
 Génère une grille de Sudoku de niveau difficile (sinon une grille par défaut est retournée après une seconde).
 
int getPossibilitesGrilleAResoudreFacile (int[] grilleResolue, int[] grilleAResoudre)
 Génère une grille de Sudoku de niveau facile (sinon une grille par défaut est retournée après une seconde).
 
int getPossibilitesGrilleAResoudreMoyenne (int[] grilleResolue, int[] grilleAResoudre)
 Génère une grille de Sudoku de niveau moyen (sinon une grille par défaut est retournée après une seconde).
 
int getPossibilitesGrilleWhileNok (int[] grilleResolue, int[] grilleAResoudre, int nombreDeCasesACacher)
 Masque des cases dans la grille et calcule la somme des possibilités restantes.
 
int nombreAleatoire (final int minInclus, final int maxExclus)
 Génère un nombre entier aléatoire dans un intervalle spécifié.
 
boolean remplirLaGrille (final int[] grille, final int[] possibilites)
 Remplit récursivement la grille Sudoku (backtracking).
 

Static Private Member Functions

static int compterBits (final int x)
 Compte le nombre de bits à 1 dans un entier.
 
static void eliminerPossibilite (final int[] possibilites, final int ligne, final int colonne, final int valeur)
 Élimine la valeur des possibilités des cases alentours.
 
static int[] getPossibilites (final int[] grille)
 Calcule les possibilités pour chaque case de la grille de Sudoku.
 
static void initialiserPossibilites (final int[] grille, final int[] possibilites)
 Initialise le tableau des possibilités pour chaque case.
 
static int laCaseVideAvecLeMoinsDePossibilites (final int[] grille, final int[] possibilites)
 Trouve la case vide avec le moins de possibilités.
 
static int sommeDesPossibilitesDeLaGrille (final int[] possibilites)
 Calcule la somme des possibilités de toutes les cases de la grille de Sudoku.
 
static int verifierLaCoherenceEntreLaGrilleEtLesPossibilites (final int[] grille, final int[] possibilites)
 Vérifie la cohérence entre la grille et les possibilités.
 

Private Attributes

LocalDateTime derniereDemande = LocalDateTime.now()
 
int moyenMaxPossibilites = 28266
 
int moyenMinPossibilites = 16533
 
final SecureRandomGenerator secureRandomGenerator
 

Static Private Attributes

static final int DIFFICILE_MAX_CACHEES = 59
 
static final int DIFFICILE_MOY_CACHEES = (MOYEN_MAX_CACHEES + DIFFICILE_MAX_CACHEES) / 2
 
static final int DIMENSION = ORDRE * ORDRE
 
static final int FACILE_MIN_CACHEES = 35
 
static final int FACILE_MOY_CACHEES = (FACILE_MIN_CACHEES + MOYEN_MIN_CACHEES) / 2
 
static final int MOYEN_MAX_CACHEES = 50
 
static final int MOYEN_MIN_CACHEES = 45
 
static final int MOYEN_MOY_CACHEES = (MOYEN_MIN_CACHEES + MOYEN_MAX_CACHEES) / 2
 
static final int NOMBRE_CASES = DIMENSION * DIMENSION
 
static final int ORDRE = 3
 

Detailed Description

Provides essential functionalities for generating and solving Sudoku puzzles.

Constructor & Destructor Documentation

◆ GridMaster()

fr.softsf.sudokufx.utils.sudoku.GridMaster.GridMaster ( SecureRandomGenerator secureRandomGenerator)

Générateur de grilles de Sudoku.

Member Function Documentation

◆ cacherLesCases()

void fr.softsf.sudokufx.utils.sudoku.GridMaster.cacherLesCases ( int nombreDeCasesACacher,
final int[] grilleAResoudre )
private

Cache un nombre spécifié de cases dans la grille à résoudre en les remplaçant par zéro.

Parameters
nombreDeCasesACacherLe nombre de cases à cacher dans la grille (au maximum 81 cases).
grilleAResoudreLe tableau représentant la grille à résoudre, où les cases seront cachées.

◆ choisirValeurAleatoire()

int fr.softsf.sudokufx.utils.sudoku.GridMaster.choisirValeurAleatoire ( final int possibilitesDeLaCase)
private

Choisit une valeur aléatoire parmi les possibilités données.

Parameters
possibilitesDeLaCaseEntier représentant les valeurs possibles.
Returns
Une valeur choisie aléatoirement.
+ Here is the call graph for this function:

◆ compterBits()

static int fr.softsf.sudokufx.utils.sudoku.GridMaster.compterBits ( final int x)
staticprivate

Compte le nombre de bits à 1 dans un entier.

Parameters
xEntier à analyser.
Returns
Le nombre de bits à 1.

◆ creerLesGrilles()

final int[][] fr.softsf.sudokufx.utils.sudoku.GridMaster.creerLesGrilles ( final int niveau)

Crée les grilles de Sudoku (résolue et à résoudre) en fonction du niveau de difficulté.

Facile : 35-45 cases cachées, possibilités théoriques de 0 à 13797, et pratique de 4800 à 16533 Moyen : 45-39 cases cachées, possibilités théoriques de 13797 à 27594, et pratique de 16533 à 28266 Difficile : 49 à 59 cases cachées, possibilités théoriques de 27594 à 41391, et pratique de 28266 à 40000

Parameters
niveauLe niveau de difficulté (1 : facile, 2 : moyen, 3 : difficile).
Returns
Un tableau à trois dimensions contenant : La grille résolue. La grille à résoudre avec les cases cachées. Le pourcentage de possibilités de la grille à résoudre (la plage retenue va de 4800 0% à 40000 100%).

Implements fr.softsf.sudokufx.interfaces.IGridMaster.

+ Here is the call graph for this function:

◆ dureeEnMs()

long fr.softsf.sudokufx.utils.sudoku.GridMaster.dureeEnMs ( )
private

Calcule la durée de temps écoulé entre la dernière et la nouvelle demande de grille en millisecondes.

Returns
Durée en millisecondes

◆ eliminerPossibilite()

static void fr.softsf.sudokufx.utils.sudoku.GridMaster.eliminerPossibilite ( final int[] possibilites,
final int ligne,
final int colonne,
final int valeur )
staticprivate

Élimine la valeur des possibilités des cases alentours.

Parameters
possibilitesTableau des possibilités.
ligneLigne de la case.
colonneColonne de la case.
valeurValeur à éliminer.

◆ genererLaGrilleAResoudre()

int fr.softsf.sudokufx.utils.sudoku.GridMaster.genererLaGrilleAResoudre ( final int niveau,
final int[] grilleResolue,
final int[] grilleAResoudre )
private

Génère une grille de Sudoku à résoudre en masquant des cases selon le niveau de difficulté.

La stratégie de génération ajuste le nombre de cases masquées en fonction du temps écoulé depuis la dernière génération. Si une nouvelle grille est demandée très rapidement (moins de 500ms), le nombre de cases masquées est intentionnellement ajusté pour standardiser la grille.

Parameters
niveauLe niveau de difficulté : 1 (et autres valeurs) : facile, 2 : moyen, 3 : difficile).
grilleResolueLa grille résolue à partir de laquelle les cases seront cachées.
grilleAResoudreLa grille à résoudre, avec ses cases masquées à 0. IMPORTANT : Ce tableau est modifié directement par la fonction.
Returns
La somme du nombre de possibilités pour chaque case non résolue dans la grille à résoudre. @implNote La méthode utilise une approche itérative pour masquer des cases et évaluer les possibilités de la grille résultante jusqu'à ce qu'elle corresponde au niveau de difficulté souhaité. Elle met également à jour l'horodatage interne derniereDemande.
+ Here is the call graph for this function:

◆ getPossibilites()

static int[] fr.softsf.sudokufx.utils.sudoku.GridMaster.getPossibilites ( final int[] grille)
staticprivate

Calcule les possibilités pour chaque case de la grille de Sudoku.

Parameters
grilleLa grille de Sudoku actuelle.
Returns
Tableau des possibilités par case (511 = toutes possibilités).
+ Here is the call graph for this function:

◆ getPossibilitesGrilleAresoudreDifficile()

int fr.softsf.sudokufx.utils.sudoku.GridMaster.getPossibilitesGrilleAresoudreDifficile ( int[] grilleResolue,
int[] grilleAResoudre )
private

Génère une grille de Sudoku de niveau difficile (sinon une grille par défaut est retournée après une seconde).

Parameters
grilleResolueLa grille résolue à partir de laquelle les cases seront cachées.
grilleAResoudreLa grille à résoudre, avec ses cases cachées (valeur à zéro).
Returns
La somme des possibilités dans la grille à résoudre (somme des possibilités restantes).
+ Here is the call graph for this function:

◆ getPossibilitesGrilleAResoudreFacile()

int fr.softsf.sudokufx.utils.sudoku.GridMaster.getPossibilitesGrilleAResoudreFacile ( int[] grilleResolue,
int[] grilleAResoudre )
private

Génère une grille de Sudoku de niveau facile (sinon une grille par défaut est retournée après une seconde).

Parameters
grilleResolueLa grille résolue à partir de laquelle les cases seront cachées.
grilleAResoudreLa grille à résoudre, avec ses cases cachées (valeur à zéro).
Returns
La somme des possibilités dans la grille à résoudre (somme des possibilités restantes).
+ Here is the call graph for this function:

◆ getPossibilitesGrilleAResoudreMoyenne()

int fr.softsf.sudokufx.utils.sudoku.GridMaster.getPossibilitesGrilleAResoudreMoyenne ( int[] grilleResolue,
int[] grilleAResoudre )
private

Génère une grille de Sudoku de niveau moyen (sinon une grille par défaut est retournée après une seconde).

Parameters
grilleResolueLa grille résolue à partir de laquelle les cases seront cachées.
grilleAResoudreLa grille à résoudre, avec ses cases cachées (valeur à zéro).
Returns
La somme des possibilités dans la grille à résoudre (somme des possibilités restantes).
+ Here is the call graph for this function:

◆ getPossibilitesGrilleWhileNok()

int fr.softsf.sudokufx.utils.sudoku.GridMaster.getPossibilitesGrilleWhileNok ( int[] grilleResolue,
int[] grilleAResoudre,
int nombreDeCasesACacher )
private

Masque des cases dans la grille et calcule la somme des possibilités restantes.

Copie la grille résolue, masque un nombre de cases spécifié, puis calcule la somme des possibilités pour la grille à résoudre.

Parameters
grilleResolueLa grille de Sudoku résolue (source).
grilleAResoudreLa grille de Sudoku à résoudre (destination), MODIFIÉE par la méthode.
nombreDeCasesACacherNombre de cases à masquer.
Returns
La somme des possibilités après masquage des cases. @implNote Méthode utilisée dans une boucle pour ajuster la difficulté de la grille en fonction des possibilités.
+ Here is the call graph for this function:

◆ initialiserPossibilites()

static void fr.softsf.sudokufx.utils.sudoku.GridMaster.initialiserPossibilites ( final int[] grille,
final int[] possibilites )
staticprivate

Initialise le tableau des possibilités pour chaque case.

Parameters
grilleGrille Sudoku actuelle.
possibilitesTableau à initialiser avec les possibilités.
+ Here is the call graph for this function:

◆ laCaseVideAvecLeMoinsDePossibilites()

static int fr.softsf.sudokufx.utils.sudoku.GridMaster.laCaseVideAvecLeMoinsDePossibilites ( final int[] grille,
final int[] possibilites )
staticprivate

Trouve la case vide avec le moins de possibilités.

Parameters
grilleGrille Sudoku actuelle.
possibilitesTableau des possibilités.
Returns
L'index de la case trouvée, ou -1 si la grille est complète.
+ Here is the call graph for this function:

◆ nombreAleatoire()

int fr.softsf.sudokufx.utils.sudoku.GridMaster.nombreAleatoire ( final int minInclus,
final int maxExclus )
private

Génère un nombre entier aléatoire dans un intervalle spécifié.

Parameters
minInclusLa valeur minimale incluse du nombre aléatoire à générer.
maxExclusLa valeur maximale exclue du nombre aléatoire à générer.
Returns
Un entier aléatoire compris entre minInclus (inclus) et maxExclus (exclus).

◆ remplirLaGrille()

boolean fr.softsf.sudokufx.utils.sudoku.GridMaster.remplirLaGrille ( final int[] grille,
final int[] possibilites )
private

Remplit récursivement la grille Sudoku (backtracking).

Parameters
grilleGrille Sudoku à remplir.
possibilitesTableau des possibilités pour chaque case.
Returns
true si la grille est remplie avec succès, false sinon.
+ Here is the call graph for this function:

◆ resoudreLaGrille()

final int fr.softsf.sudokufx.utils.sudoku.GridMaster.resoudreLaGrille ( final int[] grille)

Génère une grille de Sudoku complète à partir d'une grille vide ou partiellement remplie.

Processus :

  1. Initialise ou utilise une grille existante.
  2. Prépare les possibilités pour chaque case.
  3. Remplit récursivement la grille : Trouve la case avec le moins d'options. Teste chaque valeur possible. Met à jour les possibilités des cases alentours. Continue jusqu'à ce que la grille soit complète ou pas.
Parameters
grilleTableau représentant la grille de Sudoku initiale (peut être partiellement remplie).
Returns
0 si la grille est générée avec succès et cohérente, sinon -1.

Implements fr.softsf.sudokufx.interfaces.IGridMaster.

+ Here is the call graph for this function:

◆ setAverageImpossiblePossibilitiesForTests()

void fr.softsf.sudokufx.utils.sudoku.GridMaster.setAverageImpossiblePossibilitiesForTests ( )
package

Définit une possibilité moyenne inaccessible, pour générer une grille par défaut après une seconde.

Cette méthode est uniquement utilisée pour les tests.

◆ setDifficultImpossiblePossibilitiesForTests()

void fr.softsf.sudokufx.utils.sudoku.GridMaster.setDifficultImpossiblePossibilitiesForTests ( )
package

Définit une possibilité difficile inaccessible, pour générer une grille par défaut après une seconde.

Cette méthode est uniquement utilisée pour les tests.

◆ setEasyImpossiblePossibilitiesForTests()

void fr.softsf.sudokufx.utils.sudoku.GridMaster.setEasyImpossiblePossibilitiesForTests ( )
package

Définit une possibilité facile inaccessible, pour générer une grille par défaut après une seconde.

Cette méthode est uniquement utilisée pour les tests.

◆ sommeDesPossibilitesDeLaGrille()

static int fr.softsf.sudokufx.utils.sudoku.GridMaster.sommeDesPossibilitesDeLaGrille ( final int[] possibilites)
staticprivate

Calcule la somme des possibilités de toutes les cases de la grille de Sudoku.

Parameters
possibilitesTableau des possibilités par case (511 = toutes possibilités).
Returns
La somme des possibilités.

◆ verifierLaCoherenceEntreLaGrilleEtLesPossibilites()

static int fr.softsf.sudokufx.utils.sudoku.GridMaster.verifierLaCoherenceEntreLaGrilleEtLesPossibilites ( final int[] grille,
final int[] possibilites )
staticprivate

Vérifie la cohérence entre la grille et les possibilités.

Cette méthode s'assure que chaque valeur non nulle dans la grille est bien présente dans les possibilités correspondantes.

Parameters
grilleLa grille Sudoku actuelle.
possibilitesLe tableau des possibilités pour chaque case.
Returns
0 si la vérification est réussie, -1 si une incohérence est détectée.

Member Data Documentation

◆ derniereDemande

LocalDateTime fr.softsf.sudokufx.utils.sudoku.GridMaster.derniereDemande = LocalDateTime.now()
private

◆ DIFFICILE_MAX_CACHEES

final int fr.softsf.sudokufx.utils.sudoku.GridMaster.DIFFICILE_MAX_CACHEES = 59
staticprivate

◆ DIFFICILE_MOY_CACHEES

final int fr.softsf.sudokufx.utils.sudoku.GridMaster.DIFFICILE_MOY_CACHEES = (MOYEN_MAX_CACHEES + DIFFICILE_MAX_CACHEES) / 2
staticprivate

◆ DIMENSION

final int fr.softsf.sudokufx.utils.sudoku.GridMaster.DIMENSION = ORDRE * ORDRE
staticprivate

◆ FACILE_MIN_CACHEES

final int fr.softsf.sudokufx.utils.sudoku.GridMaster.FACILE_MIN_CACHEES = 35
staticprivate

◆ FACILE_MOY_CACHEES

final int fr.softsf.sudokufx.utils.sudoku.GridMaster.FACILE_MOY_CACHEES = (FACILE_MIN_CACHEES + MOYEN_MIN_CACHEES) / 2
staticprivate

◆ MOYEN_MAX_CACHEES

final int fr.softsf.sudokufx.utils.sudoku.GridMaster.MOYEN_MAX_CACHEES = 50
staticprivate

◆ MOYEN_MIN_CACHEES

final int fr.softsf.sudokufx.utils.sudoku.GridMaster.MOYEN_MIN_CACHEES = 45
staticprivate

◆ MOYEN_MOY_CACHEES

final int fr.softsf.sudokufx.utils.sudoku.GridMaster.MOYEN_MOY_CACHEES = (MOYEN_MIN_CACHEES + MOYEN_MAX_CACHEES) / 2
staticprivate

◆ moyenMaxPossibilites

int fr.softsf.sudokufx.utils.sudoku.GridMaster.moyenMaxPossibilites = 28266
private

◆ moyenMinPossibilites

int fr.softsf.sudokufx.utils.sudoku.GridMaster.moyenMinPossibilites = 16533
private

◆ NOMBRE_CASES

final int fr.softsf.sudokufx.utils.sudoku.GridMaster.NOMBRE_CASES = DIMENSION * DIMENSION
staticprivate

◆ ORDRE

final int fr.softsf.sudokufx.utils.sudoku.GridMaster.ORDRE = 3
staticprivate

◆ secureRandomGenerator

final SecureRandomGenerator fr.softsf.sudokufx.utils.sudoku.GridMaster.secureRandomGenerator
private

The documentation for this class was generated from the following file: