Estoy intentando implementar un solucionador para el juego lights out. Tienes una cuadrícula de luces, cuando haces clic en una de ellas la luz que has pulsado y sus cuatro vecinas cambian de color, y la luz vuelve a empezar cuando se le acaban los colores. El objetivo es conseguir que todas las luces tengan un color determinado.
Como la forma en que cambian los colores es cíclica, pensé que podría implementarlo como un sistema de ecuaciones y hacer todos los cálculos mod n (siendo n el número de colores disponibles).
Este método funcionó en algunos rompecabezas, pero me quedé atascado en otros.
Represento el juego como un sistema de ecuaciones en una matriz aumentada y lo reduzco a la forma escalonada reducida utilizando la eliminación gaussiana. Como he dicho, en algunos casos esto ha funcionado bien. Sin embargo hay algunos casos (ejemplo a seguir) donde termino con una línea que no puedo reducir completamente, la razón es que, como estoy usando aritmética modular, algunos valores no tienen una inversa multiplicativa por lo que me quedo atascado.
He aquí un ejemplo: El juego mostrado aquí representa una cuadrícula de 4x4 con 4 colores disponibles. Aquí está la matriz tal y como empezó:
1100100000000000 3
1110010000000000 3
0111001000000000 2
0011000100000000 3
1000110010000000 3
0100111001000000 3
0010011100100000 0
0001001100010000 0
0000100011001000 0
0000010011100100 0
0000001001110010 2
0000000100110001 1
0000000010001100 3
0000000001001110 1
0000000000100111 0
0000000000010011 0
y esto es lo máximo que he conseguido reducir:
1000000000000333 2
0100000000003323 3
0010000000003233 0
0001000000003330 0
0000100000001232 2
0000010000002003 2
0000001000003002 3
0000000100002321 3
0000000010001320 1
0000000001003332 1
0000000000102333 0
0000000000010231 2
0000000000000220 2
0000000000002222 0
0000000000002222 0
0000000000000220 2
En este caso, la última línea, por ejemplo, es ...220 2
y no puedo averiguar cómo puedo reducirlo ya que no puedo simplemente dividir por 2 (2 no tiene inverso multiplicativo en z4). Intente lo que intente, siempre termino con un 2 inicial en una fila. Estoy absolutamente seguro de que existe una solución para el juego (yo mismo lo resolví correctamente), pero no estoy seguro de si me estoy perdiendo algo aquí, o simplemente que el método simplemente no funciona para todos los casos.
Gracias
Editar: Se han corregido las matrices del ejemplo. Había incoherencias al final. Me he dado cuenta de que cualquier incoherencia allí significa que no hay solución. En el ejemplo actualizado sí existe una solución con seguridad, y esto hace que no haya incoherencias al final. Sin embargo, sigo sin poder resolverlo