Código de color CSS aleatorio

10

Esta publicación de blog sobre la generación de códigos de color CSS aleatorios en JavaScript tiene múltiples soluciones para generar un color aleatorio en JavaScript. Lo más corto que puedo encontrar es esto:

'#'+(Math.random()*0xffffff).toString(16).slice(-6)

Si no está familiarizado con el código de color CSS, lea la documentación aquí.

¿Podemos hacerlo mejor? ¿Qué hay de otros idiomas?

Mohsen
fuente
El tuyo está roto, te estás perdiendo un +después del'#'
Pomo de
1
Puede eliminar el corte haciendo esto#'+(Math.random()*0xffffff|0).toString(16)
Griffin
1
¿Para qué se necesita el "0xffffff"? No veo mucha diferencia en mis resultados sin él.
path411
44
@ path411 Teóricamente, Math.random().toString(16)puede producir una representación con menos de 6 dígitos hexadecimales después del punto decimal (hexa), en cuyo caso la función se rompería. Por ejemplo, 0.1658172607421875 se convierte en 0.2A73 en hexadecimal.
primo

Respuestas:

26

PHP 23 bytes

#<?=md5(rand())&ÿÿÿÿÿÿ;

Donde ÿestá el carácter 255. Bitwise y truncará la cadena devuelta md5, que ya está en formato hexadecimal.

primo
fuente
77
Esta es una de mis soluciones favoritas en el sitio.
Griffin
7

Tres códigos de caracteres también son válidos, por lo que puedo guardar algunos caracteres ( 4095 == 0xfff):

Rubí, 24 23 22 18

'#%03x'%rand(4095)

Si tengo que usar uno de 6 caracteres, entonces:

Rubí, 28 27 26 24 20

Afeitado un personaje porque 8**8-1 == 0xffffff

'#%06x'%rand(8**8-1)

¡Gracias a chron por la cadena de formato, ahorrando 4 caracteres!


Hacer trampa (con esta tira xkcd en mente):

Ruby / JS / Python / Perl / mucho más, 6 (o 5)

"#a83"

Te lo aseguro, lo generé al azar!

Una versión aún más tramposa:

"red"
Pomo de la puerta
fuente
No necesita paréntesis para las llamadas a métodos en Ruby, ¿verdad?
Mohsen
@Mohsen Sí, pero Rubí se confunde y cree que estoy llamando to_sen 4095si se omiten.
Pomo de la puerta
Puede bajarlo a 20 con una cadena de formato sprintf:'#%06x'%rand(8**8-1)
Paul Prestidge
@chron Nice, gracias! Edición
Pomo de la puerta
6

Javascript

'#'+Math.random().toString(16).substr(2,6)

Solo un poco más corto a los 42.

Tristin
fuente
1
No estoy seguro de por qué esto fue rechazado. Funciona bien en todos los navegadores que he probado. +1
primo
55
#'+Math.random().toString(16).slice(-6)
Mohsen
@Mohsen bien! No sabía que la rebanada podía hacer cosas negativas.
Tristin
3

Pescado 79

vnnnnnnnn 
601234567;
>xxxxxxxx<
 89""""""?
 nnABCDEF:
 vv""""""-
 vvoooooo1
 >>>>>>>>^

No es la solución más corta del mundo, pero fue divertido codificar :)

Tampoco es una distribución uniforme, pero todas las salidas tienen una probabilidad distinta de cero 7 y F son dígitos más probables.

Salidas:

python fish.py randomColor.fish
07FFF7

python fish.py randomColor.fish
07EFD7

python fish.py randomColor.fish
366F67

python fish.py randomColor.fish
977FD7

python fish.py randomColor.fish
97F7F7

python fish.py randomColor.fish
87F6FF
Cruncher
fuente
1

APL (17)

'#',(⎕D,⎕A)[6?16]

Explicación:

  • 6?16: 6 números aleatorios del 1 al 16
  • ⎕D,⎕A: los dígitos ( 0..9) seguidos del alfabeto ( A..Z) (pero solo se utilizan los primeros 16 valores, es decir 0..F)
  • '#',: agregue una #al frente
marinus
fuente
6?166 es que no se repite valores aleatorios sin embargo, que se estrecha el espacio de color un poco ...
mniip
1

Golpe (51)

od -N4 -An -tx /dev/urandom | cut -c2-7 | sed s/^/#/
raspi
fuente