카테고리 보관물: 코딩

코딩

Rgb에서 Cmyk로 RGB가 주어지면 가장 가까운

입력으로 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까지) 반올림 될 수도 있습니다.
  • 출력 형식은 명확하게 주석을 달거나 명백해야합니다. 즉 :
    1. 순서대로 CMYK
    2. 백분율 [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 값)입니다.

{J=max(R,G,B)C=1RJM=1GJY=1BJK=1J255

TryAPL!

크레딧 :
 ∘ -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

훨씬 짧을 수 있습니다.