|
@@ -1,155 +0,0 @@
|
|
-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;
|
|
|
|
- }
|
|
|
|
-}
|
|
|