Menu
CoddyTech

Sudoku Solver

SchwerBacktrackingpython iconjava iconcpp iconc iconjs icon+10

Ein Sudoku-Feld ist ein 9 × 9-Raster, das in neun 3 × 3-Blöcke unterteilt ist. In einem gelösten Feld enthält jede Zeile, jede Spalte und jeder Block jede Ziffer von 1 bis 9 genau einmal.

Das Rätsel besteht aus 9 Zeichenketten, eine pro Zeile von oben nach unten; ein . steht für ein leeres Feld. Fülle alle leeren Felder aus und gib das gelöste Feld in derselben Form zurück. Das Feld hat genau eine Lösung.

Funktion

solveSudoku(board: string-array) → string-array
boardstring-array
die 9 Zeilen des Rätsels, ein Punkt in jeder leeren Zelle
Gibt zurückstring-array
die 9 Reihen des gelösten Spielfelds

Einschränkungen

  • board enthält 9 Zeichenketten der Länge 9.
  • Jedes Zeichen ist . oder eine der Ziffern 1 bis 9.
  • Die vorgegebenen Ziffern wiederholen sich nie innerhalb einer Zeile, einer Spalte oder eines Blocks.
  • Das Brett hat genau eine Lösung.

Beispiele

Eingabe
board = ["9.7.....6", "824.3....", "..1..9..2", ".9...2.18", "...4....5", "1325.8...", "...687...", "......8.9", ".4.9...5."]
Ausgabe
["957214386", "824736591", "361859742", "495372618", "786491235", "132568974", "519687423", "273145869", "648923157"]
Erklärung
Die oberste Zeile 9.7.....6 enthält bereits 9, 7 und 6, daher nehmen ihre sechs leeren Zellen die Zahlen 1, 2, 3, 4, 5 und 8 auf. Die Spalten und Kästchen bestimmen, wo jede Zahl hingehört, und die Zeile wird zu 957214386.
challenge icon

Weiterführende Frage

Bei Killer-Sudoku müssen die Zellen in Käfigen ebenfalls die vorgegebenen Summen ergeben. Wie würdest du diese Regel in die Suche einbauen und damit frühzeitig Äste abschneiden?

Code zurücksetzen
def solveSudoku(board):
    # Schreibe hier den Code

Test #1

Argument

board = ["9.7.....6", "824.3....", "..1..9..2", ".9...2.18", "...4....5", "1325.8...", "...687...", "......8.9", ".4.9...5."]

Erwartete Ausgabe

["957214386", "824736591", "361859742", "495372618", "786491235", "132568974", "519687423", "273145869", "648923157"]