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?


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.


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"

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.


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

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

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/^/#/

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.