Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.Scanner;
- import java.util.concurrent.ThreadLocalRandom;
- public class Sudoku {
- public static ArrayList<Integer> create() {
- int rand = 0;
- ArrayList<Integer> list = new ArrayList<Integer>();
- ArrayList<Integer> line1 = new ArrayList<Integer>();
- ArrayList<Integer> line2 = new ArrayList<Integer>();
- ArrayList<Integer> line3 = new ArrayList<Integer>();
- ArrayList<Integer> line4 = new ArrayList<Integer>();
- ArrayList<Integer> line5 = new ArrayList<Integer>();
- ArrayList<Integer> line6 = new ArrayList<Integer>();
- ArrayList<Integer> line7 = new ArrayList<Integer>();
- ArrayList<Integer> line8 = new ArrayList<Integer>();
- ArrayList<Integer> line9 = new ArrayList<Integer>();
- ArrayList<Integer> row1 = new ArrayList<Integer>();
- ArrayList<Integer> row2 = new ArrayList<Integer>();
- ArrayList<Integer> row3 = new ArrayList<Integer>();
- ArrayList<Integer> row4 = new ArrayList<Integer>();
- ArrayList<Integer> row5 = new ArrayList<Integer>();
- ArrayList<Integer> row6 = new ArrayList<Integer>();
- ArrayList<Integer> row7 = new ArrayList<Integer>();
- ArrayList<Integer> row8 = new ArrayList<Integer>();
- ArrayList<Integer> row9 = new ArrayList<Integer>();
- line1.add(0);
- line1.add(1);
- line1.add(2);
- line1.add(9);
- line1.add(10);
- line1.add(11);
- line1.add(18);
- line1.add(19);
- line1.add(20);
- line2.add(3);
- line2.add(4);
- line2.add(5);
- line2.add(12);
- line2.add(13);
- line2.add(14);
- line2.add(21);
- line2.add(22);
- line2.add(23);
- line3.add(6);
- line3.add(7);
- line3.add(8);
- line3.add(15);
- line3.add(16);
- line3.add(17);
- line3.add(24);
- line3.add(25);
- line3.add(26);
- line4.add(27);
- line4.add(28);
- line4.add(29);
- line4.add(36);
- line4.add(37);
- line4.add(38);
- line4.add(45);
- line4.add(46);
- line4.add(47);
- line5.add(30);
- line5.add(31);
- line5.add(32);
- line5.add(39);
- line5.add(40);
- line5.add(41);
- line5.add(48);
- line5.add(49);
- line5.add(50);
- line6.add(33);
- line6.add(34);
- line6.add(35);
- line6.add(42);
- line6.add(43);
- line6.add(44);
- line6.add(51);
- line6.add(52);
- line6.add(53);
- line7.add(54);
- line7.add(55);
- line7.add(56);
- line7.add(63);
- line7.add(64);
- line7.add(65);
- line7.add(72);
- line7.add(73);
- line7.add(74);
- line8.add(57);
- line8.add(58);
- line8.add(59);
- line8.add(66);
- line8.add(67);
- line8.add(68);
- line8.add(75);
- line8.add(76);
- line8.add(77);
- line9.add(60);
- line9.add(61);
- line9.add(62);
- line9.add(69);
- line9.add(70);
- line9.add(71);
- line9.add(78);
- line9.add(79);
- line9.add(80);
- row1.add(0);
- row1.add(3);
- row1.add(6);
- row1.add(27);
- row1.add(30);
- row1.add(33);
- row1.add(54);
- row1.add(57);
- row1.add(60);
- row2.add(1);
- row2.add(4);
- row2.add(7);
- row2.add(28);
- row2.add(31);
- row2.add(34);
- row2.add(55);
- row2.add(58);
- row2.add(61);
- row3.add(2);
- row3.add(5);
- row3.add(8);
- row3.add(29);
- row3.add(32);
- row3.add(35);
- row3.add(56);
- row3.add(59);
- row3.add(32);
- row4.add(9);
- row4.add(12);
- row4.add(15);
- row4.add(36);
- row4.add(39);
- row4.add(42);
- row4.add(63);
- row4.add(66);
- row4.add(69);
- row5.add(10);
- row5.add(13);
- row5.add(16);
- row5.add(37);
- row5.add(40);
- row5.add(43);
- row5.add(64);
- row5.add(67);
- row5.add(70);
- row6.add(11);
- row6.add(14);
- row6.add(17);
- row6.add(38);
- row6.add(41);
- row6.add(44);
- row6.add(65);
- row6.add(68);
- row6.add(71);
- row7.add(18);
- row7.add(21);
- row7.add(24);
- row7.add(45);
- row7.add(48);
- row7.add(51);
- row7.add(72);
- row7.add(75);
- row7.add(78);
- row8.add(19);
- row8.add(22);
- row8.add(25);
- row8.add(46);
- row8.add(49);
- row8.add(52);
- row8.add(73);
- row8.add(76);
- row8.add(79);
- row9.add(20);
- row9.add(23);
- row9.add(26);
- row9.add(47);
- row9.add(50);
- row9.add(53);
- row9.add(74);
- row9.add(77);
- row9.add(80);
- ArrayList<Integer> generable = new ArrayList<Integer>();
- boolean next = false;
- int n = 0;
- ArrayList<Integer> used = new ArrayList<Integer>();
- while (true) {
- n = 0;
- list.clear();
- for (int o = 0; o < 81; o++) {
- list.add(0);
- }
- try {
- for (int j = 0; j < 9; j++) {
- generable.clear();
- for (int ak = 0; ak < 81; ak++) {
- if (list.get(ak) == 0) {
- generable.add(ak);
- }
- }
- // System.out.println("ok2");
- used.clear();
- n++;
- for (int g = 0; g < 9; g++) {
- for (int jj = 0; jj < 100; jj++) {
- rand = ThreadLocalRandom.current().nextInt(0,
- generable.size());
- rand = generable.get(rand);
- if (list.get(rand) == 0 && !used.contains(rand)) {
- list.set(rand, n);
- generable.remove(generable.indexOf(rand));
- break;
- }
- }
- if (line1.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(line1.get(op));
- if (generable.contains(line1.get(op))) {
- generable.remove(generable
- .indexOf(line1.get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (line2.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(line2.get(op));
- if (generable.contains(line2.get(op))) {
- generable.remove(generable
- .indexOf(line2.get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (line3.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(line3.get(op));
- if (generable.contains(line3.get(op))) {
- generable.remove(generable
- .indexOf(line3.get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (line4.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(line4.get(op));
- if (generable.contains(line4.get(op))) {
- generable.remove(generable
- .indexOf(line4.get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (line5.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(line5.get(op));
- if (generable.contains(line5.get(op))) {
- generable.remove(generable
- .indexOf(line5.get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (line6.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(line6.get(op));
- if (generable.contains(line6.get(op))) {
- generable.remove(generable
- .indexOf(line6.get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (line7.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(line7.get(op));
- if (generable.contains(line7.get(op))) {
- generable.remove(generable
- .indexOf(line7.get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (line8.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(line8.get(op));
- if (generable.contains(line8.get(op))) {
- generable.remove(generable
- .indexOf(line8.get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (line9.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(line9.get(op));
- if (generable.contains(line9.get(op))) {
- generable.remove(generable
- .indexOf(line9.get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (row1.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(row1.get(op));
- if (generable.contains(row1.get(op))) {
- generable.remove(generable.indexOf(row1
- .get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (row2.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(row2.get(op));
- if (generable.contains(row2.get(op))) {
- generable.remove(generable.indexOf(row2
- .get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (row3.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(row3.get(op));
- if (generable.contains(row3.get(op))) {
- generable.remove(generable.indexOf(row3
- .get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (row4.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(row4.get(op));
- if (generable.contains(row4.get(op))) {
- generable.remove(generable.indexOf(row4
- .get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (row5.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(row5.get(op));
- if (generable.contains(row5.get(op))) {
- generable.remove(generable.indexOf(row5
- .get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (row6.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(row6.get(op));
- if (generable.contains(row6.get(op))) {
- generable.remove(generable.indexOf(row6
- .get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (row7.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(row7.get(op));
- if (generable.contains(row7.get(op))) {
- generable.remove(generable.indexOf(row7
- .get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (row8.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(row8.get(op));
- if (generable.contains(row8.get(op))) {
- generable.remove(generable.indexOf(row8
- .get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (row9.contains(rand)) {
- int op = 0;
- try {
- while (true) {
- used.add(row9.get(op));
- if (generable.contains(row9.get(op))) {
- generable.remove(generable.indexOf(row9
- .get(op)));
- }
- op++;
- }
- } catch (Exception e) {
- }
- }
- if (rand >= 0 && rand <= 8) {
- for (int a = 0; a <= 8; a++) {
- used.add(a);
- }
- }
- if (rand >= 9 && rand <= 17) {
- for (int a = 9; a <= 17; a++) {
- used.add(a);
- }
- }
- if (rand >= 18 && rand <= 26) {
- for (int a = 18; a <= 26; a++) {
- used.add(a);
- }
- }
- if (rand >= 27 && rand <= 35) {
- for (int a = 27; a <= 35; a++) {
- used.add(a);
- }
- }
- if (rand >= 36 && rand <= 44) {
- for (int a = 36; a <= 44; a++) {
- used.add(a);
- }
- }
- if (rand >= 45 && rand <= 53) {
- for (int a = 45; a <= 53; a++) {
- used.add(a);
- }
- }
- if (rand >= 54 && rand <= 62) {
- for (int a = 54; a <= 62; a++) {
- used.add(a);
- }
- }
- if (rand >= 63 && rand <= 71) {
- for (int a = 63; a <= 71; a++) {
- used.add(a);
- }
- }
- if (rand >= 72 && rand <= 80) {
- for (int a = 72; a <= 80; a++) {
- used.add(a);
- }
- }
- }
- }
- if (!list.contains(0)) {
- next = true;
- }
- } catch (Exception e) {
- }
- if (next) {
- break;
- }
- }
- return list;
- }
- public static void scheme(ArrayList<Integer> user) {
- System.out.println(user.get(0) + " " + user.get(1) + " " + user.get(2)
- + " " + user.get(9) + " " + user.get(10) + " " + user.get(11)
- + " " + user.get(18) + " " + user.get(19) + " "
- + user.get(20) + " 00 01 02 09 10 11 18 19 20\n"
- + user.get(3) + " " + user.get(4) + " " + user.get(5) + " "
- + user.get(12) + " " + user.get(13) + " " + user.get(14)
- + " " + user.get(21) + " " + user.get(22) + " "
- + user.get(23) + " 03 04 05 12 13 14 21 22 23 \n"
- + user.get(6) + " " + user.get(7) + " " + user.get(8) + " "
- + user.get(15) + " " + user.get(16) + " " + user.get(17)
- + " " + user.get(24) + " " + user.get(25) + " "
- + user.get(26) + " 06 07 08 15 16 17 24 25 26 \n"
- + "\n" + user.get(27) + " " + user.get(28) + " " + user.get(29)
- + " " + user.get(36) + " " + user.get(37) + " "
- + user.get(38) + " " + user.get(45) + " " + user.get(46)
- + " " + user.get(47)
- + " 27 28 29 36 37 38 45 46 47\n" + user.get(30)
- + " " + user.get(31) + " " + user.get(32) + " "
- + user.get(39) + " " + user.get(40) + " " + user.get(41)
- + " " + user.get(48) + " " + user.get(49) + " "
- + user.get(50) + " 30 31 32 39 40 41 48 49 50\n"
- + user.get(33) + " " + user.get(34) + " " + user.get(35)
- + " " + user.get(42) + " " + user.get(43) + " "
- + user.get(44) + " " + user.get(51) + " " + user.get(52)
- + " " + user.get(53)
- + " 33 34 35 42 43 44 51 52 53 \n" + "\n"
- + user.get(54) + " " + user.get(55) + " " + user.get(56)
- + " " + user.get(63) + " " + user.get(64) + " "
- + user.get(65) + " " + user.get(72) + " " + user.get(73)
- + " " + user.get(74)
- + " 54 55 56 63 64 65 72 73 74\n" + user.get(57)
- + " " + user.get(58) + " " + user.get(59) + " "
- + user.get(66) + " " + user.get(67) + " " + user.get(68)
- + " " + user.get(75) + " " + user.get(76) + " "
- + user.get(77) + " 57 58 59 66 67 68 75 76 77 \n"
- + user.get(60) + " " + user.get(61) + " " + user.get(62)
- + " " + user.get(69) + " " + user.get(70) + " "
- + user.get(71) + " " + user.get(78) + " " + user.get(79)
- + " " + user.get(80)
- + " 60 61 62 69 70 71 78 79 80 \n");
- }
- public static void sudoku(String[] args) {
- dd = new Scanner(System.in);
- int aop, moves = 0;
- while (true) {
- try {
- System.out.print("Inserisci quante caselle mostrare[10-70]: ");
- aop = dd.nextInt();
- if (aop > 9 && aop < 71) {
- break;
- }
- } catch (Exception e) {
- }
- }
- System.out.println("Generazione schema...");
- ArrayList<Integer> truth = new ArrayList<Integer>();
- truth = create();
- ArrayList<Integer> user = new ArrayList<Integer>();
- for (int a = 0; a < 81; a++) {
- user.add(0);
- }
- ArrayList<Integer> modifiable = new ArrayList<Integer>();
- for (int a = 0; a < 81; a++) {
- modifiable.add(a);
- }
- for (int i = 0; i <= aop; i++) {
- int rand = ThreadLocalRandom.current()
- .nextInt(0, modifiable.size());
- user.set(modifiable.get(rand), truth.get(modifiable.get(rand)));
- modifiable.remove(rand);
- }
- scheme(user);
- while (!user.equals(truth)) {
- while (true) {
- try {
- System.out.print("\nInserisci dove cambiare: ");
- int a = dd.nextInt();
- if (a >= 0 && a < 81) {
- if (modifiable.contains(a)) {
- System.out
- .print("Inserisci con che numero cambiare: ");
- int b = dd.nextInt();
- if (b >= 0 && b < 10) {
- user.set(a, b);
- break;
- }
- } else {
- System.out
- .println("Numero generato automaticamente.");
- }
- }
- } catch (Exception e) {
- }
- }
- scheme(user);
- moves++;
- }
- System.out.println("Hai vinto in " + moves + " mosse!");
- System.out.print("INVIO per rincominciare.");
- dd.nextLine();
- dd.nextLine();
- }
- private static Scanner dd;
- public static void main(String[] args) {
- while (true) {
- sudoku(args);
- for (int a = 0; a < 1000; a++) {
- System.out.println();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement