Agregando otra respuesta para generar un sudoku de la dificultad deseada sobre la marcha.
Esto significa que a diferencia de otros enfoques el algoritmo se ejecuta sólo una vez y devuelve una configuración sudoku búsqueda de la dificultad deseada (con alta probabilidad dentro de un rango o con probabilidad = 1)
diversas soluciones para la generación de (y clasificación) una dificultad sudoku tiene que ver con human-based techniques and approaches, que puede ser fácilmente nominal.
Entonces uno (después de haber generado una configuración sudoku) re-resuelve el sudoku con el solucionador similar a la humana y dependiendo de las técnicas de la solucionador utilizada (por ejemplo pares, Ala-X, pez espada etc.) también se asigna una tasa de dificultad.
problemas con este enfoque (y los requisitos para el caso de uso que tenía)
Con el fin de generar un sudoku con dificultad dado, con el método anterior se necesita para resolver un sudoku dos veces (una vez con el algoritmo básico y una vez con el solucionador humano).
Uno tiene que (pre) generar muchos sudokus que solo pueden ser calificados como de dificultad después de ser resueltos por el solucionador humano. Entonces uno no puede generar un sudoku deseado sobre la marcha una vez.
El solucionador similar al humano puede ser complicado y en la mayoría de los casos (si no todos) está estrechamente vinculado a las cuadrículas de sudoku de 9x9. Por lo tanto, no es fácil generalizar a otros sudokus (por ejemplo, 4x4, 16x16, 6x6, etc.)
La calificación de dificultad de las técnicas similares a las humanas es muy subjetiva. Por ejemplo, ¿por qué se toma x-wing como más difícil que singles ocultos? (Personaly han resuelto muchos difíciles publicados Sudokus utilizados manualy y nunca tales técnicas)
fue utilizado Otro enfoque que tiene los siguientes beneficios:
- generaliza bien a sudokus arbitraria (9x9, 4x4, 6x6 , 16x16 etc.)
- La configuración de sudoku, con la dificultad deseada, se genera una vez y sobre la marcha
- La calificación de dificultad es baja.
Cómo funciona?
En primer lugar, el simple hecho de que cuanto más difícil es el rompecabezas, más tiempo tiene que resolverse.
Pero el tiempo que debe resolverse está íntimamente correlacionado con el número de pistas (datos) y con las alternativas promedio que deben investigarse por celda vacía.
La extensión de mi previous answer, se mencionó que para cualquier sudoku el número mínimo de pistas es una propiedad objetiva del puzzle (por ejemplo for 9x9 grids the minimum number of clues for having a valid sudoku is 17)
Uno puede comenzar a partir de ahí y calcular el número mínimo de pistas por la dificultad nivel (correlación lineal).
Además en cada paso del proceso de generación sudoku, uno puede asegurarse de que (a ser investigadas) las alternativas promedio por celda vacía está dentro de límites dados (como una función de la dificultad deseada)
Dependiendo de si el algoritmo utiliza la función de retroceso o no (para el caso de uso analizado, el algoritmo no realiza retrocesos) se puede alcanzar la dificultad deseada, ya sea con probabilidad = 1 o con alta probabilidad dentro de límites (respectivamente).
Las pruebas del sudokus generado con este algoritmo y calificación de dificultad en base a los enfoques anteriores (humano-como solucionador), muestran una correlación de tasas de dificultad deseadas y estimadas, más una mayor capacidad de generalización a configuraciones de sudoku arbitrarias.
(han utilizado esta línea sudoku solver (y también this one) para correlacionar las tasas de dificultad de la prueba de sudokus)
El código está disponible de on github sudoku.js (along with sample demo application), una versión a escala reducida de un crucigrama CrossWord.js constructor profesional en JavaScript, por el mismo autor
No, nunca he encontrado algo así. Parte del asunto es que la "dificultad" es muy relativa. – Mat
No creo que esto sea posible. La única técnica que conozco es hacer lo que mencionas: generar, nivelar, descartar si está fuera del rango de dificultad. Además, como dijo Mat, la dificultad es difícil de medir ya que los diferentes algoritmos resuelven diferentes maneras. – Ryan
Entiendo eso, pero la idea de "generar, puntuar, tirar, generar tasa, tirar, generar, conservar" parece tremendamente ineficiente. Además, al mirar todos los juegos que tienen la opción de crear un sudoku por dificultad (ej. Fácil, med, difícil) parecen hacerlo en una fracción de segundo, no parece muy probable que estén haciendo esto. . Especialmente los que están en dispositivos, como iphone o android. – ZachLHelms