입력으로 3 바이트 또는 RGB가 주어지면 가장 가까운 CMYK 값을 계산하여 출력하십시오.
- 매개 변수 및 리턴 값이있는 함수 또는 stdin / stdout에서 작동하는 프로그램 작성
- 선택한 색상 프로파일을 사용하지만 참조를 제공하십시오.
- 입력 범위는 [0; 255] 범위의 개별 숫자 값이거나 6 자리 16 진 문자열입니다.
- 출력은 [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
- 교정되지 않은 매핑은 좋으며 아마도 가장 쉬운 방법 일 것입니다
- 입력 검증이 필요하지 않습니다. float는 허용되지만 (0에서 255까지) 반올림 될 수도 있습니다.
- 출력 형식은 명확하게 주석을 달거나 명백해야합니다. 즉 :
- 순서대로 CMYK
- 백분율 [0; 100] 또는 순수한 숫자 [0; 1]이면 중요하지 않습니다
- 테스트에는 간단한 예 [0,0,0]이 포함되어야합니다.
이 사이트 에는 내가 찾을 수있는 가장 많은 온라인 도구가 있습니다. 누구나 4 자리 이상을 제공하는 도구를 알고 있습니까?
답변
Dyalog APL , 16 15 바이트
1-⊢(÷,255÷⍨⊢)⌈/
1 빼기 1-
X 를 ÷
Y 로 나눈 다음 ,
255를 255÷⍨
Y로 나눕니다 ⊢
. 여기서
X 는 자체 ⊢
(RGB 값 목록)이고
Y 는 최대 값 /⌈
(RGB 값)입니다.
크레딧 :
∘ -1 바이트, ngn .
답변
C # , 88 86 85 84 바이트
(r,g,b)=>{float[]a={r,g,b,1};var j=a.Max();a[3]=j*j/255;return a.Select(x=>1-x/j);};
에 대한 출력 108,174,106
:
0.3793104
0
0.3908046
0.3176471
OP는 기능을 허용하므로 람다 만 제출했습니다. .NetFiddle 에서 실행중인 데모를 찾을 수 있습니다 . 나는 골퍼가 아니며 재미를 위해 게시합니다. 또한 내 첫 번째 대답은 \ o /입니다. 개선 사항을 말씀해 주시기 바랍니다
공식을 위해 Leaks Nun에 Kudos.
경고 : [0,0,0]에서는 작동하지 않습니다 (Titus에게 감사합니다)
답변
파이썬, 46 바이트
lambda*c:[1-i/max(c)for i in c]+[1-max(c)/255]
파이썬 2에서는 입력이 부동이어야하며, 3이 아닌 것이 확실합니다.
답변
자바 스크립트 (ES6), 58 51 바이트
a=>[...a.map(e=>1-e/m||1,m=Math.max(...a)),1-m/255]
배열을 수락하고 [R, G, B]
(별도의 매개 변수에 7 바이트 추가) [C, M, Y, K]
보정되지 않은 색상 매핑을 사용하여 배열 을 반환합니다 .
답변
수학, 36 28 33 바이트
List@@ColorConvert[{##}/255,"CMYK"]&
I / O 형식의 자유화 후 추가로 골프를 쳤다 : List@@#~ColorConvert~"CMYK"&
익명 함수는 요청 된 작업을 수행합니다.
이전 기능 (255)로 0 내지 세 개의 인자를 (이 벗어난 것도 자동 범위에 클리핑된다) 간의 “CMYK”값의 배열을 반환 0.
하고1.
예 (이전 기능의 경우) :
List @@ ColorConvert[{##}/255, "CMYK"] &[108, 174, 106]
{0.37931, 0., 0.390805, 0.320313}
배열은 입력으로 허용되므로 33 바이트 :
List@@ColorConvert[#/255,"CMYK"]&
물론 내장 기능 핸들 {0, 0, 0}
이 제대로 돌아갑니다 {0, 0, 0, 1}
.
답변
Bash + ImageMagick, 69 바이트
convert "xc:$1[1x1]" -colorspace cmyk txt:-|grep -o '([^)]*)'|head -1
예:
$ ./rgb2cmyk.sh "#6CAE6A"
(38%,0%,39%,32%)
$ ./rgb2cmyk.sh "#000000"
(0%,0%,0%,100%)
$ ./rgb2cmyk.sh "#AAFFEE"
(33%,0%,7%,0%)
$ ./rgb2cmyk.sh "#0088ff"
(100%,47%,0%,0%)
$ ./rgb2cmyk.sh "#FAEBD7"
(0%,6%,14%,2%)
$ ./rgb2cmyk.sh "#123456"
(79%,40%,0%,66%)
답변
SmileBASIC, 73 72 바이트
INPUT R,G,B
J=MAX(R,G,B)IF!J THEN?0,0,0,1 ELSE?1-R/J,1-G/J,1-B/J,1-J/255
훨씬 짧을 수 있습니다.