From f1298238a9a4cb14e5934956085a40afa50b0165 Mon Sep 17 00:00:00 2001 From: dick Date: Tue, 23 Apr 2024 14:43:06 +0200 Subject: [PATCH] backupOuvertureFichier --- Main$2.class | Bin 855 -> 0 bytes Main$3.class | Bin 606 -> 0 bytes Main$4.class | Bin 1293 -> 0 bytes SudokuGenerator.java | 114 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 114 insertions(+) delete mode 100644 Main$2.class delete mode 100644 Main$3.class delete mode 100644 Main$4.class create mode 100644 SudokuGenerator.java diff --git a/Main$2.class b/Main$2.class deleted file mode 100644 index b37841e93f8813d43561669844837b9e32211e25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 855 zcmZuwT~8B16g|^Iw_TP}ffi7aiWRp7yA=^d(1Z{mn4%;#JlLn{b}WngLH48IKeCS+ zMdO1nee*{d?`%mF^kMhToZLD0oO@?}{`&p{zzUvbkim=!71veVz)cmixRt>iifPE{=L}Q& z{}RfF3`1L9n+V40mMdOHPD}W&dCQgvH$%&F4}|~L^BvJZB7{4_K~SGb|E8K-Q^ z^|~Ze8(!p_V#ksMnSE}#RjG@}wq4Wq0ur|`!XvM(psb;SMGYE8HDs}*;J${cjE069 z9w=DW@DM8u3%kB$+oITr+TOdU*y;D&e$VgsM3HxeSqvi6?0*QV3La@##bXUmutwHp z_0lqfw&%LS-?DiSh=3s{1sOJ{Hoa;c3o~SxjiIZq>Q)d6I!P^(R1};z6!d1?%K=9t z^vP6gKB>zVjQ=|b2BmEUCtg5J$?Zx`9*W2x_+c3BNJ#htn+(Hxx!K&iq_pv#v^We& zFCxA9L4C_J4ybrY5(IZ>+7q#l%P`eGkx4cg$Y0DaHvgA!m7Asrf>Nzkqja5$zbPNm z3^H^h8AiZzIXNb}s|otD7$Y=Ct9jZ>M6E1-0jqpP;v?-CuF*e55i~z)2qrG_Hz_+w z=uG7^*g2BlsI#9iJf1p-vP8S|pW_7#Q{pNV8s-Srh++fNct*!32~Qx80>vSE7SmXu Ll@ywx2&8`l4!XvE diff --git a/Main$3.class b/Main$3.class deleted file mode 100644 index 39cf51e121b52c54f15a2150d149946e7cc9eefe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 606 zcmZuuYikoh6g{(v*>v3|QEPqH`iM47ixCvRR0Jul1U9W$DQG`UHj{M9b{1y0@plQW z1qFYAKT13|6jboT+~=G#=g$54>)Q_iFR(I)5VyqKj!?&)5O*U~u_WeRh~*FuLOfK6 zraEg+yv;JBP&qj0E3~9kXj@qG_M*{9_WsH@6l$-mv*l}rg$^Yn~w_RQ3{viD|oWlQ1>A&d6%6Q7!G zD+F@`ZQWBrkZjAPSzcH-8JO}gABA`nqm9QgB3zCUV?IU$PZZ|g8_{cZW((t`*o<)% z*EopKwVx}*edmnd%ydzhf}b$clxa8V?GBGjS}H94S7u_1(h$j+g-RwIk8OHr{5H#_ zr{qxn=#xxR>8$SK8JAKACqd9^iBf=`V!610hvL|6Fp>KBA&Y-&MX9&9IsC;2b z;R4Exhd1HH| diff --git a/Main$4.class b/Main$4.class deleted file mode 100644 index 2a54235686b809c47ed5cc9034bf3f49f5ed86c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1293 zcmaJ=ZBrXn6n-{Iv&p&z3P^pSx~;TL!b^NXQ9)avfM8N6p&bk3hs)*yx83Y!_U;D# zBhL5>)Q`>xWpu_b{np>)I6gPYXnYwz>^bM2J?FXSp7Wd+zyJIzfO#~E7(>a3vJn*r zsc)g$n0P;RIg`{UFk; zzAlrKsA=Pli@R8MF@dWtUcsv_Uc>7yCb42;)x|xm*;se6fzNDgy4b>sg{uav8VL5F zk;DXBNmbC4u?4T!MlXK;gN}k!dZHtJPp7{B{Cn-m&~x!QYDU!AeXqq~C@uXcY)b82 zcX1!vHg;S*z^;WGo2_=FwPIVmrtD#+%~*PY@OpEcWADxDrsgfUn_(#9)j()1HNpR? zar^Lz^b-r$x~_kAv8Hq)naPnDC^LYgBjumSc%AMfW(RFE)_v3HY{|$0?8ev3ZdoXV zB8>KwAqiu)*!5k>4s>Kn;Gvkdsl1Ukqo*m0Hh|@Q7ClHdUKGnVYhbN;(QeC-!=LRB zf1uloSx%i<70T|NC7?qTa|z=F-0d3D6zxpA_G2cgZM1KJ1DR^VGmLrHAYN%x{=ip!dNAE-hDnf^~uXw^-t7 zAvclp+Lq6^i3;zOBc+9QY=f)gh2Vdd_qike;!$z)vEZ*t@OyMSV4!3X{OSBx; JJw^=_{s1?nItl;) 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 + } +}