Code couleur CSS aléatoire

10

Ce billet de blog sur la génération de codes de couleur CSS aléatoires en JavaScript propose plusieurs solutions pour générer une couleur aléatoire en JavaScript. Le plus court que je puisse trouver est le suivant:

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

Si vous n'êtes pas familier avec le code couleur CSS, consultez les documentations ici.

Pouvons-nous faire mieux? Et les autres langues?

Mohsen
la source
Le vôtre est cassé, il vous manque un +après la'#'
Poignée de porte
1
Vous pouvez supprimer la tranche en procédant ainsi#'+(Math.random()*0xffffff|0).toString(16)
Griffin
1
À quoi sert le "0xffffff"? Je ne vois pas beaucoup de différence dans mes résultats sans cela.
path411
4
@ path411 Théoriquement, Math.random().toString(16)peut produire une représentation avec moins de 6 chiffres hexadécimaux après le point décimal (hexa), auquel cas la fonction se briserait. Par exemple, 0.1658172607421875 devient 0.2A73 en hex.
primo

Réponses:

26

PHP 23 octets

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

ÿest le caractère 255. Au niveau du bit et tronquera la chaîne renvoyée md5, qui est déjà au format hexadécimal.

primo
la source
7
C'est l'une de mes solutions préférées sur le site.
Griffin
7

Trois codes de caractères sont également valides, je peux donc enregistrer quelques caractères ( 4095 == 0xfff):

Rubis, 24 23 22 18

'#%03x'%rand(4095)

Si je dois utiliser un 6 caractères, alors:

Rubis, 28 27 26 24 20

Rasé un personnage parce que 8**8-1 == 0xffffff

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

Merci à chron pour la chaîne de format, économisant 4 caractères!


Tricher (avec cette bande xkcd à l'esprit):

Ruby / JS / Python / Perl / beaucoup plus, 6 (ou 5)

"#a83"

Je vous assure, je l'ai généré au hasard!

Une version encore plus cheat:

"red"
Poignée de porte
la source
Vous n'avez pas besoin de parenthèses pour les appels de méthode dans Ruby, non?
Mohsen
@Mohsen Oui, mais Ruby est confus et pense que je vous appelle to_sà 4095si je les laisse de côté.
Poignée de porte
Vous pouvez le ramener à 20 avec une chaîne au format '#%06x'%rand(8**8-1)
sprintf
@chron Nice, merci! Montage
Poignée de porte
6

Javascript

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

Un peu plus court à 42 ans.

tristin
la source
1
Je ne sais pas pourquoi cela a été rejeté. Cela fonctionne bien dans tous les navigateurs que j'ai testés. +1
primo
5
#'+Math.random().toString(16).slice(-6)
Mohsen
@Mohsen nice! Je ne savais pas qu'une tranche pouvait faire des négatifs.
tristin
3

Poissons 79

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

Pas la solution la plus courte au monde, mais c'était amusant de coder :)

Ce n'est pas non plus une distribution uniforme, mais toutes les sorties ont une probabilité non nulle 7 et F sont les chiffres les plus probables.

Les sorties:

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
la source
1

APL (17)

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

Explication:

  • 6?16: 6 nombres aléatoires de 1 à 16
  • ⎕D,⎕A: les chiffres ( 0..9) suivis de l'alphabet ( A..Z) (mais seules les 16 premières valeurs sont utilisées, ie 0..F)
  • '#',: ajouter un #devant
marinus
la source
6?16est 6 valeurs aléatoires non répétitives cependant, qui rétrécit un peu l'espace colorimétrique ...
mniip
1

Coup (51)

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