Évaluer la difficulté d'une grille de Sudoku en Python est un peu plus complexe, car cela implique de tenir compte de plusieurs facteurs, tels que le nombre de cases vides, la distribution de ces vides, et les techniques nécessaires pour résoudre la grille. Il n'existe pas de méthode standard ou universellement acceptée pour cela, mais je peux vous donner un exemple basique qui utilise une approche simple pour estimer la difficulté.
L'exemple suivant évalue la difficulté en fonction du nombre de cases vides et de la distribution des nombres dans la grille :
import numpy as np
def count_empty_cells(sudoku):
return sum(np.count_nonzero(row == 0) for row in sudoku)
def count_unique_numbers(sudoku):
unique_numbers = set()
for row in sudoku:
unique_numbers.update(row)
return len(unique_numbers) - (1 if 0 in unique_numbers else 0)
def evaluate_difficulty(sudoku):
empty_cells = count_empty_cells(sudoku)
unique_numbers = count_unique_numbers(sudoku)
if empty_cells > 60:
return "Très facile"
elif 50 < empty_cells <= 60:
return "Facile"
elif 36 < empty_cells <= 50:
return "Moyen"
elif 32 < empty_cells <= 36 and unique_numbers > 7:
return "Difficile"
else:
return "Très difficile"
# Exemple d'utilisation
sudoku = [
[5, 3, 0, 0, 7, 0, 0, 0, 0],
[6, 0, 0, 1, 9, 5, 0, 0, 0],
[0, 9, 8, 0, 0, 0, 0, 6, 0],
[8, 0, 0, 0, 6, 0, 0, 0, 3],
[4, 0, 0, 8, 0, 3, 0, 0, 1],
[7, 0, 0, 0, 2, 0, 0, 0, 6],
[0, 6, 0, 0, 0, 0, 2, 8, 0],
[0, 0, 0, 4, 1, 9, 0, 0, 5],
[0, 0, 0, 0, 8, 0, 0, 7, 9]
]
difficulty = evaluate_difficulty(sudoku)
print("Difficulté estimée:", difficulty)
Ce script est une approximation et ne prend pas en compte des aspects plus complexes du Sudoku comme les techniques de résolution avancées (par exemple, X-Wing, Swordfish, etc.). La difficulté réelle d'une grille pour un joueur humain peut varier considérablement en fonction de l'expérience et des compétences du joueur.