Zufälliger CSS-Farbcode

10

Dieser Blog-Beitrag zum Generieren von zufälligen CSS-Farbcodes in JavaScript bietet mehrere Lösungen zum Generieren einer zufälligen Farbe in JavaScript. Das kürzeste, das ich finden kann, ist das Folgende:

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

Wenn Sie mit dem CSS-Farbcode nicht vertraut sind lesen Sie hier die Dokumentationen.

Können wir es besser machen? Was ist mit anderen Sprachen?

Mohsen
quelle
Deiner ist kaputt, du vermisst einen +nach dem'#'
Türknauf
1
Sie können die Scheibe entfernen, indem Sie dies tun#'+(Math.random()*0xffffff|0).toString(16)
Griffin
1
Wofür wird das "0xffffff" benötigt? Ohne das sehe ich keinen großen Unterschied in meinen Ergebnissen.
Path411
4
@ path411 Theoretisch Math.random().toString(16)kann eine Darstellung mit weniger als 6 Hexadezimalstellen nach dem (Hexa-) Dezimalpunkt erstellt werden. In diesem Fall würde die Funktion unterbrochen. Zum Beispiel wird 0,1658172607421875 zu 0,2A73 in hex.
Primo

Antworten:

26

PHP 23 Bytes

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

Wo ÿist das Zeichen 255. Bitweise und schneidet die zurückgegebene Zeichenfolge ab md5, die bereits im hexadezimalen Format vorliegt .

primo
quelle
7
Dies ist eine meiner Lieblingslösungen auf der Website.
Griffin
7

Drei Zeichencodes sind ebenfalls gültig, sodass ich einige Zeichen ( 4095 == 0xfff) speichern kann :

Ruby, 24 23 22 18

'#%03x'%rand(4095)

Wenn ich habe ein 6-char man verwenden, dann gilt :

Ruby, 28 27 26 24 20

Rasierte einen Charakter ab, weil 8**8-1 == 0xffffff

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

Dank chron für die Formatzeichenfolge, die 4 Zeichen spart!


Betrug (mit Blick auf diesen xkcd-Streifen ):

Ruby / JS / Python / Perl / viele mehr, 6 (oder 5)

"#a83"

Ich versichere Ihnen, ich habe es zufällig generiert!

Eine noch betrügerischere Version:

"red"
Türknauf
quelle
Sie brauchen keine Klammern für Methodenaufrufe in Ruby, oder?
Mohsen
@Mohsen Ja, aber Ruby ist verwirrt und denkt, ich rufe to_san, 4095wenn ich sie weglasse.
Türknauf
Sie können es mit einer Sprintf-Format-Zeichenfolge auf 20 reduzieren:'#%06x'%rand(8**8-1)
Paul Prestidge
@chron Schön, danke! Bearbeiten
Türknauf
6

Javascript

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

Mit 42 nur etwas kürzer.

Tristin
quelle
1
Ich bin mir nicht sicher, warum dies abgelehnt wurde. Es funktioniert gut in jedem Browser, den ich getestet habe. +1
Primo
5
#'+Math.random().toString(16).slice(-6)
Mohsen
@Mohsen schön! Ich wusste nicht, dass Slice Negative bewirken kann.
Tristin
3

Fisch 79

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

Nicht die kürzeste Lösung der Welt, aber es hat Spaß gemacht zu programmieren :)

Es ist auch keine gleichmäßige Verteilung, aber alle Ausgänge haben eine Wahrscheinlichkeit ungleich Null 7 und F sind höchstwahrscheinlich Ziffern.

Ausgänge:

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
quelle
1

APL (17)

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

Erläuterung:

  • 6?16: 6 Zufallszahlen von 1 bis 16
  • ⎕D,⎕A: die Ziffern ( 0..9) gefolgt vom Alphabet ( A..Z) (aber nur die ersten 16 Werte werden jemals verwendet, dh 0..F)
  • '#',: Fügen Sie ein #vorne hinzu
Marinus
quelle
6?16ist 6 nicht wiederholte zufällige Werte, die den Farbraum ein wenig verengt ...
mniip
1

Bash (51)

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