Получив 3 байта или RGB в качестве входных данных, рассчитайте ближайшие значения CMYK и выведите их.
- создайте либо функцию с параметрами и возвращаемым значением, либо программу, которая работает с stdin / stdout
- используйте цветовой профиль по вашему выбору, но предоставьте ссылку
- входными данными могут быть либо отдельные числовые значения в диапазоне [0; 255], либо 6-значная шестнадцатеричная строка
- выходные данные должны быть отдельными числовыми значениями в диапазоне [0; 1] или [0; 100]
- стандартный код гольф: без лазеек , выигрывает самый короткий код
- экстравагантные идеи приветствуются
образец данных:
input output
108,174,106 [0.3793103448275862, 0.0, 0.3908045977011494, 0.3176470588235294]
0,0,0 0,0,0,1
170,255,238 33,0,7,0
0x0088ff 1,0.4667,0,0
[250,235,215] [0,6,14,1.96]
#123456 .7907,.3953,0,.6627
- Некалиброванное отображение - это хорошо и, вероятно, самое простое
- Проверка ввода не требуется; Допускаются значения с плавающей точкой (от 0 до 255), но они также могут быть округлены
- Формат вывода должен быть либо четко прокомментирован, либо очевиден; то есть:
- CMYK в этом порядке
- не имеет значения, если процент [0; 100] или чистые числа [0; 1]
- Тестирование должно включать тривиальный пример [0,0,0].
На этом сайте есть большинство цифр онлайн-инструментов, которые я смог найти. Кто-нибудь знает инструмент, который дает более 4 цифр?
code-golf
conversion
color
Titus
источник
источник
~
.Ответы:
Дьялог АПЛ ,
1615 байт1 минус
1-
X делится на
÷
Y , а затем,
255 делит255÷⍨
Y⊢
, гдеX сам по себе
⊢
(то есть список значений RGB), аY - максимум
/⌈
(значений RGB).TryAPL!
Кредиты:
∘ -1 байт по ngn .
источник
⍨
! Хороший смайлик⍣
и⍤
. Я надеюсь, мы получим⍥
и в⍢
ближайшее время.ಠ
сделает меня счастливым!C # ,
88868584 байтавыход для
108,174,106
:Так как OP позволяет функцию, я представил только лямбду. Вы можете найти работающую демонстрацию на .NetFiddle . Я не игрок в гольф, я публикую для удовольствия. Также это мой первый ответ \ о /. Не стесняйтесь комментировать любые улучшения :)
Слава Leaky Nun для формулы.
предостережение: это не работает для [0,0,0] (спасибо, Титус)
источник
1.0-x/j
? Вы, конечно, не можете сделать1-x/j
?a[3]
, и вы не указываете фиксированный размер дляa
, так что вы можете сделать это{r,g,b}
иa[3]=j*j
(потому что, в любом случае,1 * a = a
).a
сselect()
. Если я буду использоватьa[3]
таким образом, я выйду из диапазона и брошу, не так ли?#
перед строкой. :)Python, 46 байт
Требует, чтобы ввод был плавающим в Python 2, точно уверен, что в 3 нет.
источник
JavaScript (ES6),
5851 байтПринимает массив
[R, G, B]
(добавляет 7 байтов для отдельных параметров) и возвращает массив[C, M, Y, K]
с использованием некалиброванного цветового отображения.источник
a
смешивает его содержание? Это странно 3) Вы тестировали [0,0,0]? Не исключение в ES, но выглядит как деление на ноль.[...a,m=Math.max(...a)]
в вашем массиве решение. 5) Можете ли вы играть в гольф другим, используя массив в качестве входных данных? Попробуйте использоватьa.0
и т. Д. Вместо.map
.Mathematica,
362833 байтаПосле либерализации форматов ввода / вывода, игра в гольф дальше:List@@#~ColorConvert~"CMYK"&
Анонимная функция, которая делает то, что просят.
Старая функция принимает три аргумента от 0 до 255 (все, что находится за пределами этого диапазона, автоматически обрезается до этого диапазона) и возвращает массив значений «CMYK» между
0.
и1.
Пример (для старой функции):
Поскольку массивы допустимы в качестве входных данных, 33 байта:
Конечно , эти встроенные функции ручки
{0, 0, 0}
правильно и возвращается{0, 0, 0, 1}
.источник
/255
?Bash + ImageMagick, 69 байт
Пример:
источник
SmileBASIC,
7372 байтаМожет быть намного короче.
источник
J=MAX(R,G,B)
?Pyth,
2421182421 байтЖизнь - это путешествие в оба конца.
Тестирование.
Пример ввода:
108,174,106
Пример вывода:
[0.3793103448275862, 0.0, 0.3908045977011494, 0.3176470588235294]
Пример ввода:
0,0,0
Пример вывода:
[0, 0, 0, 1.0]
Используемая формула:
Старая формула: http://i.stack.imgur.com/ZtPD6.gif
Старая формула: http://i.stack.imgur.com/Nqi9F.gif
источник
Lithp , 114 байт
Попробуйте онлайн!
max
принимает любое количество аргументов)Я не совсем уверен, что это правильно. Первые два результата с примерами данных верны, а остальные - нет (см. « Попробуйте онлайн» ).
Использует реализацию, описанную красиво следующим образом:
источник
PHP 7,
123110105 байтВведите как цвет RGB
100 240 75
Выводит значения CMYK в виде десятичного числа в
0...1
диапазоне.Благодаря Titus удалось сэкономить много байтов.
Пример использования:
Тест онлайн
Ввод как HEX цвет
#123456
, 202 байта54 байта для функции, чтобы предотвратить деление на ноль, вероятно, пригодный для игры в гольф или съемный.
Получает в качестве входного цвета RGB как HEX
#123456
и выводит CMYK как десятичный в0...1
диапазоне.Пример использования:
источник
separate numeric values
означает, что вы можете просто взять$h=$argv;
и использовать$h[1]
вместо$h[0]
и т. д. Мне нравитсяNAN
трюк; но разве это не дает предупреждения?strtr
вероятно, корочеstr_replace
, и неNAN
нуждается в цитировании (выдаст Уведомления, но они не отображаются в конфигурации по умолчанию).1/0
приводитINF
) и не в PHP 5 (1/0
=>false
).$argv
массив подсказок в командной строке! Я добавил версию PHP. Он работает сNAN
потому что при использованииstr_replace
он преобразует неявно число в строку , так что выводитNAN
, на самом деле , если вы проверяете на этой ссылке , вы увидите , что он выводитNAN
изstr_replace("INF"
вместоstr_replace("NAN"
. Я не мог заставить это работать, используяstrtr
. Я добавил,@
чтобы подавить предупреждения.$n/0
естьINF
, но0/0
естьNAN
(также в PHP 7.0). Вы можете сохранить 4 байта сstr_replace(NAN,0,$s)
или 6 байтов сstrtr($s,["NAN"=>0)
.strtr()
;PHP, не конкурирующий
Я был слишком соблазнен, чтобы опубликовать свой собственный.
Вход RGB, 74 байта
или 68 байтов с запятой в выводе: удалить
[$i>3]
.Беги с
php -r '<code>' <red-value> <green-value> <blue-value>
.Шестнадцатеричный ввод, 100 байт
Беги с
php -nr '<code>' RRGGBB
.Этот подход занял бы 75 байтов для ввода RGB:
заменить
foreach($a=array_map...as$c)
наforeach($a=$argv as$c)if($i++)
.источник
C 155 байт
Я пытаюсь понять, как можно больше играть в гольф.
Применение:
Вывод:
источник
i>0?i>1?i>2
j>0?
17 в избавлении от цикла и 6 в разбиенииj
определения.F *
). Но я нашел еще один байт для гольфа в C99.j>0?j:1
можноj+!j
добиться -3 байта.C
макрос неверен:1-x/1
дляj==0
? Я думаю, что так и должно быть1-(j>0?x/j:1)
.Хун , 110 байт
Используйте библиотеку с плавающей точкой одинарной точности. Создайте новую универсальную функцию, которая принимает
a
. Наборs
дляsub
дубления с.1
на потом, иj
складывание надa
сmax
.Нанесите на карту
a
, разделив каждый элемент наj
, найдя минимум этого и 1, чтобы нормализовать NaN, затем вычтите 1 сs
. Добавьте1-j/255
в конец этого списка.источник