Me gusta la curva de Hilbert .
Su tarea para este desafío es tomar una imagen (estrictamente una imagen cuadrada donde todos los lados tienen una potencia de dos píxeles de ancho) y desentrañarla línea por línea en forma de zigzagueo y descifrarla en una curva pseudo-Hilbert .
Desentrañar
Para desentrañar, comenzará con el píxel en la esquina superior izquierda y viajará a la derecha hasta llegar al borde de la imagen. Una vez que haya alcanzado el borde de la imagen, se moverá hacia la siguiente fila y comenzará a viajar hacia la izquierda hasta que vuelva a tocar el borde. Continuará desentrañando fila por fila cambiando la dirección cada vez para obtener una curva continua. Esto debería verse como un juego de serpientes bien jugado
El resultado de desentrañar debería ser un orden de píxeles que incluye cada píxel exactamente una vez
Replanteando
Una vez que haya ordenado los píxeles, los reorganizará en un nuevo lienzo de igual tamaño siguiendo el camino de una curva pseudo-Hilbert. Para una 2**n
imagen cuadrada de tamaño, debe usar la enésima iteración de la curva pseudo-hilbert. Cada píxel se colocará exactamente en un punto en el nuevo lienzo. Debe volver a dibujar la imagen para que el punto originalmente en la parte superior izquierda (el comienzo de nuestra curva de serpiente) permanezca allí y el punto en la parte inferior derecha (el final de nuestra curva de serpiente) se coloque en la parte superior derecha.
I / O
Su programa o función debe tomar una imagen de restricciones especificadas a través de métodos estándar y generar otra imagen a través de métodos estándar.
Tanteo
Este es un programa de código de golf con la menor cantidad de bytes ganados.
Ejemplos
Entrada
Salida
Entrada
Salida
Entrada
Salida
También recomiendo probar en una imagen en blanco o en color sólido para asegurarse de que no le faltan píxeles.
¡No dude en incluir sus propios resultados en sus respuestas!