Antecedentes / Descripción
Nota: como señala @HelkaHomba, las identificaciones reales de GitHub no son realmente aleatorias sino que se basan en el hash de un nombre de usuario
El avatar predeterminado de GitHub es una imagen de 5x5 píxeles. Se elige un color al azar y luego se rellenan píxeles aleatorios en un lado (derecho o izquierdo, tamaño 2x5) usando ese color. Luego, ese lado se copia y se voltea hacia el otro lado, a través del eje y. Los píxeles restantes que no se rellenan son # F0F0F0 o rgb (240,240,240).
Los píxeles de la columna central (tamaño 1x5) se rellenan al azar, utilizando el mismo color que antes.
Salida
Nota: para este desafío, ignoraremos el espacio que encierra los avatares de GitHub
El programa debería generar un archivo de imagen de 5x5 píxeles. Ver http://meta.codegolf.stackexchange.com/a/9095/42499 para detalles.
Ejemplos
Nota: estos obviamente fueron ampliados de 5x5 para que pueda verlos
¡Buena suerte!
fuente
Respuestas:
Pyth - 27 bytes
Obviamente no funciona en línea, pero puede hacer que imprima códigos de color aquí .
fuente
Perl 5 , 77 bytes
Esto no es competitivo ya que solo tiene una paleta de 256 colores, solo funciona en terminales que admiten códigos de escape ANSI y en realidad no genera una imagen cuadrada de 5 píxeles, pero pensé que lo publicaría de todos modos, ya que fue divertido jugar al golf abajo.
Nota: el
\e
es en realidad ASCII char\x1B
.Uso
Explicación
Nada particularmente inteligente, excepto quizás:
$-
para redondear automáticamente el número de color para usar en la secuencia de escape, usado en lugar de$n=0|rand 254
.Salida de ejemplo
fuente
MATL ,
3629 bytesEsto guarda el resultado en el archivo
a.png
.Reemplazar
'a'
por2
en el código muestra la imagen (ampliada) en lugar de guardar un archivo:Aquí hay un ejemplo de salida:
Explicación
fuente
En realidad, 53 bytes
Pruébalo en línea!
En realidad es malo en el procesamiento de cadenas. Creo que he mencionado eso antes. Este programa genera una imagen P6 netpbm usando CP437, como la siguiente:
Esto se puede convertir a PNG usando ImageMagick:
Versión PNG ampliada:
Explicación:
fuente
ppm
imagen.Python,
167164155148 bytesSalida como ppm
range(5)
a" "*5
print
map
ya que solostr(p)
se usóexec""*5
cambiofor _ in " "*5:
Alguna mejora sobre el antiguo código basado en cadenas:
fuente
Swift 2.3,
593585 bytesActualizar
Swift 3, 551 bytes
Estoy en WWDC y acabo de obtener la versión beta de Xcode 8 con Swift 3. Apple hizo algunas de las llamadas de CoreGraphics más "Swifty", y puedo reducir el bytecount.
Código Swift 2 Ungolfed:
Esta respuesta asume que UIKit está disponible y usa el marco Cocoa Touch.
Algunos ejemplos de imágenes de salida:
Sé que no puedo competir con la mayoría de las otras respuestas, pero quería intentarlo como un desafío personal. Definitivamente hay margen de mejora con esta respuesta, pero creo que será difícil reducirlo a unos cientos de bytes debido a la longitud de los nombres de los métodos de escritura de imágenes UIKit y CoreGraphics. Opté por escribir un archivo PNG real en lugar de los valores PPM como un ejercicio para mí, pero definitivamente sería posible obtener respuestas más cortas si usara el formato PPM.
Ya comienzan como una pérdida por tener que declarar una variable de semilla
srand48
contime
. Elegí estoarc4random()
oarc4random_uniform()
porque, en última instancia, perdería más bytes con ellos. Siembro el rng para usarlodrand48
para generar un color aleatorio y elegir cuándo escribir un color en un píxel.CGSize
vsCGSizeMake
yCGRect
vsCGRectMake
:Cambio entre las funciones de la API C en línea y sus extensiones Swift para encontrar el constructor más corto para cada una.
CGSizeMake
termina siendo más corto queCGSize()
, yCGRect
termina siendo más corto queCGRectMake()
:Tendría que crear
CGFloat
sx
, yy
debido a la naturaleza del bucle. Realmente no estoy entusiasmado con el ciclo 2D y si la igualdad se verifica, pero realmente estaba luchando por encontrar un camino más corto. Definitivamente hay espacio para recortar algunos bytes aquí.Llamar
CGContextFillRects
con una matriz deCGRect
estructuras es más barato que llamarCGContextFillRect
dos veces con dos valores diferentes, por lo que guardo algunos bytes con la matriz y el puntero.También ahorro 27 bytes al no llamar
UIGraphicsEndImageContext()
. Si bien esto normalmente sería un "error" en el código de producción, no es necesario para este programa de juguetes.Colores:
Los colores también son difíciles de manejar, ya que estoy creando
UIColor
objetos pero necesito escribir unCGColor
tipo opaco en cada píxel. El código más corto que encontré para crear un color al azar era utilizar elUIColor
constructor y obtener laCGColor
de aquelUIColor
. Lo mismo con el blanco. Si estuviera usando Cocoa Framework en lugar de Cocoa Touch, podría guardar algunos bytes usandoCGColorGetConstantColor()
, pero desafortunadamente ese método no está disponible en el SDK de Cocoa Touch.Escribiendo en el archivo:
Escribir en un archivo toma casi 100 bytes. No estoy seguro de cómo optimizar esto. En algunos sistemas, dependiendo de sus permisos, es posible que deba usar el directorio Documentos, que sería aún más largo:
Definitivamente abierto a nuevas optimizaciones.
Edición 1: guardado algunos bytes al reorganizar algunas declaraciones de variables.
fuente
Mathematica,
1051029894 bytes
es el operador de transposición .Edición 1: Guardado 3 bytes reemplazando
Round
+RandomReal
conRandomInteger
Edición 2: guardado 4 bytes reemplazando
RandomInteger
conRandomChoice
Edición 3: guardado 4 bytes reemplazando
RandomColor
yGrayLevel
conRandomReal
fuente
MATLAB, 102 bytes
Hola, esta es mi solución matlab:
La entrada
x
de la función es el nombre del archivo de salida. Por ejemplo:produce una imagen png llamada 'output.png'.
Aquí los resultados de algunas ejecuciones de este código.
fuente
Dyalog APL,
4342 bytes'P3',5 5 256,∊(3⍴240)(?3⍴256)[⌈(⊢+⌽)?5 5⍴0]
'P3',5 5a,∊(3⍴240)(?3⍴a←256)[⌈(⊢+⌽)?5 5⍴0]
De derecha a izquierda:
?5 5⍴0
genera una matriz de 5 × 5 de números aleatorios entre 0 y 1 ( pero nunca 0 o 1 )(⊢+⌽)
es un tren que agrega la matriz con su reflejo⌈
techo, devuelve 1 o 2 para cada elemento(3⍴240)(?3⍴256)
colores - blanco-ish y uno aleatorio[ ]
usa cada elemento de la matriz como un índice en colores'P3',5 5 256,∊
aplanar y agregar encabezadofuente
PHP, 236 bytes
Sé que este es un viejo desafío, pero me gusta desafiarme a mí mismo.
Sin golf:
Salida de muestra:
fuente
Javascript ES6, 296 bytes
Nota: no produce un archivo, dibuja en un lienzo.
Véalo en acción en este JS Fiddle .
fuente