Вы веб-разработчик, и ваш начальник решил обновить веб-сайт компании. Он решил, что чем меньше цвет, тем лучше, но он хочет, чтобы сайт выглядел одинаково. Вы справедливо решаете, что он понятия не имеет, о чем говорит, но вы все равно попробуете, потому что вам скучно. Поскольку у компании есть тысячи веб-страниц, и у каждого из них есть свой собственный CSS, вы решаете написать скрипт для внесения необходимых изменений. Разбор HTML не требуется.
Все страницы в настоящее время используют строку, как rgb(255,0,0)
для цвета. Учитывая три десятичных значений , представляющих значения RGB атрибута CSS цвета (в таком порядке), возврат или печать кратчайшего строкового представления этого цвета, таким образом, что это полезное для CSS вот так: color:<your-result-here>;
.
Вот полная таблица допустимых CSS Color Keywords . Они не чувствительны к регистру.
Примеры:
Обратите внимание, что цвета могут быть определены с 12 или 24 битами. Шаблон #ABC
является более короткой версией #AABBCC
. Чак Норрис это цвет .
Ваша программа будет принимать только 3 целых числа, а не строку (за исключением «бонуса», упомянутого ниже).
0, 0, 0 -> #000 (same as #000000, but shorter)
255, 0, 0 -> red
0, 128, 128 -> TEAL
139, 0, 0 -> DarkRed (OR #8B0000)
72, 61, 139 -> #483D8B
255, 255, 254 -> #fffffe
255, 85, 255 -> #f5f (same as #ff55ff, but shorter)
Скоринг / Правила
- Самый короткий код выигрывает!
- Стандартные лазейки запрещены , за исключением встроенных модулей.
- -50% байт (бонус округляется в меньшую сторону), если вы принимаете любой * действительный селектор цвета и выводите самый короткий. Так
DarkSlateBlue
бы выход#483D8B
,#F00
выходыred
и т. Д.- * Это включает только RGB, шестнадцатеричные коды и имена.
- Обратите внимание, что некоторые цвета имеют альтернативные имена из-за X11 (как
Fuchsia
иMagenta
, или илиCyan
иAqua
). Альтернативные имена включены в связанный список CSS Color Keywords согласно стандарту W3.
- CSS3 завершен по Тьюрингу . Это стоило бы награды.
Редактировать:
- ПОЖАЛУЙСТА, ЗАПУСТИТЕ СВОЙ КОД ПО ИСПЫТАНИЯМ!
#000
? И если разрешено менее 6 цифр, почему бы и нет#0
? w3schools.com/cssref/css_colors.asp , CSSОтветы:
Perl, 212 - 50% = 106 байт
С добавлением новых строк:
Тестовые случаи
Выход
Perl, без бонуса, 144 байта
С добавлением новых строк:
Graphics::ColorNames
не является основным модулем, но он существует с 2001 года. Возможно, вам придется установить его через:Шестнадцатеричное представление является предпочтительным, если имя цвета имеет одинаковую длину.
Тестовые случаи
Выход
источник
C # 6 527 байт / 2 бонуса = 264
РЕДАКТИРОВАТЬ: Woot! Я наконец получил бонусный ответ с более низким баллом, чем базовый ответ!
Я написал только функцию. Требуется
using
заявление (в комплекте.)C # имеет хороший список известных цветов для работы, но он настаивает на включении альфа-канала. Известные цвета также включают все системные цвета, два из которых имеют имена длиной менее 7 символов, поэтому их необходимо удалить.
Вот бонусное решение, поддерживающее такие форматы, как:
12, 34, 56
#123
#123456
DarkSlateBlue
Полностью в гольф:
Отступы и новые строки для ясности:
C #, 265 байт
Вот основное решение.
Отступы и новые строки для ясности:
источник
Mathematica
207 242500-250 = 250 байтОбновление:
работает с входными данными, состоящими из троек rgb, имен цветов или шестнадцатеричных чисел.
Вывод глубины цвета (12 бит) теперь работает отлично, благодаря прекрасной статье по уменьшению глубины цвета . Основная идея состоит в том, что если тройка RGB {r, g, b}, где r, g и b находятся в диапазоне 0-255 (то есть hex 00-ff), может быть представлена без потерь в виде числа в диапазон 0-15 (то есть 0-f), тогда можно использовать трехзначное шестнадцатеричное число вместо шестизначного числа. Оказывается, это будет происходить всякий раз, когда 17 (то есть 255/15) делит r, g и b.
Используются только встроенные функции. Mathematica имеет правила замены имен цветов HTML на тройки RGB. Например, одно правило
"Teal"-> RGBColor[0, 128, 128]
. Когда такие правила инвертированы, значения rgb (перекалиброванные в диапазон, {0, 255}) можно заменить именами цветов.Примеры
Комментируется, Ungolfed Code
(* правила замены названия цвета образцом цвета, например
RGBColor{255,17,0}
(* правила замены списка из 3 целых чисел соответствующим именем цвета, если таковое существует. И те же правила, обратные. *)
(* проверяет, можно ли представить 24-битный шестнадцатеричный цвет как 12-битный без потерь.
reduce
Можно изменить 24-битное выражение на 12-битное выражение. *)(* Список RGB изменен на шестнадцатеричный номер *)
(* Шестнадцатеричный номер изменен на список RGB. *)
(* Больше конверсий *)
(* выбирает самое короткое допустимое CSS-выражение цвета *)
(* преобразует любой вход в список RGB и вызывает
f
*)источник
FF
в базе 16? Так что должен получиться#FFFFFF
, который длиннее белого. Я нахожу#000
необычное, но, чтобы быть уверенным, рассмотрим причуды CSS.#FFF
такой же, как#FFFFFF
(все биты один), который совпадает сwhite
. Кроме того,#0
является недействительным, потому что это ни 24 бит, ни 12 битCoffeeScript,
411 404 388 384382/2 = 191UPD: уверен, что это конечный результат
Надеюсь, это нормально использовать
window.document.*
. Проверьтеrgb
функцию иeval
позвоните.Результаты теста
Код комментария
Это сэкономит несколько байтов.
q
Функция поместит входной цветdocument.body.style.color
и получит скомпилированный цвет какrgb(...)
. Также он будет хранить результат какhexColor:inputColor
вd
. Обратите внимание наeval
использование.rgb(100,100,100)
является допустимым вызовом функции JavaScript с тремя числовыми аргументами.rgb
Функция преобразует аргументы в одну шестнадцатеричную нотацию 24/12 (например#fff
,#f0f0f0
).Разбейте строку на массив имен цветов, создайте объект поиска.
И вернуть HEX, если нет более короткого варианта в
d
.источник
Стилус,
238234/2 = 117Более CSS-подобное решение! Стилус уже имеет отличную поддержку для манипулирования цветом, поэтому желаемая функция довольно мала и не слишком хороша для игры в гольф.
f(c){for n in split(' ''navy green teal indigo maroon purple olive gray sienna brown silver peru tan orchid plum violet khaki azure wheat beige salmon linen tomato coral orange pink gold bisque snow ivory red'){lookup(n)==c?c=s(n):c}}
Проверьте это здесь
источник
Matlab 617
Много предварительной обработки и жесткого кодирования. Минимальный набор имен цветов, которые вы должны учитывать, это. Жаль, что Matlab не имеет встроенных имен цветов = /
источник
r=0;g=16;b=0;
, хотя он не засчитывается в ваш счет.Python 3,
+857795 байтНеобходимость вручную указать все требуемые принятые цвета увеличивала количество байтов на этом: /
c(a)
принимает один аргумент,a
который приходит в формеrgb(#,#,#)
. Отсюда удаляются rgb и скобки, а затем строка разделяется запятыми в массив.c(x,y,z)
занимает 3 дюйма, значения r, g и b цвета rgb для обработки. Мы собрали их в массивa
. Затем мы используем встроеннуюhex
функцию Python, которая преобразует число Base 10 в число Base 16 в нашем массиве и создаем шестнадцатеричную строку (это делается вfor
цикле). Этиif
заявления преобразования цвета , как000000
к000
, и заменить известные цвета с использованием словаря.Вот оно (спасибо @undergroundmonorail за подсказку
;
в Python):Старая версия:
Возможно я добавлю бонус к этому, я еще не знаю. Это может быть определенно с 50% байтов!
-Toastrackenigma
источник
;
, сохраняя отступы. например:a=a[4:-1].split(",");b=""
. любойif
,else
,for
,while
и т.д. блок только с одной строкой может быть записан в видеif b in k:b=k[b]
.finally, вы можете потерять много ваших пробела в середине строк, напримерk = {
->k={
иreturn "color:
->return"color:
re.findall()
(так будет и нужноimport re
): pastebin.com/rQHqgxXSJavaScript (ES6), 499
611Изменить Добавлены тестовые случаи в вопросе
Примечание: я сохранил только названия цветов, которые короче, чем шестнадцатеричный эквивалент.
Примечание 2: это, безусловно, можно играть в гольф больше ...Меньше гольфа
источник
{f00:"red";"008000":"green"}
.