Случайный 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.


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

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.