Código de cores CSS aleatório

10

Esta postagem no blog sobre a geração de códigos de cores CSS aleatórios em JavaScript tem várias soluções para gerar uma cor aleatória em JavaScript. O mais curto que posso encontrar é o seguinte:

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

Se você não estiver familiarizado com o código de cores CSS, leia a documentação aqui.

Podemos fazer melhor? E outras línguas?

Mohsen
fonte
O seu está quebrado, você está perdendo um +após o'#'
Maçaneta da porta
11
Você pode remover a fatia fazendo isso ##'+(Math.random()*0xffffff|0).toString(16)
Griffin
11
Para que é necessário o "0xffffff"? Não estou vendo muita diferença nos meus resultados sem ela.
Path411 17/09/2013
4
@ path411 Teoricamente, Math.random().toString(16)pode produzir uma representação com menos de 6 dígitos hexadecimais após o ponto decimal (hexa). Nesse caso, a função seria interrompida. Por exemplo, 0.1658172607421875 se torna 0.2A73 em hexadecimal.
Primo

Respostas:

26

PHP 23 bytes

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

Onde ÿestá o caractere 255. Bit a bit e truncará a string retornada md5, que já está no formato hexadecimal.

primo
fonte
7
Esta é uma das minhas soluções favoritas no site.
Griffin
7

Também são válidos três códigos de caracteres, para que eu possa salvar alguns caracteres ( 4095 == 0xfff):

Ruby, 24 23 22 18

'#%03x'%rand(4095)

Se eu tiver que usar um de 6 caracteres, então:

Ruby, 28 27 26 24 20

Raspou um caractere porque 8**8-1 == 0xffffff

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

Obrigado ao chron pela string de formato, economizando 4 caracteres!


Trapaça (com esta faixa xkcd em mente):

Ruby / JS / Python / Perl / muito mais, 6 (ou 5)

"#a83"

Garanto-lhe, eu o gerei aleatoriamente!

Uma versão ainda mais cheatier:

"red"
Maçaneta da porta
fonte
Você não precisa de parênteses para chamadas de método em Ruby, certo?
Mohsen 16/09
@Mohsen Sim, mas o Ruby fica confuso e acha que eu estou chamando to_ssobre 4095se eu omiti-los.
Maçaneta
Você pode '#%06x'%rand(8**8-1)
reduzi
@chron Nice, obrigado! Edição
Maçaneta da porta
6

Javascript

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

Apenas um pouco menor aos 42 anos.

Tristin
fonte
11
Não sei por que isso foi prejudicado. Funciona bem em todos os navegadores que testei. +1
primo
5
#'+Math.random().toString(16).slice(-6)
Mohsen
@Mohsen nice! Não sabia que fatia poderia fazer negativos.
TRISTIN
3

Peixe 79

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

Não é a solução mais curta do mundo, mas foi divertido codificar :)

Também não é uma distribuição uniforme, mas todas as saídas têm uma probabilidade diferente de zero 7 e F são os dígitos mais prováveis.

Saídas:

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
Triturador
fonte
1

APL (17)

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

Explicação:

  • 6?16: 6 números aleatórios de 1 a 16
  • ⎕D,⎕A: os dígitos ( 0..9) seguidos pelo alfabeto ( A..Z) (mas apenas os 16 primeiros valores são usados, ou seja 0..F)
  • '#',: adicione um #à frente
marinus
fonte
6?16é 6 não-repetição valores aleatórios, porém, que estreita o espaço de cores um pouco ...
mniip
1

Bash (51)

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