Guest User

Untitled

a guest
Oct 22nd, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.32 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Random;
  3.  
  4. public class sudoku {
  5.  
  6. int randomNumber1;
  7. int randomNumber2;
  8. int randomNumber3;
  9. boolean[] linjacheck = {false, false, false, false, false, false, false, false, false};
  10. boolean[] finalcheck = {false,false,false};
  11. Random r = new Random();
  12. ArrayList<Integer> values = new ArrayList<Integer>();
  13. int[][] rivix = new int[9][9];
  14.  
  15. public void startti(){
  16. for (int i = 0; i < 9; i++) {
  17. rivix[i] = new int[]{1,2,3,4,5,6,7,8,9};
  18. }
  19. }
  20.  
  21. /**Randomize the board. **/
  22. public int[][] sekoitus (int[][] rivi){
  23.  
  24. for (int i = 0; i < 300; i++) {
  25.  
  26. randomNumber1 = r.nextInt(9);
  27.  
  28. randomNumber2 = r.nextInt(9);
  29. randomNumber3 = r.nextInt(9);
  30.  
  31. int swap1 = rivi[randomNumber1][randomNumber2];
  32. int swap2 = rivi[randomNumber1][randomNumber3];
  33. if(!linjacheck[randomNumber2] && !linjacheck[randomNumber3]){
  34. rivi[randomNumber1][randomNumber2] = swap2;
  35. rivi[randomNumber1][randomNumber3] = swap1;
  36. }
  37.  
  38. }
  39. return rivi;
  40.  
  41. }
  42. /**print out the board**/
  43. public void poyta (int[][] rivi){
  44.  
  45. System.out.println ("----------------------------");
  46. for (int i = 0; i < 9; i++) {
  47. for (int a = 0; a < 9; a++) {
  48. System.out.print(rivi[i][a]);
  49. if((a+1)%3==0 && a!=0)
  50. System.out.print(" ");
  51. }
  52. System.out.println("");
  53.  
  54. }
  55.  
  56. System.out.println("\n");
  57.  
  58. }
  59. /**check vertical lines one by one**/
  60. public boolean checktable (int[][] rivi){
  61. int[][] riviy = new int[9][9];
  62.  
  63. for (int i = 0; i < 9; i++) {
  64. for (int a = 0; a < 9; a++) {
  65. riviy[i][a] = rivi[a][i];
  66. }
  67. }
  68.  
  69. for (int i=0; i < 9; i++){
  70. int check = 0;
  71.  
  72. for (int a = 1; a < 10; a++) {
  73. if (AC(riviy[i], a))
  74. check++;
  75. }
  76. if (check==9){
  77. linjacheck[i]=true;
  78. }else
  79. linjacheck[i]=false;
  80.  
  81.  
  82. }
  83. if (linjacheck[0] && linjacheck[1] && linjacheck[2] && linjacheck[3] && linjacheck[4] && linjacheck[5] && linjacheck[6] && linjacheck[7] && linjacheck[8] && checkOtherSquares(rivi)){
  84. return true;
  85. }else
  86. return false;
  87.  
  88. }
  89. /**check 3x3 squares.**/
  90. private boolean checkOtherSquares(int[][] rivi) {
  91. boolean[] fullcheck = {false,false,false,false,false,false,false,false,false};
  92. for (int a = 0; a < 9; a++) {
  93. values.clear();
  94. switch(a){
  95. case 0:
  96. for (int i=0;i<3;i++){
  97. values.add(rivi[i][0]);
  98. values.add(rivi[i][1]);
  99. values.add(rivi[i][2]);
  100. }
  101. break;
  102. case 1:
  103. for (int i=3;i<6;i++){
  104. values.add(rivi[i][0]);
  105. values.add(rivi[i][1]);
  106. values.add(rivi[i][2]);
  107. }
  108. break;
  109. case 2:
  110. for (int i=6;i<9;i++){
  111. values.add(rivi[i][0]);
  112. values.add(rivi[i][1]);
  113. values.add(rivi[i][2]);
  114. }
  115. break;
  116. case 3:
  117. for (int i=0;i<3;i++){
  118. values.add(rivi[i][3]);
  119. values.add(rivi[i][4]);
  120. values.add(rivi[i][5]);
  121. }
  122. break;
  123. case 4:
  124. for (int i=3;i<6;i++){
  125. values.add(rivi[i][3]);
  126. values.add(rivi[i][4]);
  127. values.add(rivi[i][5]);
  128. }
  129. break;
  130. case 5:
  131. for (int i=6;i<9;i++){
  132. values.add(rivi[i][3]);
  133. values.add(rivi[i][4]);
  134. values.add(rivi[i][5]);
  135. }
  136. break;
  137. case 6:
  138. for (int i=0;i<3;i++){
  139. values.add(rivi[i][6]);
  140. values.add(rivi[i][7]);
  141. values.add(rivi[i][8]);
  142. }
  143. break;
  144. case 7:
  145. for (int i=3;i<6;i++){
  146. values.add(rivi[i][6]);
  147. values.add(rivi[i][7]);
  148. values.add(rivi[i][8]);
  149. }
  150. break;
  151. case 8:
  152. for (int i=6;i<9;i++){
  153. values.add(rivi[i][6]);
  154. values.add(rivi[i][7]);
  155. values.add(rivi[i][8]);
  156. }
  157. break;
  158. }
  159.  
  160.  
  161.  
  162. if (values.contains(1) && values.contains(2) && values.contains(3) && values.contains(4) && values.contains(5)&&values.contains(6)&& values.contains(7)&& values.contains(8)&& values.contains(9)){
  163. fullcheck[a] = true;
  164. }
  165.  
  166. }
  167.  
  168. if(fullcheck[8] && fullcheck[7] && fullcheck[6]){
  169. finalcheck[2] = true;
  170. }
  171. else{
  172. linjacheck[6] = false;
  173. linjacheck[7] = false;
  174. linjacheck[8] = false;
  175. }
  176. if(fullcheck[5] && fullcheck[4] && fullcheck[3])
  177. finalcheck[1] = true;
  178. else{
  179. linjacheck[5] = false;
  180. linjacheck[4] = false;
  181. linjacheck[3] = false;
  182. }
  183. if(fullcheck[2] && fullcheck[1] && fullcheck[0])
  184. finalcheck[0] = true;
  185. else{
  186. linjacheck[2] = false;
  187. linjacheck[1] = false;
  188. linjacheck[0] = false;
  189. }
  190.  
  191. if(finalcheck[0] && finalcheck[1] && finalcheck[2])
  192. return true;
  193. else
  194. return false;
  195.  
  196. }
  197.  
  198. public boolean AC(int[] arrays, int searchValue){
  199. boolean check = false;
  200. for (int i = 0; i < arrays.length; i++) {
  201. if(arrays[i] == searchValue)
  202. check = true;
  203. }
  204. return check;
  205.  
  206. }
  207.  
  208. public int incrementLinja(){
  209. int linja=0;
  210. for (int i = 0; i < 9; i++) {
  211. if(linjacheck[i])
  212. linja++;
  213. }
  214. return linja;
  215. }
  216.  
  217. public void runStuff(){
  218. startti();
  219. rivix = sekoitus(rivix);
  220. while (!checktable(rivix)){
  221. rivix = sekoitus(rivix);
  222. checktable(rivix);
  223. }
  224. poyta(rivix);
  225.  
  226. }
  227.  
  228. public static void main(String[] args) {
  229. sudoku s = new sudoku();
  230. double time = System.currentTimeMillis();
  231. s.runStuff();
  232. double timeAfter = System.currentTimeMillis();
  233. System.out.println("Puzzle generated in: " + ((timeAfter-time)/1000) + " seconds.");
  234.  
  235. }
  236.  
  237. }
Add Comment
Please, Sign In to add comment