Mini Desafío: Zig Zag
No es primera vez que publico este desafío, pero seguramente hay muchos de ustedes que no lo conocen, vamos a ver si este tiene más éxito, considérenlo un calentamiento para el desafío de Junio :)
El desafío es el siguiente:
Producir un arreglo zig-zag.
Un arreglo zig-zag es un arreglo cuadrado de los primeros N2 enteros, donde los números van ordenados de menor a mayor distribuidos en forma de zig zag a lo largo de las anti diagonales de la matriz (ver la figura).
Por ejemplo, si N es 5, el programa debe producir este arreglo:
0 1 5 6 14
2 4 7 13 15
3 8 12 16 21
9 11 17 20 22
10 18 19 23 24
Aunque esto puede parecer un juego de ingenio, un tanto inútil, la verdad es que este tipo de arreglos es usado en el algoritmo de compresión de imágenes JPEG.
Desafío Avanzado: mi solución la describí en este artículo en LNDS hace unos años atrás, el desafío avanzado es escribir un algoritmo más eficiente que el que descrito ahí.