Inspirado en /puzzling/24334/to-catch-a-thief
Se le proporciona una cuadrícula n
by n
(en n
sí misma es entrada opcional) llena de 0
sy 1
s (o cualquier otro carácter de su elección). Su objetivo es hacer que cada celda sea igual ( 0
o bien 1
). Puede realizar una serie de movimientos como se define a continuación (observe la diferencia con el enlace Puzzling SE):
- Selecciona una celda.
- Cada celda en la misma fila y columna (excepto la celda misma) se cambia a su opuesto.
0
a1
y1
a0
.
Produzca la cantidad mínima de movimientos necesarios para completar la tarea. Si no se puede resolver, envíe cualquier cosa excepto un número entero no negativo. El código más corto gana.
Data de muestra
1 0 0
0 0 0
0 0 0
-1
1 1 1
1 1 1
1 1 1
0
1 0 1
0 1 0
1 0 1
1
1 1 1 1
0 0 0 0
0 0 0 0
1 1 1 1
2
0 1 0 1
1 0 1 0
1 0 1 0
0 1 0 1
2
code-golf
grid
puzzle-solver
path-finding
fantasmas_en_el_código
fuente
fuente
1000
(reorganizado como un cuadrado, no importa cómo).Respuestas:
Matlab 171 bytes
La entrada debe ser una matriz 2d, por lo que la llamaría así
c([1,1,1,1;0,0,0,0;0,0,0,0;1,1,1,1])
(los puntos y comas comienzan una nueva fila). Esta función simplemente fuerza bruta todos los movimientos posibles, por lo que tenemos un tiempo de ejecución deO(2^(n^2))
.Como esta hecho
Esto se hace eligiendo todas las formas posibles para llenar otra matriz del mismo tamaño con unos y cero, esto es básicamente contar en binario, donde cada entrada de la matriz representa una cierta potencia de 2.
Luego realizamos los movimientos en esas celdas que son 1, esto se hace mediante la suma (mod 2) de dos convoluciones bidimensionales con un vector de unos de tamaño 1xn y nx1.
Finalmente, decidimos si esos movimientos realmente produjeron el resultado deseado, calculando la desviación estándar de todas las entradas. La desviación estándar es solo ceros si todas las entradas son iguales. Y cada vez que encontramos el resultado deseado, lo comparamos con el número de movimientos de soluciones anteriores. La función volverá
inf
si el problema dado no se puede resolver.¿Matemáticas?
¡Realmente vale la pena señalar que todos esos movimientos juntos generan un grupo abeliano! Si alguien realmente logra calificar esos grupos, hágamelo saber.
Versión de golf:
Versión completa (con la salida de los movimientos reales).
fuente
Perl 5, 498 bytes
Esto acepta 'n' y el resultado deseado, y genera el recuento, o 'X' si no hay ninguno.
Por ejemplo:
da
2
. Solo funcionará cuando n ^ 2 <= 64, entoncesn <= 8
. Aunque es bastante lento incluso con n tan bajo como 5. Construye una matriz ^ 3 bit, y ordena una matriz 2 ^ (n ^ 2) de antemano, porque ¿ por qué no ?He desperdiciado un par de avances de línea aquí para facilitar la lectura :
fuente