En lugar de inclinar hacia la izquierda y hacia la derecha usaré barra inclinada (/) y barra diagonal inversa (\).
Tomemos un cuadrado con las esquinas (x1) (11), donde x es cualquier cosa menos 1. Hay uno en la esquina superior izquierda. Supongamos que la inclinación en ese cuadrado es barra inclinada, que conecta dos 1's. Esos 1 están "agotados" y todos los cuadrados que los tocan deben tener líneas que no toquen los números. Pero eso lleva a una situación imposible porque tendríamos un corte a la izquierda y debajo de nuestro cuadrado, lo que significa que el 1 restante toca dos inclinaciones. La conclusión: si tiene un cuadrado con tres 1's, entonces la línea en ese cuadrado debe tocar la esquina que no es 1. Esta regla puede no aplicarse en los bordes y esquinas, pero si tiene un 1 en la esquina debe dibujar la línea tocando esa esquina.
Los números 1 y 3 son simétricos y usando una lógica similar obtenemos otra regla: si tiene un cuadrado con tres 3, entonces la línea en ese cuadrado debe tocar dos de esos tres 3.
Existen reglas más generales, pero no se aplican en las esquinas. Debe haber cuadrados alrededor del cuadrado en cuestión. Tomemos un cuadrado de dos oponentes (x1) (1y), donde xey son cualquier cosa, incluido un no-number. Hay uno de esos dos cuadrados desde la esquina inferior izquierda.Supongamos que la inclinación en ese cuadrado es barra inclinada, que conecta dos 1's. Esos 1 están "agotados" y todos los cuadrados que los tocan deben tener líneas que no toquen los números. Pero eso lleva a un bucle alrededor de los 1's. La conclusión: si tiene un cuadrado con dos 1 opuestos, entonces la línea en ese cuadrado no debe tocar esos dos 1. Esta regla puede no aplicarse en los bordes de la placa.
Los números 1 y 3 son simétricos, pero la regla anterior emplea la regla "sin bucles", y no hay regla simétrica "sin bucles de líneas laterales", y por lo tanto no hay regla que tenga dos 3 opuestos.
Ahora que sabe qué línea toca el 1, puede concluir que ninguna otra línea puede tocarlo. Podemos generalizar este razonamiento para seguir las siguientes reglas de llenado: si un número x toca x líneas, entonces todos los demás cuadrados vecinos tienen líneas que no tocan el número. Y simétricamente: si un número x es una esquina de (4-x) cuadrados con líneas que no tocan el número, entonces todos los demás cuadrados vecinos deben tener líneas que toquen el número.
Google buscando el término "Gokigen Naname" Encontré más reglas. Uno es aproximadamente dos 1 adyacentes (11), pero Mweerden ya lo cubrió.
Estas reglas no son suficientes para resolver el tablero. Hay otras reglas probablemente. Pero eventualmente el algoritmo puede tener que adivinar.
Sin duda, necesitará una cierta cantidad de prueba y error. Puede descartar algunas opciones temprano, pero no creo que esto se pueda hacer sin retroceder. –
@EAGER_STUDENT: Supongo que quiere decir [este juego] (http://manpages.ubuntu.com/manpages/lucid/man6/slant.6.html)? ¿No puedes echar un vistazo al código fuente para ver cómo lo resuelven? – James
@AakashM sí, puedo resolver las cuadrículas simples lógicamente. En cuadrículas simples habrá números como 0, 4 o 1 en la esquina. Con esto como una herramienta lo resolveré. Cuando el ancho o la altura aumentan, el problema es que estas 3 cosas no están presentes en los rompecabezas más difíciles. –