diff --git a/Main$2.class b/Main$2.class deleted file mode 100644 index b37841e..0000000 Binary files a/Main$2.class and /dev/null differ diff --git a/Main$3.class b/Main$3.class deleted file mode 100644 index 39cf51e..0000000 Binary files a/Main$3.class and /dev/null differ diff --git a/Main$4.class b/Main$4.class deleted file mode 100644 index 2a54235..0000000 Binary files a/Main$4.class and /dev/null differ diff --git a/SudokuGenerator.java b/SudokuGenerator.java new file mode 100644 index 0000000..6ffa151 --- /dev/null +++ b/SudokuGenerator.java @@ -0,0 +1,114 @@ +import javax.swing.*; +import java.io.*; + +public class SudokuGenerator { + public static int[][] generateGrid() { + // grille par défaut + int[][] grid = { + {0, 0, 0, 9, 0, 5, 0, 0, 4}, + {5, 0, 3, 0, 0, 4, 0, 8, 7}, + {0, 0, 0, 7, 0, 0, 6, 0, 3}, + {9, 0, 0, 0, 3, 4, 0, 8, 0}, + {0, 4, 0, 0, 1, 0, 0, 7, 0}, + {0, 2, 0, 5, 7, 0, 0, 0, 6}, + {4, 0, 9, 0, 0, 2, 0, 0, 0}, + {6, 0, 7, 9, 0, 3, 0, 2, 1}, + {2, 0, 0, 6, 5, 0, 0, 0, 0} + }; + + return grid; + } + + public static int[][] readGridFromFile() { + int[][] grid = new int[9][9]; + JFileChooser fileChooser = new JFileChooser(); + int result = fileChooser.showOpenDialog(null); + if (result == JFileChooser.APPROVE_OPTION) { + File selectedFile = fileChooser.getSelectedFile(); + try (BufferedReader reader = new BufferedReader(new FileReader(selectedFile))) { + for (int i = 0; i < 9; i++) { + String line = reader.readLine(); + // Vérifier la longueur de la ligne lue + if (line.length() != 9) { + JOptionPane.showMessageDialog(null, "Invalid file format. Please select a file with correct Sudoku grid format."); + return generateGrid(); // Charger la grille par défaut en cas d'erreur + } + for (int j = 0; j < 9; j++) { + char ch = line.charAt(j); + if (ch >= '1' && ch <= '9') { + grid[i][j] = Character.getNumericValue(ch); + } else { + grid[i][j] = 0; + } + } + } + if (!isGridValid(grid)) { + JOptionPane.showMessageDialog(null, "Invalid Sudoku grid. Loading default grid."); + return generateGrid(); // Charger la grille par défaut en cas de grille invalide + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return grid; + } + + // Méthode pour vérifier si la grille est valide + private static boolean isGridValid(int[][] grid) { + for (int i = 0; i < 9; i++) { + if (!isRowValid(grid, i) || !isColumnValid(grid, i) || !isRegionValid(grid, i)) { + return false; + } + } + return true; + } + + // Méthode pour vérifier s'il n'y a pas de chiffres en double sur une ligne donnée + private static boolean isRowValid(int[][] grid, int row) { + boolean[] seen = new boolean[10]; // Tableau pour suivre les chiffres déjà rencontrés + for (int i = 0; i < 9; i++) { + int num = grid[row][i]; + if (num != 0) { + if (seen[num]) { + return false; // Le chiffre est déjà apparu sur cette ligne + } + seen[num] = true; + } + } + return true; // Aucun chiffre en double sur la ligne + } + + // Méthode pour vérifier s'il n'y a pas de chiffres en double sur une colonne donnée + private static boolean isColumnValid(int[][] grid, int col) { + boolean[] seen = new boolean[10]; // Tableau pour suivre les chiffres déjà rencontrés + for (int i = 0; i < 9; i++) { + int num = grid[i][col]; + if (num != 0) { + if (seen[num]) { + return false; // Le chiffre est déjà apparu sur cette colonne + } + seen[num] = true; + } + } + return true; // Aucun chiffre en double sur la colonne + } + + // Méthode pour vérifier s'il n'y a pas de chiffres en double dans une région donnée + private static boolean isRegionValid(int[][] grid, int region) { + int rowOffset = (region / 3) * 3; + int colOffset = (region % 3) * 3; + boolean[] seen = new boolean[10]; // Tableau pour suivre les chiffres déjà rencontrés + for (int i = rowOffset; i < rowOffset + 3; i++) { + for (int j = colOffset; j < colOffset + 3; j++) { + int num = grid[i][j]; + if (num != 0) { + if (seen[num]) { + return false; // Le chiffre est déjà apparu dans cette région + } + seen[num] = true; + } + } + } + return true; // Aucun chiffre en double dans la région + } +}