¿Cómo podría resolver este rompecabezas de Sudoku?

responder
—–
413958726
875261394
926347518
284796153
357182469
691534287
768415932
132679845
549823671
—–

¿Cómo resolverlo?
Bueno, ¿por qué debería jugar sudoku si puedo resolverlo usando el script python en un segundo?

Code (muy feo, escribió cuando era un principiante jugando leetcode Sudoku Solver | LeetCode OJ):

copia de importación

# 整理 tablero 输入 的 形式
def process_question_input (placa):
datos = []
para mí en el tablero:
a = []
para j en i:
si j == “.”:
a.append (0)
más:
a.append (int (j))
data.append (a)
devolver datos

# 整理 成 tablero 输出 形式
def process_question_output (datos):
salida = []
para línea en datos:
a = “”
para número en línea:
a + = str (número)
output.append (a)
salida de retorno

# 解数 独
def give_answer (datos, posibilidades, posición):
si posición == – 1:
devolver datos

para entrar en posibilidades [posición]:
data_processing = copy.deepcopy (datos)
data_processing [int (position / 9)] [position% 9] = entrada

posibilidades_ahora = build_Possibility (procesamiento de datos)
position_now = find_easiest (posibilidad_ahora)

si position_now == – 2:
Seguir
juez = dar respuesta (procesamiento de datos, posibilidades_ahora, posición_ahora)
si juez == Ninguno:
Seguir
más:
juez de retorno

# 计算 每 格 的 所有 可能性
def build_Possibility (datos):
posibilidades = []
para i en rango (9): # 第 几 行
para j en el rango (9): # 第 几 列
si los datos [i] [j]> 0:
posibilidades.append ([])
más:
a = [1,2,3,4,5,6,7,8,9]
para k en el rango (9): # 去除 横向 , 纵向 和 方格
tratar:
a.remove (datos [i] [k])
excepto:
pasar
tratar:
a.remove (datos [k] [j])
excepto:
pasar
tratar:
a.remove (datos [int (i / 3) * 3 + int (k / 3)] [int (j / 3) * 3 + int (k% 3)])
excepto:
pasar
si los datos [i] [j] == 0 y len (a) == 0:
a = “incorrecto”;
posibilidades. apéndice (a)
posibilidades de retorno

def find_easiest (posibilidades): # 如果 数 独 已经 完成 , 返回 -1, 否则 返回 最 容易 下手 的 位置
si está “mal” en posibilidades:
volver -2
a = [len (i) si len (i)> 0 más 100 para i en posibilidades]
min_a = min (a)
if (min (a) == 100):
volver -1
más:
retorno a.index (min (a))

Solución de clase:
# @param board, una matriz 2D de 9 × 9
# Resuelve el Sudoku modificando la placa de entrada en su lugar.
# No devuelve ningún valor.

def solveSudoku (auto, tablero):
data = process_question_input (placa)
output_data = copy.deepcopy (give_answer (data, build_Possibility (data), find_easiest (build_Possibility (data))))
finalAnswer = process_question_output (output_data)
para i en rango (0,9):
tablero [i] = finalAnswer [i]
para mí en el tablero:
imprimir (i)

a = Solución ()
a.solveSudoku ([‘… 958 …’, ‘875261394’, ‘92.3475.8’, ‘… 796 …’, ‘3.71824.9’, ‘. 9.534 …’, ‘7..41 ….’, ‘1.267 ..4. ‘,’ 54.82…. ‘])


Voy a usar R para Fila con 1 a 9 de arriba a abajo y C para Columna con 1 a 9 de izquierda a derecha para explicar esto. R1C7 tiene que ser ‘algún’ dígito, ya que no puede estar vacío. Puede eliminar los dígitos uno por uno, por ejemplo, no puede ser 1, 4, 5, 6, 7 u 8 debido a los dígitos en R1. No puede ser 2, 6, 8 o 9 debido a los dígitos en C7. No puede ser 6 u 8 debido a los dígitos en el cuadro en el que está la celda. Tomando todo eso juntos, el único dígito que puede ser es 3. Si aplica este enfoque general a algunas otras celdas como R3C8 y luego R3C9 después de obtener R3C8, debería ser fácil terminarlo. Si no, o si desea más orientación sobre Sudoku, solo envíeme un comentario o un correo electrónico a [correo electrónico protegido] . Siempre estoy interesado en ayudar y guiar a los solucionadores interesados.

Bueno, para empezar, solo un 3 puede ir en la fila 1, columna 7. Ya lo has indicado con tus marcas de lápiz.

Esto aclara la solución para la fila 9, columna 7, y así sucesivamente.

observe el primer cuadrado en este cuadro y el octavo cuadrado en este cuadro. Como solo 3 pueden ir en esa casilla, coloque 3 allí y dado que solo 7 pueden ir en el octavo bloque, coloque siete. ahora que tiene un siete, quite ese 7 del noveno cuadro y coloque el 2 allí porque ese es el único número que puede colocar allí. en el tercer cuadro, elimine 2 y 3 y coloque 9 allí, ya que nuevamente es el único número que puede ir allí. Anuncio, probablemente puede resolver el resto.

¿Y qué aplicación es esta?

Puse este Sudoku en un sitio web que resuelve cualquier Sudoku. Y me muestra los pasos para resolverlo.

Primera fila, séptima columna, puede completar solo 3 porque 3 no puede aparecer en la primera fila y la novena columna. El resto lo puedes llenar fácilmente.