Menu
CoddyTech

Sudoku Solver

DifícilBacktrackingpython iconjava iconcpp iconc iconjs icon+10

Um tabuleiro de sudoku é uma grade 9 × 9 dividida em nove quadrados de 3 × 3. Em um tabuleiro resolvido, cada linha, cada coluna e cada quadrado contém cada dígito de 1 a 9 exatamente uma vez.

O quebra-cabeça é fornecido como 9 strings, uma por linha, de cima para baixo; um . representa uma célula vazia. Preencha todas as células vazias e retorne o tabuleiro resolvido no mesmo formato. O tabuleiro tem exatamente uma solução.

Função

solveSudoku(board: string-array) → string-array
boardstring-array
as 9 linhas do quebra-cabeça, um ponto em cada célula vazia
Retornastring-array
as 9 linhas do tabuleiro resolvido

Restrições

  • board contém 9 strings de comprimento 9.
  • Cada caractere é . ou um dos dígitos de 1 a 9.
  • Os dígitos fornecidos nunca se repetem em uma linha, coluna ou bloco.
  • O tabuleiro tem exatamente uma solução.

Exemplos

Entrada
board = ["9.7.....6", "824.3....", "..1..9..2", ".9...2.18", "...4....5", "1325.8...", "...687...", "......8.9", ".4.9...5."]
Saída
["957214386", "824736591", "361859742", "495372618", "786491235", "132568974", "519687423", "273145869", "648923157"]
Explicação
A linha superior 9.7.....6 já contém 9, 7 e 6, então suas seis células vazias recebem 1, 2, 3, 4, 5 e 8. As colunas e os blocos determinam onde cada um deles vai, e a linha se torna 957214386.
challenge icon

Para ir além

Em um killer sudoku, os grupos de células também precisam somar os valores indicados. Como você adicionaria essa regra à busca e a usaria para eliminar ramificações antecipadamente?

Redefinir código
def solveSudoku(board):
    # Escreva o código aqui

Teste #1

Argumento

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

Saída Esperada

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