Palabras clave descriptivas (para búsqueda): hacer equivalentes dos matrices, superponer, ordenar, buscar
Desafío
Santa ha tenido una historia de elfos robando regalos de su bóveda en el pasado, por lo que este año diseñó una cerradura que es muy difícil de romper, y parece haber mantenido a los elfos fuera de este año. ¡Desafortunadamente, ha perdido la combinación y tampoco sabe cómo abrirla! Afortunadamente, te ha contratado para escribir un programa para encontrar la combinación. No tiene que ser el más corto, ¡pero necesita encontrarlo lo más rápido posible!
Tiene un horario muy estricto y no puede permitirse esperar mucho tiempo. Su puntaje será el tiempo de ejecución total de su programa multiplicado por el número de pasos que su programa produce para la entrada de puntaje. La puntuación más baja gana.
Especificaciones
El bloqueo es una matriz cuadrada de 1s y 0s. Se establece en una disposición aleatoria de 1s y 0s y debe establecerse en un código específico. Afortunadamente, Santa recuerda el código requerido.
Hay algunos pasos que puede realizar. Cada paso se puede realizar en cualquier submatriz contigua (es decir, debe seleccionar una submatriz que esté completamente limitada por una esquina superior izquierda e inferior derecha) (puede ser una submatriz no cuadrada):
- Girar 90 grados a la derecha *
- Girar a la izquierda 90 grados *
- Girar 180 grados
- Realice un ciclo de cada
n
elemento de fila hacia la derecha o hacia la izquierda (envolturas) - Ciclo cada
m
elemento de la columna hacia arriba o hacia abajo (wraps) - Voltear horizontalmente
- Voltear verticalmente
- Voltee la Diagonal Principal *
- Voltee el antia diagonal principal *
* solo si la submatriz es cuadrada
Por supuesto, también puede realizar estos pasos en toda la matriz. Dado que 1s y 0s solo se pueden intercambiar en la matriz, pero el valor de un cuadrado no se puede cambiar directamente, el número de 1s y 0s es el mismo para la configuración inicial y final.
Especificaciones de formato + Reglas
Se le dará la entrada como dos matrices cuadradas (posición inicial y posición final) en cualquier formato razonable que desee. La salida debe ser una secuencia de estos pasos en cualquier formato legible. Como no se trata de código de golf, conviértalo en un formato fácilmente verificable, pero ese no es un requisito estricto. Puede elegir tomar la longitud lateral de las matrices en la entrada si lo desea.
Su programa se ejecutará en mi computadora (Linux Mint, detalles exactos de la versión disponibles a pedido si alguien le importa: P) y lo cronometraré en función del tiempo transcurrido entre el momento en que presiono "enter" en la línea de comandos y cuando el comando sale.
Casos de prueba
1 0 0 1 0 0 0 0
0 1 1 0 -> 0 0 0 0
0 1 1 0 -> 1 1 1 1
1 0 0 1 1 1 1 1
- Toma toda la matriz. Ciclo cada columna hacia arriba 1.
- Tome las dos columnas del medio como una submatriz. Ciclo cada columna hacia abajo 2.
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 -> 0 1 1 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
- Toma toda la matriz. Ciclo cada columna hacia abajo 1.
- Toma la columna del medio. Ciclo hacia abajo 2.
- Toma las 2 primeras filas. Voltéalo verticalmente.
- Tome los 2 elementos más a la derecha de la fila superior. Intercambiarlos (girar a la derecha / izquierda 1, voltear horizontalmente).
- Tome los 2 elementos más a la izquierda de la fila superior. Intercambiarlos.
Puede haber métodos más eficientes, pero eso no importa. Siéntase libre de señalarlos en los comentarios si encuentra uno :)
Juzgar caso de prueba
Este caso de prueba se utilizará para juzgar su presentación. Si creo que una respuesta se está especializando demasiado para el caso de prueba, tengo derecho a repetir una entrada aleatoria y volver a juzgar todas las respuestas con el nuevo caso. El caso de prueba se puede encontrar aquí, donde la parte superior es el inicio y la parte inferior es la configuración deseada.
Si creo que las respuestas se están especializando demasiado, el MD5 del próximo caso de prueba es 3c1007ebd4ea7f0a2a1f0254af204eed
. (Esto está escrito aquí ahora mismo para liberarme de las acusaciones de hacer trampa: P)
Se aplican lagunas estándar. No se aceptarán respuestas. ¡Feliz codificación!
Nota: Me inspiré para esta serie de desafíos de Advent Of Code . No estoy afiliado a este sitio
Puede ver una lista de todos los desafíos de la serie mirando la sección 'Vinculados' del primer desafío aquí .
0
's y 641
' s, y hay256 choose 64 ≈ 1.9 × 10⁶¹
matrices alcanzables totales . (que es comparable a un Megaminx, y es más grande que la venganza de Rubik, aunque mucho menos que el cubo de un profesor)