Entrada : un color hexadecimal RGBA c(ej. FFFF00FF) Y un entero> 0 y <1000 n(ej. 200).
Salida : Raw bytes de un archivo PNG de tal manera que cuando la salida se guarda en un archivo y se abre en un visor de imágenes, una npor nimagen llena de color cen la pantalla.
Especificación : Su programa debería generar exactamente :
- un encabezado PNG ( 89504E470D0A1A0Aen hexadecimal)
- un IHDRfragmento que contiene estas especificaciones:- ancho: la entrada anterior n
- altura: la entrada anterior n
- profundidad de bits: 8(RGBA)
- tipo de color: 6(truecolor con alfa)
- método de compresión: 0
- método de filtro: 0
- método entrelazado: 0
 
- ancho: la entrada anterior 
- uno o más IDATfragmentos que contienen los datos de la imagen (una imagen sólida de color ingresada previamentec); puede estar comprimido o sin comprimir
- un IENDfragmento de imagen final
Más detalles disponibles en Wikipedia , en el sitio W3 , o mediante una búsqueda en Google.
Restricciones :
- No puede utilizar ninguna biblioteca de imágenes o funciones diseñadas para trabajar con imágenes de ningún tipo.
- Su programa debe ejecutarse en menos de 3 minutos y generar un archivo de menos de 10 MB para todas las entradas (verificación de sanidad).
- Este es el código de golf , ¡así que el código más corto en bytes ganará!
                    
                        code-golf
                                graphical-output
                                
                    
                    
                        Pomo de la puerta
fuente
                
                fuente

999x999archivo tiene más de 30720 píxeles, por lo que parece contradictorio.Respuestas:
Perl, 181
El tamaño es de 180 bytes y
-pse necesita la opción (+1). La puntuación es entonces 181.Los argumentos se proporcionan a través de STDIN en una línea, separados por un espacio, el color como valor hexadecimal (16 caracteres) y el número de píxeles para ancho / alto, por ejemplo:
El tamaño del archivo es de 832 bytes. La imagen de tamaño máximo (n = 999) con el mismo color tiene 6834 bytes (muy por debajo de 10 MB).
La solución usa dos bibliotecas:
use Digest::CRC crc32;para los valores CRC32 en el fragmento finaliza.use IO::Compress::Deflate deflate;para comprimir los datos de la imagen.Ambas bibliotecas no están relacionadas con las imágenes.
Sin golf:
Ediciones
use IO::Compress::Deflate':all';se sustituye poruse Compress::Zlib;. Este último exporta la función desinflarcompresspor defecto. La función no necesita referencias como argumentos y también devuelve el resultado directamente. Eso permite deshacerse de la variable$o.Gracias por la respuesta de Michael :
Función
k:packse puede eliminar una llamada de mediante el uso de la plantillaNa*Npara el primeropacken la función.packLa plantillaNNCVcon cuatro valores se optimizaNNC3ncon seis valores.Gracias por el comentario de VadimR con muchos consejos:
use String::CRC32;es más corto queuse Digest::CRC crc32;.y///c-4es más corto que-4+y///c.CH*con la repetición en el valor.$imediante el uso de una referencia de valor.-p) con la coincidencia del separador de espacio/ /. Entonces$`entra la primera opción y entra el segundo argumento$'.-ptambién imprime automáticamente$_."\cZ"es más corto que"\x1a".Mejor compresión
A costa del tamaño del código, los datos de la imagen pueden comprimirse aún más, si se aplica el filtrado.
Tamaño de archivo sin filtrar para
FFFF0FF200: 832 bytesFiltro
Sub(diferencias de píxeles horizontales): 560 bytesFiltro
Subpara la primera línea yUppara las líneas restantes: 590 bytesPrimera línea sin filtrar, luego filtro
Up: 586 bytesTambién
Compress::Zlibse puede sintonizar; El nivel de compresión más alto se puede establecer mediante una opción adicional para el nivel de compresión en funcióncompressa un costo de dos bytes:El tamaño del archivo de ejemplo
yellow200.pngsin filtrado disminuye de 832 bytes a 472 bytes. Aplicado al ejemplo conSubfiltro, el tamaño del archivo se reduce de 560 bytes a 445 bytes (pngcrush -bruteno se puede comprimir más).fuente
-p. Además de las ideas en la respuesta de Michael (NA*Ny lasNNCVplantillas), - lasString::CRC32exportaciones de forma predeterminada,y///c-4está bien, laCH*plantilla,$idesaparece\cZ, las palabras vacías están bien-py/ /;coloca los argumentos en prematch y postmatch. Me pregunto si me perdí algo y la puntuación puede ser inferior a 200 :)use Compress::Zlib;y obtuve ≈ 10% por debajo de 200.PHP 214
No soy un experto en PHP, hay lugar para jugar al golf. Las propinas son bienvenidas.
Generar un archivo PNG:
Genere flujo base64 (pegue el resultado en la barra de direcciones de su navegador)
Versión sin golf:
fuente
Python, 252 bytes
Este script toma entrada de argv. Ejecute este script desde la línea de comando, como
python 27086.py deadbeef 999fuente