В CSS цвета могут быть определены «шестнадцатеричным триплетом» - трехбайтовым (шестизначным) шестнадцатеричным числом, где каждый байт представляет красный, зеленый или синий компоненты цвета. Например, #FF0000
полностью красный и эквивалентен rgb(255, 0, 0)
.
Цвета также могут быть представлены сокращенной записью, которая использует три шестнадцатеричных цифры. Сокращение расширяется до шестизначной формы путем дублирования каждой цифры. Например, #ABC
становится #AABBCC
.
Поскольку в шестнадцатеричном сокращении меньше цифр, можно представить меньше цветов.
Соревнование
Напишите программу или функцию, которая принимает шестизначный шестнадцатеричный цветной код и выводит ближайший трехзначный цветной код.
Вот пример:
- Введите шестнадцатеричный код: # 28a086
- Красный компонент
- 0x28 = 40 (десятичное число)
- 0x22 = 34
- 0x33 = 51
- 0x22 ближе, поэтому первая цифра укороченного цветового кода равна 2
- Зеленый компонент
- 0xa0 = 160
- 0x99 = 153
- 0xaa = 170
- 0x99 ближе, поэтому вторая цифра 9
- Синий компонент
- 0x86 = 134
- 0x77 = 119
- 0x88 = 136
- 0x88 ближе, поэтому третья цифра 8
- Сокращенный код цвета # 298 (который расширяется до # 229988)
Ваша программа или функция должны принимать в качестве входных данных шестизначный шестнадцатеричный цветовой код с #
предварительным добавлением и выводить трехзначный цветовой код с предварительным добавлением #
.
Примеры
- # FF0000 → # F00
- # 00FF00 → # 0F0
- # D913C4 → # D1C
- # C0DD39 → # BD3
- # 28A086 → # 298
- # C0CF6F → # BC7
счет
Это соревнование по коду, поэтому самый короткий ответ на вашем языке выигрывает! Стандартные правила применяются.
источник
#
добавляет к вызову.Ответы:
JavaScript (ES6), 55 байт
Попробуйте онлайн!
источник
05AB1E , 13 байтов
Попробуйте онлайн!
Как?
источник
ć
обезглавить " Это еще один способ описать это, смеется. : D Хороший ответ, хотя, +1 от меня.Japt , 16 байт
Попробуйте или запустите все тесты
источник
8088 Assembly, IBM PC DOS,
5958 байтНесобранный список:
Автономный исполняемый файл DOS для ПК. Ввод через командную строку, вывод на консоль.
Большая часть длины кода обрабатывает преобразование требуемого ввода-вывода шестнадцатеричной строки в байты, так как машинный код DOS / x86 не имеет встроенных функций для этого.
I / O:
Загрузите и протестируйте HEXCLR.COM или
xxd
hexdump:источник
Сетчатка 0.8.2 , 88 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Соедините шестнадцатеричные цифры.
Преобразуйте каждую цифру отдельно в десятичную.
Преобразовать каждую десятичную цифру в унарную.
Завершите шестнадцатеричное преобразование пары цифр.
Добавьте 8 и разделите на 17.
Конвертировать обратно в шестнадцатеричное.
источник
PHP ,
7567 байтПопробуйте онлайн! или проверьте все контрольные примеры .
источник
Python 3 ,
727068 байтПопробуйте онлайн!
Это порт Гжегожа Оледзкиса, оригинальный ответ , который я помог ему сыграть в гольф.
Две особенности Python 3 помогают нам сохранять байты:
-2 байта спасибо Джонатану Аллану
источник
(int(x[i:i+2],16)+8)//17
сохраняет 2Желе ,
2019 байтовПопробуйте онлайн!
источник
C # (интерактивный компилятор Visual C #) , 81 байт
Попробуйте онлайн!
источник
Wolfram Language (Mathematica) ,
6348 байтовПопробуйте онлайн!
-15 байт благодаря attinat ! Замена
StringJoin
с<>
и сжатия синтаксиса.RGBColor@#
преобразует входную строку в цвет формыRGBColor[r, g, b]
с тремя аргументами с плавающей точкой в диапазоне 0..1.Round[15 List @@ %]
умножает список из трех аргументов на 15 и округляет их до ближайшего целого числа. Теперь у нас есть список из трех целочисленных значений, соответствующих трем желаемым шестнадцатеричным цифрам.%~IntegerString~16
преобразует этот список из трех целых чисел в список из трех шестнадцатеричных строк по одному символу в каждой."#"<>%
готовит#
персонажа и объединяет всех этих персонажей.источник
MathGolf ,
1912 байтВывести как список символов. Если это не разрешено, дополнительный трейлинг
y
, чтобы присоединить список символов к строке.-7 байт благодаря @maxb , так как я смотрел мимо встроенного (
2ô_2<\1>]
в2/
).Попробуйте онлайн.
Объяснение:
источник
Рубин (2.5.3),
45,44, 42 байтаРЕДАКТИРОВАТЬ: сохранил один байт, потому что нам не нужна группа символов для второго символа в регулярном выражении (вдохновленный ответом Нила)
РЕДАКТИРОВАТЬ 2: сохранил 2 байта, потому что синтаксис лямбда-тире ракеты не требует скобок вокруг аргумента
источник
-p
флаг и еще 2, используя$&
вместо аргумента внутри блока: tio.run/##KypNqvz/…Python 2 (
10910197858374 байта)«Ближайшее расстояние» обрабатывается делением на 17 и округлением.
Улучшения:
-8 байт, используя
int(...+.5)
трюк вместоint(round(...))
-4 байта, используя понимание списка вместо
map()
-1 байт путем
#
жесткого кодирования в выводе (спасибо @movatica)-10 байт, не используя
re.findall("..",...)
в пользу явного объединения строк-2 байта, не используя понимание списка, но встроенное выражение генератора в
join
(спасибо @movatica)-1 байт, не соединяя
:7
конец для синей части-9 байтов за счет лучшей итерации по цветам - т.е. итерации по индексам, а не по фактическим символам (спасибо @movatica)
источник
'#'
вместоx[0]
.''.join(...)
, так как оно также обрабатывает выражение генератора. Просто удалите[]
и сохраните еще 2 байта :)range(1,6,2)
еще лучше с[1,3,5]
lambda x:'#'+''.join(hex((int(x[i:i+2],16)+8)/17)[2:]for i in[1,3,5])
-> 69 байтPerl 5
-p
,3534 байта@nwellnhof сохранил байт
Попробуйте онлайн!
Читает из STDIN, заменяет каждую пару элементов, у которых нет
#
соответствующего одиночного символа, используя метод деления на 17 для нахождения ближайшего, затем неявно выводит (-p
) результат.источник
Python 3, 67 байт
источник
Красный , 103 байта
Попробуйте онлайн!
Оказалось, что текущая версия Linux Red не имеет реализации
hex-to-rgb
функции, поэтому я делаю базовое преобразование «вручную» :)Это прекрасно работает в консоли Red GUI на Windows:
Красный , 94 байта
источник
Perl 6 , 35 байт
Попробуйте онлайн!
источник
Древесный уголь , 22 байта
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
R , 57 байт
Попробуйте онлайн!
источник
Pyth , 20 байт
Попробуй это здесь.
ПРИМЕЧАНИЕ. В случае, если приведенная выше ссылка вызывает значение
ImportError
, перейдите сюда ; в настоящее время есть ошибка на официальной странице, и это временное решение от Maltysen . Эта ссылка может перестать работать после исправления официальной.источник
Forth (gforth) , 87 байтов
Попробуйте онлайн!
объяснение
#
)#
0x11
), чтобы получить ближайшее значение для укороченного компонентаКод Объяснение
источник
Stax , 13 байт
Запустите и отладьте его
источник
К4 , 39 байт
Решение:
Объяснение:
Использует ту же стратегию, что и многие из этих ответов (т.е. добавить 8, разделить на 17):
Дополнительно:
"#",{x@*16\:a?&/a:abs(17*!16)-16/:x?y}[.Q.nA]@/:3 2#1_
- моя оригинальная идея на 54 байтаисточник