|
@@ -0,0 +1,155 @@
|
|
|
+package de.mcs.tools;
|
|
|
+
|
|
|
+import java.util.Arrays;
|
|
|
+
|
|
|
+import org.junit.jupiter.api.Test;
|
|
|
+
|
|
|
+class TestRaetsel {
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void test() {
|
|
|
+ int[] field = new int[8];
|
|
|
+ boolean[] used = new boolean[9];
|
|
|
+
|
|
|
+ for (int i = 0; i < used.length; i++) {
|
|
|
+ used[i] = false;
|
|
|
+ }
|
|
|
+ for (int i = 0; i < 8; i++) {
|
|
|
+ field[i] = -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ field[0] = 3;
|
|
|
+ field[1] = 5;
|
|
|
+ field[2] = 7;
|
|
|
+ field[3] = 1;
|
|
|
+ field[4] = 8;
|
|
|
+ field[5] = 2;
|
|
|
+ field[6] = 4;
|
|
|
+ field[7] = 6;
|
|
|
+
|
|
|
+ outputField(field);
|
|
|
+ if (isSolution(field)) {
|
|
|
+ System.out.println("yeah");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean setNextNumber(int[] myField, boolean[] myUsed) {
|
|
|
+ int[] field = Arrays.copyOf(myField, 8);
|
|
|
+ boolean[] used = Arrays.copyOf(myUsed, 9);
|
|
|
+ for (int number = 1; number < used.length; number++) {
|
|
|
+ // System.out.print('.');
|
|
|
+ if (!used[number]) {
|
|
|
+ for (int i = 0; i < field.length; i++) {
|
|
|
+ if (field[i] <= 0) {
|
|
|
+ field[i] = number;
|
|
|
+ used[number] = true;
|
|
|
+ if (checkField(field)) {
|
|
|
+ // System.out.println(number);
|
|
|
+ // outputField(field);
|
|
|
+ if (setNextNumber(field, used)) {
|
|
|
+ field[i] = -1;
|
|
|
+ used[number] = false;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ field[i] = -1;
|
|
|
+ used[number] = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isSolution(field)) {
|
|
|
+ System.out.println("yeah");
|
|
|
+ outputField(field);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ boolean checkField(int[] field) {
|
|
|
+ if (nachbarn(field[0], field[1]))
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (nachbarn(field[0], field[2]))
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (nachbarn(field[0], field[3]))
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (nachbarn(field[0], field[4]))
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (nachbarn(field[1], field[3]))
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (nachbarn(field[1], field[4]))
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (nachbarn(field[1], field[5]))
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (nachbarn(field[2], field[3]))
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (nachbarn(field[2], field[6]))
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (nachbarn(field[3], field[4]))
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (nachbarn(field[3], field[6]))
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (nachbarn(field[3], field[7]))
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (nachbarn(field[4], field[5]))
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (nachbarn(field[4], field[6]))
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (nachbarn(field[4], field[7]))
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (nachbarn(field[5], field[7]))
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (nachbarn(field[6], field[7]))
|
|
|
+ return false;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ boolean nachbarn(int x, int y) {
|
|
|
+ return Math.abs(x - y) == 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ void outputField(int[] field) {
|
|
|
+ for (int i = 0; i < field.length; i++) {
|
|
|
+ if (field[i] == -1) {
|
|
|
+ field[i] = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ System.out.println(String.format(" | %s | %s |", getField(field[0]), getField(field[1])));
|
|
|
+ System.out.println(String.format("%s | %s | %s | %s", getField(field[2]), getField(field[3]), getField(field[4]),
|
|
|
+ getField(field[5])));
|
|
|
+ System.out.println(String.format(" | %s | %s |", getField(field[6]), getField(field[7])));
|
|
|
+ }
|
|
|
+
|
|
|
+ String getField(int i) {
|
|
|
+ return i > 0 ? Integer.toString(i) : "X";
|
|
|
+ }
|
|
|
+
|
|
|
+ boolean isSolution(int[] field) {
|
|
|
+ if (checkField(field)) {
|
|
|
+ for (int i = 0; i < field.length; i++) {
|
|
|
+ if (field[i] <= 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+}
|