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
0
si el espacio en blanco está en una esquina o en un borde.
Repetir (3.) r
veces.
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
n
se elegirá para que divida las longitudes de los lados de la imagen.
Un último punto:
Una animación que .gif
muestra todo el proceso es muy bienvenida.
Propongo usar la siguiente imagen (que es 1024x768
), con n=16
y r=100
como 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=4
yr=1
Pasos 1 y 2
Paso 3 : en línea, 2 rectángulos a la izquierda
move a random number of contiguous rectangles
puede 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)