Menu
CoddyTech

Sudoku Solver

TrudneNawrotypython iconjava iconcpp iconc iconjs icon+10

Plansza sudoku to siatka 9 × 9 podzielona na dziewięć kwadratów 3 × 3. Na rozwiązanej planszy w każdym wierszu, każdej kolumnie i każdym kwadracie każda cyfra od 1 do 9 występuje dokładnie raz.

Łamigłówka jest podana jako 9 ciągów znaków, po jednym na każdy wiersz, zaczynając od góry; . oznacza puste pole. Wypełnij wszystkie puste pola i zwróć rozwiązaną planszę w tej samej postaci. Plansza ma dokładnie jedno rozwiązanie.

Funkcja

solveSudoku(board: string-array) → string-array
boardstring-array
9 wierszy łamigłówki, kropka w każdej pustej komórce
Zwracastring-array
9 wierszy rozwiązanej planszy

Ograniczenia

  • board zawiera 9 ciągów znaków o długości 9.
  • Każdy znak to . lub jedna z cyfr 1 do 9.
  • Podane cyfry nigdy się nie powtarzają w wierszu, kolumnie ani kwadracie.
  • Plansza ma dokładnie jedno rozwiązanie.

Przykłady

Wejście
board = ["9.7.....6", "824.3....", "..1..9..2", ".9...2.18", "...4....5", "1325.8...", "...687...", "......8.9", ".4.9...5."]
Wyjście
["957214386", "824736591", "361859742", "495372618", "786491235", "132568974", "519687423", "273145869", "648923157"]
Wyjaśnienie
Górny wiersz 9.7.....6 zawiera już 9, 7 i 6, więc w jego sześciu pustych komórkach muszą znaleźć się 1, 2, 3, 4, 5 i 8. Kolumny i pola decydują o tym, gdzie trafi każda z nich, a wiersz przyjmuje postać 957214386.
challenge icon

Pytanie dodatkowe

W killer sudoku grupy pól muszą również sumować się do podanych wartości. Jak dodać tę zasadę do wyszukiwania i wykorzystać ją do wczesnego odcinania gałęzi?

Zresetuj kod
def solveSudoku(board):
    # Napisz kod tutaj

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."]

Oczekiwany wynik

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