Hallo zusammen,
meine Aufgabe ist es einen Checker für ein hexadezimales Sudoku zu programmieren.
TestChecker dürfen wir nicht verändern.
In HexSudoku soll das hexadezimale Sudoku eingegeben werden und zwar nach folgendem Muster:
01.3.567.9.bc.ef
4.67.1.3c..f8.ab
.9a.c.ef012.4.6.
.d.f.9...56.01.3
.0.2...69.b.d.f.
5.76.0.2d.f.9.ba
98....f.1.32....
..f.9.b.54....32
23..6.4.a.89...d
.7.52.01e.c.a.8.
.b8.ef.d2...6..5
e.cd..8.67.52.01
.2.076.4ba...edc
.6.4.2..fe...a98
..98.e.c3.10.654
.edc.a9.76.43.1.
Und bei write soll ein Rahmen um das Sudoku gemacht werden.
Noch nicht fertig geschrieben aber die Absicht ist hoffentlich zu erkennen.^^
Mein Problem ist nun aus dieser Eingabe die Punkte als leere Felder im Sudoku zu erkennen und dies dann auch gleich richtig in einem Array zu speichern:
01.3.567.9.bc.ef
4.67.1.3c..f8.ab
.9a.c.ef012.4.6.
.d.f.9...56.01.3
.0.2...69.b.d.f.
5.76.0.2d.f.9.ba
98....f.1.32....
..f.9.b.54....32
23..6.4.a.89...d
.7.52.01e.c.a.8.
.b8.ef.d2...6..5
e.cd..8.67.52.01
.2.076.4ba...edc
.6.4.2..fe...a98
..98.e.c3.10.654
.edc.a9.76.43.1.
Und bei write soll dann solch ein Feld als Ausgabe erzeugt werden, aber halt quadratisch:
Sudoku
+---------+---------+---------+---------+
| 0 1 3 | 5 6 7 | 9 b | c e f |
| 4 6 7 | 1 3 | c f | 8 a b |
| 9 a | c e f | 0 1 2 | 4 6 |
| d f | 9 | 5 6 | 0 1 3 |
+---------+---------+---------+---------+
| 0 2 | 6 | 9 b | d f |
| 5 7 6 | 0 2 | d f | 9 b a |
| 9 8 | f | 1 3 2 | |
| f | 9 b | 5 4 | 3 2 |
+---------+---------+---------+---------+
| 2 3 | 6 4 | a 8 9 | d |
| 7 5 | 2 0 1 | e c | a 8 |
| b 8 | e f d | 2 | 6 5 |
| e c d | 8 | 6 7 5 | 2 0 1 |
+---------+---------+---------+---------+
| 2 0 | 7 6 4 | b a | e d c |
| 6 4 | 2 | f e | a 9 8 |
| 9 8 | e c | 3 1 0 | 6 5 4 |
| e d c | a 9 | 7 6 4 | 3 1 |
+---------+---------+---------+---------+
Danke schon einmal im Voraus.
meine Aufgabe ist es einen Checker für ein hexadezimales Sudoku zu programmieren.
TestChecker dürfen wir nicht verändern.
Java:
class TestChecker {
public static void main (String args []) {
System.out.println(args.length);
HexSudoku.Variante v = HexSudoku.Variante.normal;
if (args.length > 0 && args[0].equals("-x"))
v = HexSudoku.Variante.mitDiagonalen;
HexSudoku s = new HexSudoku(v);
s.read();
s.write();
if (!HexSudokuChecker.check(s))
System.out.print("not ");
System.out.println("ok");
}
}
In HexSudoku soll das hexadezimale Sudoku eingegeben werden und zwar nach folgendem Muster:
01.3.567.9.bc.ef
4.67.1.3c..f8.ab
.9a.c.ef012.4.6.
.d.f.9...56.01.3
.0.2...69.b.d.f.
5.76.0.2d.f.9.ba
98....f.1.32....
..f.9.b.54....32
23..6.4.a.89...d
.7.52.01e.c.a.8.
.b8.ef.d2...6..5
e.cd..8.67.52.01
.2.076.4ba...edc
.6.4.2..fe...a98
..98.e.c3.10.654
.edc.a9.76.43.1.
Und bei write soll ein Rahmen um das Sudoku gemacht werden.
Java:
import java.util.StringTokenizer;
public class HexSudoku {
public enum Variante { normal, mitDiagonalen };
public Variante v;
public HexSudoku s;
private final static int konstante=15;
/**
* Konstruktor von HexSudoku, der die beiden Varianten normal und mitDiagonale unterschiedlich behandelt
* @param v
*/
public HexSudoku(Variante v) {
switch (v) {
case normal:
HexSudokuChecker checker= new HexSudokuChecker();
read();
read();
HexSudokuChecker.check(s);
write();
break;
case mitDiagonalen:
HexSudokuChecker checker2= new HexSudokuChecker();
read();
HexSudokuChecker.check(s);
HexSudokuChecker.checkDiagonal(s);
write();
break;
}
}
public void read() {
StringTokenizer tokenizer=new StringTokenizer(Keyboard.readString());
while(tokenizer.hasMoreTokens()){
String[] array=new String[15];
array=tokenizer.nextToken();
System.out.print(tokenizer.nextToken()+" ");
}
}
public void write() {
int[][]feld = null;
for (int i = 0; i <konstante; ++i) {
if (i % 4 == 0)
System.out.println(" -----------------------");
for (int j = 0; j <konstante; ++j) {
if (j % 4 == 0) System.out.print("| ");
System.out.print(feld[i][j] == 0 ? " " : Integer.toString(feld[i][j]));
System.out.print(' ');
}
System.out.println("|");
}
System.out.println(" -----------------------");
}
}
Noch nicht fertig geschrieben aber die Absicht ist hoffentlich zu erkennen.^^
Java:
public class HexSudokuChecker {
public int[][] feld; // Sudoku Feld
public int n, box_n;// Konstante fuer die Anzahl an Bloecken(16er Sudoku) und die Breite einer Box (4)
public static boolean check(HexSudoku s) {
return false;
}
/**
* Prueft ob der Wert bereits in der (horizontalen) SPALTE existiert
* @return-> Gibt true zurueck, wenn der Wert bereits existiert
*/
public boolean checkHorizontal(int j, int value) {
for(int a=0; a<n; a++)
if(feld[a][j] == value)
return true;
return false;
}
/**
* Prueft ob der Wert bereits in der (vertikalen) REIHE existiert
* @return-> Gibt true zurueck, wenn der Wert bereits existiert
*/
public boolean checkVertical(int i, int value) {
for(int a=0; a<n; a++)
if(feld[i][a] == value)
return true;
return false;
}
/**
* Prueft ob der Wert bereits in der BOX existiert
* @return-> Gibt true zurueck, wenn der Wert bereits existiert
*/
public boolean checkBox(int i, int j, int value) {
// oberes, linkes Eck der Box herausfinden (2|8 zu 0|6)
int i_start = (int)(i/box_n) * box_n;
int j_start = (int)(j/box_n) * box_n;
for(int a=i_start; a<i_start+box_n; a++)
for(int b=j_start; b<j_start+box_n; b++)
if(feld[a][b] == value)
return true;
return false;
}
/**
* Prueft ob der Wert bereits diagonal existiert
* @return-> Gibt true zurueck, wenn der Wert bereits existiert
*/
public static boolean checkDiagonal(HexSudoku s) {
return false;
}
}
Mein Problem ist nun aus dieser Eingabe die Punkte als leere Felder im Sudoku zu erkennen und dies dann auch gleich richtig in einem Array zu speichern:
01.3.567.9.bc.ef
4.67.1.3c..f8.ab
.9a.c.ef012.4.6.
.d.f.9...56.01.3
.0.2...69.b.d.f.
5.76.0.2d.f.9.ba
98....f.1.32....
..f.9.b.54....32
23..6.4.a.89...d
.7.52.01e.c.a.8.
.b8.ef.d2...6..5
e.cd..8.67.52.01
.2.076.4ba...edc
.6.4.2..fe...a98
..98.e.c3.10.654
.edc.a9.76.43.1.
Und bei write soll dann solch ein Feld als Ausgabe erzeugt werden, aber halt quadratisch:
Sudoku
+---------+---------+---------+---------+
| 0 1 3 | 5 6 7 | 9 b | c e f |
| 4 6 7 | 1 3 | c f | 8 a b |
| 9 a | c e f | 0 1 2 | 4 6 |
| d f | 9 | 5 6 | 0 1 3 |
+---------+---------+---------+---------+
| 0 2 | 6 | 9 b | d f |
| 5 7 6 | 0 2 | d f | 9 b a |
| 9 8 | f | 1 3 2 | |
| f | 9 b | 5 4 | 3 2 |
+---------+---------+---------+---------+
| 2 3 | 6 4 | a 8 9 | d |
| 7 5 | 2 0 1 | e c | a 8 |
| b 8 | e f d | 2 | 6 5 |
| e c d | 8 | 6 7 5 | 2 0 1 |
+---------+---------+---------+---------+
| 2 0 | 7 6 4 | b a | e d c |
| 6 4 | 2 | f e | a 9 8 |
| 9 8 | e c | 3 1 0 | 6 5 4 |
| e d c | a 9 | 7 6 4 | 3 1 |
+---------+---------+---------+---------+
Danke schon einmal im Voraus.