Kode Warna CSS acak

10

Posting blog ini tentang menghasilkan kode warna CSS acak dalam JavaScript memiliki beberapa solusi untuk menghasilkan warna acak dalam JavaScript. Yang terpendek yang dapat saya temukan adalah ini:

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

Jika Anda tidak terbiasa dengan kode warna CSS, baca dokumentasi di sini.

Bisakah kita berbuat lebih baik? Bagaimana dengan bahasa lain?

Mohsen
sumber
Milikmu rusak, kau hilang +setelah'#'
Pintu Gerbang
1
Anda dapat menghapus slice dengan melakukan ini#'+(Math.random()*0xffffff|0).toString(16)
Griffin
1
Untuk apa "0xffffff" dibutuhkan? Saya tidak melihat banyak perbedaan dalam hasil tanpa itu.
path411
4
@ path411 Secara teoritis, Math.random().toString(16)dapat menghasilkan representasi dengan kurang dari 6 digit hex setelah titik desimal (hexa), dalam hal ini fungsi akan terputus. Misalnya, 0,1658172607421875 menjadi 0,2A73 dalam hex.
primo

Jawaban:

26

PHP 23 byte

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

Di mana ÿkarakter 255. Bitwise dan akan memotong string yang dikembalikan dari md5, yang sudah dalam format heksadesimal.

primo
sumber
7
Ini adalah salah satu solusi favorit saya di situs ini.
Griffin
7

Tiga kode karakter juga valid, jadi saya dapat menyimpan beberapa karakter ( 4095 == 0xfff):

Ruby, 24 23 22 18

'#%03x'%rand(4095)

Jika saya harus menggunakan yang 6-char, maka:

Ruby, 28 27 26 24 20

Memotong satu karakter karena 8**8-1 == 0xffffff

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

Berkat chron untuk string format, menghemat 4 karakter!


Menyontek (dengan mengingat xkcd ini ):

Ruby / JS / Python / Perl / banyak lagi, 6 (atau 5)

"#a83"

Saya yakinkan Anda, saya membuatnya secara acak!

Versi yang lebih meriah:

"red"
Gagang pintu
sumber
Anda tidak perlu tanda kurung untuk panggilan metode di Ruby, bukan?
Mohsen
@Mohsen Ya, tapi Ruby jadi bingung dan mengira aku menelepon to_spada 4095jika saya menghilangkan mereka.
Gagang Pintu
Anda bisa mendapatkannya hingga 20 dengan string format sprintf:'#%06x'%rand(8**8-1)
Paul Prestidge
@ sink Bagus, terima kasih! Editing
Doorknob
6

Javascript

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

Hanya sedikit lebih pendek di 42.

tristin
sumber
1
Saya tidak yakin mengapa ini diturunkan. Ini berfungsi dengan baik di setiap browser yang saya uji. +1
primo
5
#'+Math.random().toString(16).slice(-6)
Mohsen
@Mohsen bagus! Tidak tahu slice dapat melakukan hal negatif.
tristin
3

Ikan 79

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

Bukan solusi terpendek di dunia, tetapi menyenangkan untuk kode :)

Ini juga bukan distribusi yang seragam, tetapi semua output memiliki probabilitas non-nol 7 dan F kemungkinan besar adalah digit.

Output:

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

APL (17)

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

Penjelasan:

  • 6?16: 6 angka acak dari 1 hingga 16
  • ⎕D,⎕A: digit ( 0..9) diikuti oleh alfabet ( A..Z) (tetapi hanya 16 nilai pertama yang digunakan, yaitu 0..F)
  • '#',: tambahkan a #ke depan
marinus
sumber
6?16adalah 6 nilai acak yang tidak berulang , yang mempersempit ruang warna sedikit ...
mniip
1

Bash (51)

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