Случайный CSS Цветовой код

10

Этот пост в блоге о генерации случайных цветовых кодов CSS в JavaScript имеет несколько решений для генерации случайного цвета в JavaScript. Самое короткое, что я могу найти, это:

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

Если вы не знакомы с цветовым кодом CSS, прочтите документацию здесь.

Можем ли мы сделать лучше? А как насчет других языков?

Мохсен
источник
Ваш сломан, вы пропустили +после'#'
дверная ручка
1
Вы можете удалить срез, сделав это#'+(Math.random()*0xffffff|0).toString(16)
Griffin
1
Для чего нужен "0xffffff"? Я не вижу большой разницы в моих результатах без этого.
path411
4
@ path411 Теоретически, Math.random().toString(16)может создать представление с числом шестнадцатеричных цифр меньше, чем после (hexa) десятичной точки, и в этом случае функция будет прерываться. Например, 0,1658172607421875 становится 0,2A73 в гексе .
Примо

Ответы:

26

PHP 23 байта

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

Где ÿнаходится символ 255. Побитово и будет обрезать возвращаемую строку md5, которая уже находится в шестнадцатеричном формате.

Примо
источник
7
Это одно из моих любимых решений на сайте.
Гриффин
7

Также допустимы трехсимвольные коды, поэтому я могу сохранить некоторые символы ( 4095 == 0xfff):

Рубин, 24 23 22 18

'#%03x'%rand(4095)

Если мне нужно использовать 6-символьный, то:

Рубин, 28 27 26 24 20

Сбрил один персонаж, потому что 8**8-1 == 0xffffff

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

Спасибо chron за форматирование строки, сохраняя 4 символа!


Обман (с учетом этой полосы xkcd ):

Ruby / JS / Python / Perl / многое другое, 6 (или 5)

"#a83"

Уверяю вас, я генерировал это случайно!

Еще более обманчивая версия:

"red"
Дверная ручка
источник
Вам не нужны скобки для вызовов методов в Ruby, верно?
Мохсен
@Mohsen Да, но Руби запутывается и думает , что я звоню to_sна , 4095если я их опускаю.
Дверная ручка
Вы можете уменьшить его до 20 с помощью строки формата sprintf:'#%06x'%rand(8**8-1)
Paul Prestidge
@chron Хорошо, спасибо! Редактирование
Дверная ручка
6

Javascript

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

Просто немного короче в 42.

tristin
источник
1
Я не уверен, почему это было понижено. Он отлично работает в каждом браузере, который я тестировал. +1
primo
5
#'+Math.random().toString(16).slice(-6)
Мохсен
@ Мохсен, хорошо! Не знал, что срез может сделать негативы.
Тристин
3

Рыба 79

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

Не самое короткое решение в мире, но было весело писать код :)

Это также не равномерное распределение, но все выходы имеют ненулевую вероятность 7, а F - наиболее вероятные цифры.

Выходы:

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
источник
1

APL (17)

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

Объяснение:

  • 6?16: 6 случайных чисел от 1 до 16
  • ⎕D,⎕A: цифры ( 0..9), за которыми следует алфавит ( A..Z) (но когда-либо используются только первые 16 значений, т.е.0..F )
  • '#',: добавить #в начало
Мэринус
источник
6?16хотя это 6 неповторяющихся случайных значений, это немного сужает цветовое пространство ...
mniip
1

Баш (51)

od -N4 -An -tx /dev/urandom | cut -c2-7 | sed s/^/#/
raspi
источник