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
- Hoy era el cumpleaños de Sally, y sus amigos decidieron sorprenderla con un pastel de chocolate. Durante la celebración, ella asesinó a todos sus amigos. Entonces, ¿por qué los mató Sally?
- ¿Cómo puede una persona resolver un cubo de Rubik con los ojos cerrados?
- ¿Cuántas pelotas de ping pong hay ahora en el aire en todo el mundo?
- ¿Cuántas preguntas máximas necesitas hacer para saber el nombre de la celebridad?
- A y B deciden reunirse entre la 1 pm y las 2 pm en un día determinado. Quien llegue primero no esperará al otro por más de 15 minutos. ¿Cuál es la probabilidad de que se encuentren ese día y por qué?
# 整理 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…. ‘])