In dieser Kata geht es darum, eine Anwendung zu schreiben, die mir das Lösen eines Sudokus ermöglicht und Falscheingaben überprüft.

Wenn ich beispielsweise das folgende Ausgangsbild habe:

#-------#-------#-------#
| 5 6 9 | 3 2 8 | 7 4 1 |
| 4 3 2 | 7 5 1 | 6 9 8 |
| 1 8 7 | 4 6 9 | 5 3 2 |
#-------#-------#-------#
| 9 1 8 | 2 7 5 | 4 6 3 |
| 7 5 3 | 6 0 4 | 2 1 9 |
| 2 4 6 | 1 9 3 | 8 7 5 |
#-------#-------#-------#
| 6 2 1 | 5 3 7 | 9 8 4 |
| 8 7 4 | 9 1 2 | 3 5 6 |
| 3 9 5 | 8 4 6 | 1 2 7 |
#-------#-------#-------#

soll ein Aufruf der Sudoku-Klasse möglich sein:

game.enterDigit(8, 5, 5);

Während hingegen die folgenden Aufrufe zu entsprechenden Exceptions führen:

game.enterDigit(-1,5,5) --> IllegalArgumentException mit Message "Only digits [1..9] are allowed."
game.enterDigit(10,5,5) --> IllegalArgumentException mit Message "Only digits [1..9] are allowed."
game.enterDigit(6,5,5) --> IllegalArgumentException mit Message "Same digit 6 in the same row 5."
game.enterDigit(9,5,5) --> IllegalArgumentException mit Message "Same digit 9 in the same column 5."
game.enterDigit(1,5,5) --> IllegalArgumentException mit Message "Same digit 1 in the same quadrant."

Es soll zusätzlich eine Methode status geben, die das aktuelle Board in der obigen Variante ausgibt, also unbesetzte Stellen beispielsweise mit 0 versieht.

new Sudoku().status

liefert also:

#-------#-------#-------#
| 0 0 0 | 0 0 0 | 0 0 0 |
| 0 0 0 | 0 0 0 | 0 0 0 |
| 0 0 0 | 0 0 0 | 0 0 0 |
#-------#-------#-------#
| 0 0 0 | 0 0 0 | 0 0 0 |
| 0 0 0 | 0 0 0 | 0 0 0 |
| 0 0 0 | 0 0 0 | 0 0 0 |
#-------#-------#-------#
| 0 0 0 | 0 0 0 | 0 0 0 |
| 0 0 0 | 0 0 0 | 0 0 0 |
| 0 0 0 | 0 0 0 | 0 0 0 |
#-------#-------#-------#

Die Klasse Sudoku hat folgenden Entwurf:

Klassendiagramm : Sudoku
Klassendiagramm : Sudoku

Mögliche Lösung

Im ersten Schritt erstelle ich folgenden Test:

package de.mike.kata.sudoku;

import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;

import org.junit.Test;

public class SudokuTest {

@Test
public void testBeginningStatus() {
Sudoku game = new Sudoku();
assertThat(game.status(), is(
"#-------#-------#-------#\r\n" +
"| 0 0 0 | 0 0 0 | 0 0 0 |\r\n" +
"| 0 0 0 | 0 0 0 | 0 0 0 |\r\n" +
"| 0 0 0 | 0 0 0 | 0 0 0 |\r\n" +
"#-------#-------#-------#\r\n" +
"| 0 0 0 | 0 0 0 | 0 0 0 |\r\n" +
"| 0 0 0 | 0 0 0 | 0 0 0 |\r\n" +
"| 0 0 0 | 0 0 0 | 0 0 0 |\r\n" +
"#-------#-------#-------#\r\n" +
"| 0 0 0 | 0 0 0 | 0 0 0 |\r\n" +
"| 0 0 0 | 0 0 0 | 0 0 0 |\r\n" +
"| 0 0 0 | 0 0 0 | 0 0 0 |\r\n" +
"#-------#-------#-------#"));
}

}
Kata: Sudoku

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.