Pensaste que el sudoku regular era difícil, ¡ahora prueba Killer Sudoku !
En el juego de Killer Sudoku, no tienes ningún número en absoluto. En cambio, se le dan regiones que se dice que suman un cierto número. Considere el siguiente ejemplo, de Wikipedia:
Y su solución:
El programa que escriba tomará un formato que consiste en una secuencia de 81 letras que representan regiones, seguidas de una secuencia de números. Luego, cada número en la secuencia representa la suma de los números en cada una de las regiones de letras, comenzando desde "A", "B", etc.
Luego generará una secuencia de 81 dígitos que representa la solución.
Por ejemplo, el ejemplo de rompecabezas anterior tendría la siguiente entrada:
AABBBCDEFGGHHCCDEFGGIICJKKFLMMINJKOFLPPQNJOORSPTQNUVVRSTTQWUUXXSYZWWaaXXSYZWbbbcc
3 15 22 4 16 15 25 17 9 8 20 6 14 17 17 13 20 12 27 6 20 6 10 14 8 16 15 13 17
Y el resultado resultante sería:
215647398368952174794381652586274931142593867973816425821739546659428713437165289
Puede suponer que la entrada es válida y que las regiones siempre aparecerán en orden por A, B, ..., Y, Z, a, b, ..., z.
(El código más corto que funciona gana).
fuente
Respuestas:
R - 378 caracteres
Asumiendo
378 caracteres:
tarda aproximadamente una hora en mi modesta PC para alcanzar la solución esperada, después de 2,964,690 iteraciones.
De-golf:
fuente
GolfScript, 138 caracteres
Este es un solucionador de sudoku asesino en GolfScript. Espera entrada en STDIN en dos filas como se muestra en el ejemplo anterior.
Tenga en cuenta: Dado que la descripción del rompecabezas no restringe el tiempo de ejecución, prefiero el tamaño de código pequeño a la velocidad. El código prueba todas las configuraciones de cuadrícula 9 ^ 81 para encontrar una solución que puede tomar algún tiempo en una computadora lenta ;-)
fuente
AABBCADEFFDDGGGG
6 7 4 8 2 3 10
Rubí, 970 caracteres
El código ruby anterior es opuesto a mi suscripción a GolfScript. Es bastante largo (y aún no está totalmente golfizado), pero está optimizado para la velocidad. El sudoku asesino dado anteriormente se resuelve en menos de un segundo (con mi versión original de Java fue solo unos pocos milisegundos). El solucionador en sí es una implementación básica del algoritmo DLX de Knuth.
La entrada debe darse como dos líneas en STDIN. Ejemplo (en línea ):
fuente