Reto:
Escriba un programa que genere un archivo gráfico de 1920 píxeles de ancho por 1080 píxeles de alto. Cada uno de los 2,073,600 píxeles dentro del gráfico debe ser un color único y no se deben repetir valores de color. Los colores deben especificarse en RGB y comenzar en 0,0,0 y contar hacia arriba en secuencia hacia 255,255,255. Encontrarás una imagen de 1920 x 1080 píxeles que contendrá muchos negros, azules y verdes solamente.
Por ejemplo, (una versión reducida más pequeña). Si la altura se estableció en 5 y el ancho se estableció en 5, se generaría un gráfico cuadrado de 25 píxeles y cada píxel sería un color único. La matriz de colores RGB se vería así:
Array (
[0] => Array
(
[0] => 0
[1] => 0
[2] => 0
)
[1] => Array
(
[0] => 0
[1] => 0
[2] => 1
)
[2] => Array
(
[0] => 0
[1] => 0
[2] => 2
)
[3] => Array
(
[0] => 0
[1] => 0
[2] => 3
)
[4] => Array
(
[0] => 0
[1] => 0
[2] => 4
)
[5] => Array
(
[0] => 0
[1] => 0
[2] => 5
)
[6] => Array
(
[0] => 0
[1] => 0
[2] => 6
)
[7] => Array
(
[0] => 0
[1] => 0
[2] => 7
)
[8] => Array
(
[0] => 0
[1] => 0
[2] => 8
)
[9] => Array
(
[0] => 0
[1] => 0
[2] => 9
)
[10] => Array
(
[0] => 0
[1] => 0
[2] => 10
)
[11] => Array
(
[0] => 0
[1] => 0
[2] => 11
)
[12] => Array
(
[0] => 0
[1] => 0
[2] => 12
)
[13] => Array
(
[0] => 0
[1] => 0
[2] => 13
)
[14] => Array
(
[0] => 0
[1] => 0
[2] => 14
)
[15] => Array
(
[0] => 0
[1] => 0
[2] => 15
)
[16] => Array
(
[0] => 0
[1] => 0
[2] => 16
)
[17] => Array
(
[0] => 0
[1] => 0
[2] => 17
)
[18] => Array
(
[0] => 0
[1] => 0
[2] => 18
)
[19] => Array
(
[0] => 0
[1] => 0
[2] => 19
)
[20] => Array
(
[0] => 0
[1] => 0
[2] => 20
)
[21] => Array
(
[0] => 0
[1] => 0
[2] => 21
)
[22] => Array
(
[0] => 0
[1] => 0
[2] => 22
)
[23] => Array
(
[0] => 0
[1] => 0
[2] => 23
)
[24] => Array
(
[0] => 0
[1] => 0
[2] => 24
)
)
Reglas:
Se puede usar cualquier lenguaje de programación para generar la imagen.
La respuesta con más votos a favor gana.
Los colores solo deben usarse una vez.
El píxel en la posición 0,0 debe comenzar con el color 0,0,0
Los colores deben estar dentro del rango de color real de 24 bits.
La imagen debe tener un tamaño de 1920 x 1080 píxeles.
Los colores deben estar en formato RGB.
Usar una biblioteca para generar la imagen está bien.
La salida debe estar en el formato de un archivo gráfico, por ejemplo, output.png
La salida como texto que representa los valores de color no cuenta, el código debe generar un archivo gráfico.
El tamaño del archivo de la imagen de salida no importa.
Debe poder ver la salida abriéndola como un gráfico en el navegador web de Chrome.
Me impresionaría si logra hacer esto con un código realmente corto, su programa también genera el tiempo en segundos transcurridos para generar la imagen incrustada dentro de la imagen superpuesta en los píxeles secuenciales, su programa genera la imagen en 10 segundos. Me impresionaría mucho si su programa genera la imagen en 1 segundo.
fuente
x==y==0
parece un poco arbitrario. En cualquier caso, es ambiguo porque estas coordenadas podrían referirse a la esquina superior izquierda o inferior izquierda de la imagen.Respuestas:
Python - 660+ bytes
Versión incremental
Tamaño completo: http://www.pictureshack.net/images/57626_all_colors.png (4.52MB)
Esta es una imagen basada en un conjunto fractal de Julia . Cada color se agrega a la imagen de forma incremental, aunque hay una cantidad sustancial de cálculo previo.
Versión de luminosidad
Tamaño completo: http://www.pictureshack.net/images/95389_all_colors4.png (5.24MB)
He agregado una opción para iterar cada color por luminosidad, en lugar de por índice. Esto no califica como "contar" desde cero, pero parece ser un requisito laxo. Es interesante que estos dos ordenamientos expongan estructuras completamente diferentes en la imagen. Para usar esto, establezca la
use_luminosity
bandera enTrue
.Fuente
Requiere PIL .
Tenga cuidado : esto tardará varios minutos en ejecutarse. Usar PyPy con Pillow se ejecuta en aproximadamente una quinta parte del tiempo de CPython con PIL, por lo que lo recomendaría, si es posible.
Editar : actualizado para que
#000000
esté en la esquina superior izquierda, como se especifica.Editar : se agregó una bandera para iterar los colores por luminosidad.
Editar : cambió a cálculos complejos nativos y pesos de luminosidad enteros, que son un poco más rápidos.
Soluciones en las que trabajé antes de que el criterio principal se convirtiera en concurso de popularidad
PHP - 161 bytes
Esto va para la salida más rápida posible. No se utiliza ninguna biblioteca, solo un encabezado precalculado y salida directa de bytes. Se ejecuta en menos de 2 segundos en mi comp. Al incrementar en 256 en lugar de 1 , produce un efecto de pseudo gradiente, sin necesidad de computación real. La única desventaja es que ( 0, 0 ) no es negro, pero el resultado se ve mucho mejor.
ob_start();
yob_end_flush();
no son estrictamente necesarios, pero el almacenamiento en búfer de la salida hace que se ejecute mucho más rápido.Otros incrementos interesantes incluyen:
17: http://i.stack.imgur.com/ieyyZ.png
103: http://i.stack.imgur.com/WD2wa.png
326: http://i.stack.imgur.com/c4DSF. png
557: http://i.stack.imgur.com/eTTWE.png
943: http://i.stack.imgur.com/7rrmR.png
2125: http://i.stack.imgur.com/Ct1kM .png
Y muchos otros. Aunque, la mayoría de los patrones que se parecen a algo se parecen a rayas de algún tipo
PHP - 105 bytes
Versión temeraria de desprecio.
Content-type
encabezado roto , Chrome hará todo lo posible para averiguar qué se envió. En este caso, lo identifica correctamente comoimage/bmp
. Las últimas versiones de FireFox e IE también pueden reparar el encabezado roto.BM
,I5S2
yCS
generarán unNOTICE
error. Para evitar la corrupción de la imagen,php.ini
será necesario configurar el informe de errores para evitar esto (por ejemploerror_reporting = E_ALL & ~E_NOTICE
).PHP-CLI - 83 bytes
Ejecutar directamente desde la línea de comandos y canalizar a un archivo (por ejemplo
$ php all-colors.php > out.bmp
), noContent-type
es necesario ningún encabezado. El archivo resultante es idéntico a la versión de 105 bytes y se puede ver en Chrome.fuente
C con la biblioteca de gráficos GD (¿err, aproximadamente 2.5 KB?)
Las reglas no prohibían modificar una imagen existente. Hice un programa para reemplazar todos los píxeles de una imagen con valores RGB secuenciales de
#000000
a#1fa3ff
, y estoy bastante satisfecho con los resultados. Esto es lo que produjo de una foto publicada en Flickr por Michael Carian ( cc-by-sa 2.0 ):(La imagen de salida sin formato es bastante grande (5.6 MB) )
Aquí hay un primer plano de la esquina superior izquierda (ampliado 400%):
El tiempo de procesamiento es de aproximadamente 3 segundos para una imagen de este tamaño:
y sí, todos los píxeles son de diferentes colores:
(
identify
es una utilidad ImageMagick; la-format %k
opción cuenta el número de colores únicos en una imagen)Aquí está el código fuente:
fuente
C ++, 750 bytes
Una resolución completa PNG (5.1MB)
El código crea una colección de todos los enteros de 0-1080 * 1920, luego los ordena por brillo general. Luego crea un conjunto de Mandelbrot y clasifica las posiciones según su iteración y valor de escape. Luego recorre ambos conjuntos, asignando colores en orden de oscuro a brillante a los valores de Mandelbrot de menor a mayor. Finalmente, escribe una imagen BMP de 32 bits por píxel en el nombre de archivo de salida especificado como parámetro de línea de comando.
El código no está completamente desarrollado, pero no se hará mucho más pequeño.
fuente
C - 854 bytes (cuando se exprime)
Originalmente tenía algo con esquinas cian, magenta y amarillo y gradaciones suaves de colores que se veían muy bien, pero no cumplía con las especificaciones.
Lo siguiente cumple con las especificaciones: usa los "primeros" 2,073,600 colores, sin repeticiones, y el negro en la esquina superior izquierda.
Cómo funciona es genial. Construye una matriz con los colores, luego los ordena vertical y horizontalmente por diferentes criterios un par de veces. El resultado final son transiciones agradables entre azul y verde y entre oscuro y claro. Tarda aproximadamente 1,5 segundos en ejecutarse. Compilar usando:
gcc -o many many.c -lm
y ejecutar usando:./many > many.ppm
FYI, esta fue la imagen original ...
Y para aquellos interesados en el código utilizado para generar esta imagen:
fuente
./a.out | hexdump | head
muestra7d ff de
muchas veces repetidas), (2) no utiliza valores secuenciales RGB de a000000
través1dffff
y (3) píxel en (x = 0, y = 0) no es negro. (Aunque no puedo ver el punto de (3) yo mismo).Ruby, 109
EDITAR: Debo señalar que envié esto cuando la pregunta todavía estaba etiquetada con código de golf , antes de que se convirtiera en un concurso de popularidad, así que estaba buscando un código corto. Esto no es muy imaginativo, pero creo que es una presentación válida.
Los valores de color varían de
00 00 00
a1f a3 ff
, incrementándose en1
, por lo que la falta dered
resultados no es sorprendente.Por el costo de agregar 1 carácter a la longitud del código fuente (reemplazar
<<8
con<<11
), se puede obtener el siguiente resultado. Esto cubre más rango del espectro a costa de lablue
resolución. Se incrementa a través del espacio RGB a ocho veces la velocidad. Los valores de color varían de00 00 00
afd 1f f8
.fuente
Raqueta
Nunca utilicé la programación orientada a objetos de raqueta antes (paso de mensaje), así que no estoy seguro de que esto sea óptimo, pero parece que hace el trabajo.
Al no usar los 3 primeros bits en el canal rojo, obtengo los tres colores en mi imagen de resultado.
Brainfuck
El código imprime una imagen BMP de 24 bits en STDOUT para intérpretes BF de celda de 8 bits. Crea la misma imagen que la versión Racket. Está basado en la versión pnm.
Ubuntu viene con
bf
eso tiene celdas de 8 bits:Versión antigua que viola la posibilidad de abrir desde Chrome. Crea un archivo .pnm que es compatible con la mayoría de los visores de imágenes.
fuente
La primera versión actualizada no tenía todos los colores únicos en un espacio de 24 bits:
Mathematica: 110
Verificación de reglas:
El primer píxel es negro:
Todos los colores son únicos:
Mathematica: 146Toma 14.778 segundos.
Verificación de reglas:
El primer píxel es negro:
Todos los colores son únicos:
fuente
Python - 104
Esta es la versión, que habría sido para el desafío del código de golf. Como solo aumenta el valor de 0 a 2073599, contiene solo colores únicos.
Python - 110
Como no me gustó la versión anterior (el rango de color no se usa por completo), probé algo como lo siguiente:
Python - 122
Otra extensión de lo anterior:
fuente
i.show()
se puede usar para abrir la imagen en el visor predeterminado. No existe un requisito estricto de que se guarde en un archivo..show()
me funciona. No se por que. : PProcesamiento, 301
Este no es un intento de la solución más concisa, pero mantiene todo el control para lograr la disposición de colores deseada. Sí, los colores no son consecutivos, pero eso no es divertido.
fuente
0,0
sea RGB0,0,0
. Veo31,31,31
. De hecho, toda la columna cero parece ser de ese color.Visual Basic .NET, 273 bytes
Esto genera un archivo de 5.61 MB:
El código anterior es una versión comprimida de este código más legible. Se eliminaron espacios para guardar bytes.
Enlace a la imagen: http: //µ.pw/k
fuente
ImageMagick - Convertir 119
Usemos la
convert
caja de herramientas de ImageMagick para crear imágenes. Se ejecuta en 0 segundos. Se juega golf a 119 caracteres. Superpongo dos gradientes (rojo-azul y negro-blanco) los convierto a HSL y de nuevo a RGB.Se pueden encontrar ejemplos de superposición de degradado en las páginas del manual de ImageMagick .
fuente
identify -format %k o.png
. Tengo 1762920, no 2073600PHP, 507
Probablemente necesitará aumentar la cantidad de memoria asignada a PHP para poder ejecutarla. Utiliza GD. Toma alrededor de 9 segundos para generar la imagen.
Enlace a la imagen de salida: http://i.stack.imgur.com/AAKqW.png
Véalo en la web: http://ben-paton.co.uk/portfolio/pixel.php?w=1920&h=1080
fuente
DELPHI / PASCAL (Versión # 1), 361 bytes
fuente
Tcl / Tk, 149
150fuente
Java
411386 + 24 bytesGolfed
Sin golf
Resultado
Explicación
Este no es mi intento de la solución más corta, sino la más portátil. Solo dejó la importación para BufferedImage porque el otro no guardó bytes. En lugar de cargar la imagen en un JPanel y escribir en ella, guardé el tiempo que lleva desde el principio hasta escribir en el disco como nombre de archivo. Para mí, esto tomó como resultado nombres de archivo de aproximadamente ~ 110 ms, mientras que el tiempo desde el principio hasta el final generalmente tomó ~ 500 ms. Por último, debería ser independiente de la plataforma, ya que probé tanto en Windows como en una máquina virtual de Ubuntu y funcionó (escribe el archivo en su escritorio). Tenía que tener la declaración de devolución debido a la basura de la sintaxis invocable. Aunque estoy trabajando en la solución, dudo que encuentre una mejor implementación por mi cuenta debido a los ahorros de usar lyw para mis bucles for. Yo diría que medio segundo para Java no es tan malo.
Pero creo que todavía está validado, ya que todavía puede abrirse con Chrome, simplemente se abre automáticamente en su visor PNG predeterminado (versión no probada en máquinas basadas en Unix).
Soy consciente de los posibles bytes guardados, pero principalmente los he omitido para calificar para bonos. Si se solicita, puedo subir ejemplos más cortos y específicos de la plataforma. Gracias.
Editar
Se eliminó el bloque Try Catch innecesario y la declaración de retorno con formato incorrecto para reducir ~ 30 bytes.
Eliminado
BufferedImage.TYPE_INT_RGB
porque es literalmente solo 1.fuente