Resumen
El objetivo de este desafío es crear una versión de imagen deshecha de un rompecabezas de 15 rompecabezas / deslizamiento también llamado taquin en francés.
Detalles:
Dada una entrada compuesta de:
- una imagen,
- un número entero
n, - un otro número entero
r,
su programa o función, o cualquier otra cosa que se ajuste, debe generar la misma imagen ( es decir, el mismo tamaño y formato) que la entrada, pero que se sometió al siguiente proceso:
- divide la imagen en
n²rectángulos, - eliminar uno de esos rectángulos, al azar,
- mueva un número aleatorio de rectángulos contiguos desde la línea / columna afectada por el punto (2.) para que se llene el agujero creado y se genere otro en esta línea / columna. Este número puede ser
0si el espacio en blanco está en una esquina o en un borde.
Repetir (3.) rveces.
Aclaraciones:
- Si movió rectángulos desde la línea en el paso (3.), debe mover rectángulos desde la columna en la siguiente repetición,
- si movió rectángulos de izquierda a derecha en un paso de línea, se deben mover de derecha a izquierda en el siguiente paso de línea, lo mismo para columnas concernientes de arriba a abajo y de abajo a arriba,
- puede suponer que
nse elegirá para que divida las longitudes de los lados de la imagen.
Un último punto:
Una animación que .gifmuestra todo el proceso es muy bienvenida.
Propongo usar la siguiente imagen (que es 1024x768), con n=16y r=100como modelo, puede usar cualquier otra imagen (siempre que sea relevante y cumpla con las reglas de SE, por supuesto).
Tenga en cuenta que se aplican las políticas de lagunas legales.
Este es el código de golf , por lo que gana la presentación más corta.
Como se solicitó un ejemplo, aquí hay uno, hecho "a mano", con n=4yr=1
Pasos 1 y 2
Paso 3 : en línea, 2 rectángulos a la izquierda




move a random number of contiguous rectanglespuede ser 0 rectángulos? (sería un dolor hacer que el programa cambie el comportamiento cuando el espacio en blanco está en un borde / esquina)Respuestas:
Mathematica, 246 bytes
Función anónima. Contiene U + F3C7, correspondiente al
Transposeoperador de Mathematica . Esta función toma unImageobjeto y devuelve unImageobjeto.Animación de muestra, con
n=16yr=100Después de 5000 iteraciones:
Explicación
Inicialización
Almacene la
Nestfunción (operación repetida) enn.Almacene la
RandomIntegerfunción enk, y laReversefunción enq.Dividiendo la imagen
Particionar la imagen de entrada en (segunda entrada) ^ 2 mosaicos.
Genere dos
RandomIntegers entre 1 y la segunda entrada. Esto selecciona un mosaico aleatorio.Haz que el azulejo sea blanco. Almacenarlo en
i.Azulejos en movimiento
Genere dos enteros aleatorios de 0 a 1, y almacénelos en
tyr, respectivamente. Esto selecciona aleatoriamente la dirección.Definir función
o: la composición dettiempos de entrada .rveces.Aplicar
oa la entrada.Encuentra la columna de
i(imagen en blanco).Resta uno y encuentra un número entero aleatorio entre 0 y ese número. Esto elige al azar cuántas fichas mover.
Cuando dicho número de mosaicos ocurra antes de una
i(imagen blanca), cambie sus lugares.Invierta la
ofunción y aplíquela al resultado de la operación anterior. Esto anula y transpone la imagen.Bucle y ensamblaje de imagen
Repita el proceso anterior (tercera entrada) veces.
Pon las imágenes juntas.
fuente