Losowy kod koloru CSS

10

Ten post na blogu o generowaniu losowych kodów kolorów CSS w JavaScript ma wiele rozwiązań do generowania losowych kolorów w JavaScript. Najkrótsze, jakie mogę znaleźć, to:

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

Jeśli nie znasz kodu kolorów CSS, przeczytaj dokumentację tutaj.

Czy możemy zrobić lepiej? Co z innymi językami?

Mohsen
źródło
Twoje jest zepsute, brakuje Ci +po'#'
Klamka
1
Możesz usunąć wycinek, robiąc to#'+(Math.random()*0xffffff|0).toString(16)
Griffin,
1
Do czego potrzebny jest „0xffffff”? Bez tego nie widzę dużej różnicy w moich wynikach.
path411
4
@ path411 Teoretycznie Math.random().toString(16)może tworzyć reprezentację z mniej niż 6 cyframi szesnastkowymi po przecinku (heksa), w którym to przypadku funkcja się zepsuje. Na przykład 0,1658172607421875 staje się 0,2A73 w układzie szesnastkowym.
primo

Odpowiedzi:

26

PHP 23 bajty

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

Gdzie ÿjest znak 255. Bitowo i obetnie zwrócony ciąg znaków md5, który jest już w formacie szesnastkowym.

primo
źródło
7
To jedno z moich ulubionych rozwiązań na stronie.
Griffin,
7

Poprawne są również trzy znaki kodowe, więc mogę zapisać niektóre znaki ( 4095 == 0xfff):

Ruby, 24 23 22 18

'#%03x'%rand(4095)

Gdybym miał użyć jednego 6-char, a następnie:

Ruby, 28 27 26 24 20

Ogoliłem jedną postać, ponieważ 8**8-1 == 0xffffff

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

Dzięki chron dla formatu ciąg, zapisując 4 znaki!


Oszukiwanie (mając na uwadze ten pasek xkcd ):

Ruby / JS / Python / Perl / wiele więcej, 6 (lub 5)

"#a83"

Zapewniam cię, wygenerowałem to losowo!

Jeszcze lepsza wersja:

"red"
Klamka
źródło
Nie potrzebujesz nawiasów do wywołań metod w Ruby, prawda?
Mohsen
@Mohsen Tak, ale Ruby pogubi i myśli Dzwonię to_sna 4095gdybym je pominąć.
Klamka
Możesz sprowadzić go do 20 za pomocą łańcucha formatu sprintf:'#%06x'%rand(8**8-1)
Paul Prestidge 17.09.13
@chron Fajnie, dzięki! Edycja
Klamka
6

JavaScript

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

Trochę krótszy w wieku 42 lat.

tristyna
źródło
1
Nie jestem pewien, dlaczego zostało to odrzucone. Działa dobrze w każdej testowanej przeglądarce. +1
primo
5
#'+Math.random().toString(16).slice(-6)
Mohsen
@Mohsen nice! Nie wiedziałem, że plasterek może robić negatywy.
tristin,
3

Ryba 79

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

Nie jest to najkrótsze rozwiązanie na świecie, ale kodowanie było fajne :)

Nie jest to również równomierny rozkład, ale wszystkie wyjścia mają niezerowe prawdopodobieństwo 7, a F to najprawdopodobniej cyfry.

Wyjścia:

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
źródło
1

APL (17)

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

Wyjaśnienie:

  • 6?16: 6 liczb losowych od 1 do 16
  • ⎕D,⎕A: cyfry ( 0..9), po których następuje alfabet ( A..Z) (ale zawsze używane są tylko pierwsze 16 wartości, tj. 0..F)
  • '#',: dodaj a #z przodu
marinus
źródło
6?16jest 6 nie powtarzających się losowych wartości, które nieco zawężają przestrzeń kolorów ...
mniip
1

Bash (51)

od -N4 -An -tx /dev/urandom | cut -c2-7 | sed s/^/#/
raspi
źródło