16 진수 색상 RGB int


13

3 개의 정수 rgb가 주어지면 16 진 표현을 문자열로 출력합니다.

Input:          Output:
72 61 139       #483D8B
75 0 130        #4B0082
0 255 127       #00FF7F

가장 짧은 정통 코드 승리


16
FAQ에 따르면 이 사이트의 모든 질문은 객관적인 주요 우승 기준이 있어야하므로 어떤 항목을 이길 지 확실하게 결정할 수 있습니다. . 최단은 객관적이지만 "가장 정통적인"것은 아니다. 또한 코드 골프 태그는 당첨 조건이 가장 짧은 코드 인 경우에만 사용해야합니다. 그리고 코드 도전 태그는 경우에만 사용되어야한다 코드 골프 태그가 없습니다.
— 피터 테일러

그리고 약간의 시간 전에 승자 동의 ... 종류의 스타일을 장려 더 공헌 (이 경우,도 24 시간이 아니었다)
— woliveirajr

@PeterTaylor 죄송합니다. 지금부터 지침을 읽어 드리겠습니다 :( 정말은 맞습니다. 정통은 매우 모호합니다
— Quillion

답변:


14

루비 : 19 자

$_=?#+"%02X"*3%$F

샘플 실행 :

bash-4.1$ ruby -pae '$_=?#+"%02X"*3%$F' <<< '72 61 139'
#483D8B

bash-4.1$ ruby -pae '$_=?#+"%02X"*3%$F' <<< '75 0 130'
#4B0082

bash-4.1$ ruby -pae '$_=?#+"%02X"*3%$F' <<< '0 255 127'
#00FF7F

16

루비

나는 "정통파"부분을 위해 더 가고 있었다. ;)

10;a=    gets.   split
.  map  {|       x|  #x
"%02X"  %(  x.   to_i)
}; $>   <<   ?#  <<  a[
00  ..   1+2].   join;

내 웹 브라우저의 글꼴이 약간 크므로 왜곡되어 보이지만 Courier New에서 더 좋아 보입니다.

영상

샘플 실행 :

c:\a\ruby>rgb2hex
255 100 0
#FF6400

이것은 천재입니다!
— Albert Renshaw

6

q / k (3 자)

정통은 아니지만 아주 짧은

4h$

예

q)4h$ 72 61 139
0x483d8b

질문의 출력 형식을 정확히 일치시키기 위해 다음을 수행 할 수 있습니다 (9 자).

"#",/$4h$

1
문제의 샘플 출력에 필요한 파운드 기호 (#)가 누락되었습니다.
— Iszi

5

PowerShell : 71 52 51 41

지적 대신 @manatwork 덕분에 루프 ForEach-Object대신 사용할 수 있습니다 for. 루프 출력을 변수에 넣지 않고
사용할 수 있다고 지적한 @Joey에게 감사드립니다 -join.

골프 코드 :

'#'+-join(1..3|%{"{0:X2}"-f+(read-host)})

노트 :

유효하지 않은 입력을 확인하는 데 오류가 없습니다. 스크립트는 행복하게 입력으로 256, 4096 및 65536을 취한 다음 # 100100010000을 출력합니다 (분명히 RGB로 작동하지 않음).

코멘트가없는 언 골프 드 :

# Put a hashtag in front of the output.
'#'+

# Join the nested code into one string.
-join(

    # Pipe 1..3 to ForEach-Object to run a loop three times.
    1..3|%{

        # Take user input and format it as hex, with minimum two digits in output.
        "{0:X2}"-f+(read-host)
    }
)

루프 foreach($i in 1,2,3)를 68 자로 줄이십시오.
— manatwork

@manatwork foreachPowerShell 의 올바른 구문이라고 생각하지 않습니다 . (적어도 테스트 실행을 할 수 없었습니다.) 그러나 올바른 구문, 기본 제공 별칭 및 최근에 발견 한 다른 PowerShell 바로 가기를 사용하면 더 나은 무언가가 있다고 생각합니다. 당신의 제안에서 또 다른 12 문자. (1..3)|%{...}(줄임표 대신 기존 스크립트에서 괄호로 묶은 문장을 삽입하십시오.) 여전히 스크립트에서 이것을 완전히 테스트해야하지만 그 방향으로 나를 가리켜 주셔서 감사합니다!
— Iszi

그것이 올바른 구문인지 아닌지는 모르겠지만 SS64 참조 foreach는 그것을 언급하고 나에게 효과적입니다. (버전에 대해서는 전혀 모릅니다. Windows 7과 함께 제공되는 버전)
— manatwork

@manatwork 흥미 롭습니다. 나는 다른 곳에서 더 많은 문제가 무엇인지 알아 내고 싶습니다 (다른 예기치 않은 토큰 'in'... '오류가 발생했습니다). SS64 아티클이 다른 버전의 PowerShell 용으로 작성되었을 수 있습니다. 잘 모르겠습니다. 지금은 (1..3)|%작동 한다는 것을 확인 했으며 스크립트를 56 자로 줄였습니다. 답변으로 편집하고 아이디어에 대해 분명히 당신을 인정합니다. 다시 감사합니다!
— Iszi

2
아, 댕 당신은을 사용하여 41이를 얻을 수 있습니다 -join: '#'+-join(1..3|%{"{0:X2}"-f+(read-host)}).
— Joey

4

bash 22 21 자

( \큰 따옴표 대신 1 문자에 @manatwork 감사 합니다)

printf \#%02X%02X%02X 12 12 12 
#0C0C0C

또는 루프에서 STDIN 을 읽는 중 : 48 자 :

while read f;do printf "#%02X%02X%02X\n" $f;done <<<$'72 61 139\n75 0 130\n0 255 127'
#483D8B
#4B0082
#00FF7F

2015-10-06 추가 : bash (더 많은 정통 법) 84 83 문자

c=({0..9} {a..f}) d=\#;for b;do for a in / %;do d+=${c[$b$a 020]};done;done;echo $d

나는 그것이 020쓰여 지면 82자가 될 수 16있지만 이것을 선호한다 d+=${c[$b$a 0x10]}.

hexcolor() {
    local a b c=({0..9} {a..f}) d=\#
    for b ;do
        for a in / % ;do
            d+=${c[$b$a 0x10]}
        done
    done
    echo $d
}
hexcolor 72 61 139
#483d8b
hexcolor 75 0 130
#4b0082
hexcolor 0 255 127
#00ff7f

또 다른 접근법

#!/bin/bash
browser=firefox   #  google-chrome iceweasel
url="data:text/html;charset=UTF-8,<html><head></head><body>"
url+="<script type='text/javascript'>
  function h(i){var h=i.toString(16);if(16>1*i)h='0'+h;
  return h};function C(r,g,b){return'\043'+h(r)+h(g)+h(b)};
  function m(){ var r=1.0*R.value; var g=1.0*G.value; var b=1.0*B.value;
   var fore='black';if(384>r+g+b)fore='white';var c=C(r,g,b);
   s.setAttribute('style','background:'+c+';color:'+fore+';');s.innerHTML=c};
  function w(e){console.log(e);var val=e.target.value;var q=1;if(e.shiftKey)
  q=15;if(e.detail){if(e.detail>0){q=0-q;}}else if(0>e.wheelDelta){q=0-q;};
  val=1*val+q;if(val>255)val=255;if(0>val)val=0;e.target.value=val;m(); };
  function k(e){console.log(e);var val=e.target.value;var q=1;if(e.shiftKey)q=
  15;if(e.keyCode==38){val=1*val+q;if(val>255)val=255;e.target.value=val;m();}
  else if(e.keyCode==40){val=1*val-q;if(0>val)val=0;e.target.value=val;m();}};
  function n(){R=document.getElementById('R');G=document.getElementById('G');
    B=document.getElementById('B');s=document.getElementById('s');
    R.addEventListener('DOMMouseScroll',w);R.addEventListener('mousewheel',w);
    G.addEventListener('DOMMouseScroll',w);G.addEventListener('mousewheel',w);
    B.addEventListener('DOMMouseScroll',w);B.addEventListener('mousewheel',w);
  m();};var R, G, B, s;window.onload=n;
  </script><style>div{display:inline-block;width:10em;}</style>
  <div id='s'>&nbsp;</div>"
input="%s:<input type='text' size='5' value='200'"
input+=" onKeyDown='k(event)' onChange='m()' id='%s' />"
for c in R G B ;do
    printf -v add "$input" $c $c
    url+="$add"
  done    
$browser "$url"

브라우저 창이 다음과 같이 표시됩니다.

RGB INT 2 진수 뷰어 변환기

값을 변경하기 위해 마우스 휠을 굴릴 수있는 위치 (Shift 키를 15 단계로 누른 상태) ...


실제로 종료 줄 바꿈은 요청되지 않았으며 "#"만 이스케이프 처리하면 printf \#%02X%02X%02X충분합니다.
— manatwork

보다 정통적인 방법을 추가했습니다 :
— F. Hauri

롤 그 내부 루프는 실제로 충격적으로 정통적입니다.
— manatwork

@ manatwork 감사합니다, 나는 섹시한 것을 발견 d+=${c[$b$a 0x10]}합니다 !
— F. Hauri

1
... 또는 아마 d+=${c[$b$a 020]}일을 하고 멋지게 보일 것입니다
— F. Hauri

3

펄, 31 자

perl -nE 'say"#",map{unpack H2,chr}split'

그런 짧은 프로그램을 정 통화하기는 어렵지만 이것이 효과가 있다고 생각합니다.


나는이 대답을 좋아한다.
— Quillion

멋있는! 그냥 unpack질문 : 질문에서와 같이 16 진수 a..f를 대문자로 만들 수 있습니까?
— manatwork

@manatwork 나는 안에서 그것을 할 수있는 방법을 찾으려고 노력 unpack했지만 운이 없다. 한 가지 방법은 sprintf대신에 사용 하는 unpack것이지만 더 길고 완전히 정통입니다. 다른 방법은 문자열을 대문자로 바꾸는 것 map{uc unpack H2,chr}입니다.
— breadbox

감사합니다, @breadbox. 그 까다로운 작은 pack및 unpack결코 내 코딩 스타일에 들어가. 그래서 그 정통은 나를 위해 충분합니다.
— manatwork

카운트가 잘못되었습니다. 이것은 30 문자를 만듭니다!
— F. Hauri

3

액션 스크립트 3 | 43 자

trace("#"+(72<<16|61<<139|b).toString(16));

산출: #483D8B


여백을 많이 떨어 뜨릴 수 없습니까? 나는 행동 스크립트를 모른다. 그러나 그것들은 필요하지 않다
— Cruncher

@Cruncher 예 죄송합니다. 첫 번째 답변 중 하나입니다.
— Ilya Gazman

2
마지막에 세미콜론을 죽여 숯을 구하십시오
— Doorknob

3

펄 24 자

perl -ne 'printf"#"."%02x"x3,split'
13 31 133
#0d1f85

죄송 unpack하지만을 사용하는 것보다 섹시 하지는 않지만 더 짧습니다!

더 모호한 버전 :

그러나 당신이 정말로 사용하는 것을 선호한다면 unpack, 당신은 할 수 있습니다 :

$==24;s/\d+[\n ]*/{$=-=8;($&<<$=).do{rand>.5?qw<+>[0]:"|"}}/eg;$_=
pack("N",eval($_.587.202.560));say$1,unpack("H6",$2)if/^(.)(.*)$/s

샘플의 경우 더 짧은 버전은 아니지만 좋아합니다! ( 이것을 보증 하기 rand위해 사용 :-)

perl -nE '
    $==24;s/\d+[\n ]*/{$=-=8;($&<<$=).
    do{rand>.5?qw<+>:"|"}}/eg;$_=pack(
    "N",eval($_.587.202.560) );say $1,
    unpack("H"."6",$2) if /^(.)(.*)$/s
  ' <<< $'72 61 139\n75 0 130\n0 255 127'
#483d8b
#4b0082
#00ff7f

3

> <> 103 60

"#"or>1[:82*%:}-82*,86*+:"9"v
    ;^?l ]o+*7)"9":+*68o+*7)<

낭비되는 공백을 사용하고 코드를 옮겼습니다.

명령 행 입력으로 실행하십시오.

python fish.py generateHex.fish -v 255 36 72

출력 : "# FF2448"


요청시 설명을 제공합니다. 당신이 그것을 알아낼 수 있다면 오히려 귀찮게하지 않을 것입니다
— Cruncher

2

넷째, 62 자

: D 0 <<# # # #> TYPE #>> ; 35 EMIT HEX SWAP ROT D D D DECIMAL

1 1 1에서 작동하지 않습니다. # 010101
— ratchet freak

안녕하세요 @ratchetfreak. 그것은 나를 위해 작동합니다. 방금 gforth로 테스트했습니다. 그주기 1 1 1출력한다 #010101. 다른 값 0-255도 작동합니다. 어떤 환경을 사용하고 있습니까?
— 대런 스톤

2

C (67 개 문자, 메인 보일러 플레이트 없음)

int r,g,b;
scanf("%d %d %d",&r,&b,&g);
printf("#%06x",r<<16|g<<8|b);

bog 표준 printf 및 비트 트위 들러 사용법


기다려 readf? 그렇지 scanf않습니까?
— breadbox

@breadbox 아 그래 D에서 너무 많은 시간을 보냈다; 어느 쪽이든 문자 수에 차이가 없습니다
— 래칫 괴물

2

Dc : 35 32 자

[#]n16o?ShShSh[Lhd16/n16%n]ddxxx

샘플 실행 :

bash-4.1$ dc -e '[#]n16o?ShShSh[Lhd16/n16%n]ddxxx' <<< '72 61 139'
#483D8B

bash-4.1$ dc -e '[#]n16o?ShShSh[Lhd16/n16%n]ddxxx' <<< '75 0 130'
#4B0082

bash-4.1$ dc -e '[#]n16o?ShShSh[Lhd16/n16%n]ddxxx' <<< '0 255 127'
#00FF7F

Dc : 27 24 자

(그러나 별도의 줄에 입력 번호가 필요합니다.)

[#]n16o[?d16/n16%n]ddxxx

샘플 실행 :

bash-4.1$ dc -e '[#]n16o[?d16/n16%n]ddxxx' <<< $'72\n61\n139'
#483D8B

bash-4.1$ dc -e '[#]n16o[?d16/n16%n]ddxxx' <<< $'75\n0\n130'
#4B0082

bash-4.1$ dc -e '[#]n16o[?d16/n16%n]ddxxx' <<< $'0\n255\n127'
#00FF7F

2
dc이 웹 사이트에 충분한 답변 이 없습니다 .
— breadbox

2

자바 스크립트, 89 자

console.log('#' + ('00000' + eval('256*(256*(' + DEC.replace(/ /g, ')+')).toString(16)).slice(-6))

변환 72 61 139을 256*(256*(72)+61)+139하고 evals을.


좋은 점이지만 질문에 게시 된 세 번째 샘플에서는 실패합니다.
— manatwork

아 좋은 전화. 결정된.
— Casey Chu

2
사용 eval('(('+DEC.replace(/ /g,'<<8)+'))대신 eval('256*(256*('+DEC.replace(/ /g,')+'))할 수는 5 개 문자를 저장!
— F. Hauri

2

PowerShell, 45

'#'+-join(-split(read-host)|%{'{0:X2}'-f+$_})

또는 데이터를 파이핑하여 사용할 수 있다면

'#'+-join(-split"$input"|%{'{0:X2}'-f+$_})

이는 그것을 아래로 제공합니다 (42) .


잘 했어! 골프에 대해 아직도 배울 점이 많습니다!
— Iszi

아, 변수에 대한 당신의 생각도 영리했습니다. 내 마음을 결코 넘지 못했을 것입니다. 내 평소 좋아하는 것보다 길어집니다 : -split및 -join.
— Joey

2

파워 쉘 37

TimmyD 덕분에 1 바이트 절약

cat rgb2hex.ps1
$args|%{$o+="{0:X2}"-f[byte]$_};"#$o"
wc -c rgb2hex.ps1
38 rgb2hex.ps1
powershell -f .\rgb2hex.ps1 72 61 139
#483D8B
powershell -f .\rgb2hex.ps1 0 255 127
#00FF7F

당신은 몇 가지가 치우는에 의해 바이트를 저장할 수 있습니다 [byte]우리는 정수로 입력을 제공하고 있기 때문에, 편집하여 출력 할 "#$o"- 31 바이트를 제공하는$args|%{$o+="{0:X2}"-f$_};"#$o"
— AdmBorkBork

@TimmyD는 [byte]를 제거하면 [byte]없이 테스트 한 버전 (xp의 iirc 2.0)의 모든 버전에서 올바르게 작동하는지 알 수 없습니다. 따옴표 안의 "# $ o"는 문자열 리터럴이 아니지만 16 진수 변환에 대한 감사의 말을 전합니다. 감사합니다.
— blabb

PowerShell v2와 v3의 차이점은 분명히 그렇습니다. 해당 .NET 버전이 16 진수 변환을 처리하는 방법에 관한 것이지만 문서를 찾을 수는 없습니다.
— AdmBorkBork

2

R, 16 바이트

그게 다야. 내장을 사용하십시오.

rgb(r,g,b,m=255)

1

C, 67 73 자 (메인을 제외한 65 자)

main(){int a,b,c;scanf("%d%d%d",&a,&b,&c);printf("#%02X%02X%02X",a,b,c);}

지루한 C 프로그램-매우 정통.


16보다 작은 ab 또는 c에서는 작동하지 않습니다
— ratchet freak

% X가 % 02X로 변경되었습니다.
— Ian James

1

Python 2.7 (80 자)

x=lambda y: ("0"+hex(int(y))[2:])[-2:]
print "#"+''.join(map(x,input().split()))

한 자리 16 진수 값을 처리하는 더 좋은 방법을 찾고 있습니다. 어떤 아이디어?


형식 문자열을 사용할 수 있습니까? '% 02x'은 (는) 다른 사람이 한 것 같습니다.
— jqblz

1

Befunge-98, 45 자

Bleh, 중복 코드. 오 잘 기수 변환의 간단한 구현.

"#",v
7*+,>#@&:97+/"0"+:"9"`7*+,97+%"0"+:"9"`

샘플 런

% cfunge tohex.98 <<<'72 61 139'
#483D8B
% cfunge tohex.98
#75 0 130
4800820 255 127
00FF7F

(참고 : 입력을 읽기 전에 '#'을 인쇄합니다 .-이 작업은 이것을 금지하지 않습니다 .stdin에 세 개의 숫자가 주어지면 stdout에서 올바른 출력을 생성합니다. 또한 개행을 귀찮게하지 않으며 알 수 있습니다. "대화식으로"실행할 때 '#'을 올바르게 추가하지 마십시오.)


1

게임 메이커 언어, 175 (81 위치 오류)

3-9 자리 RGB를 요구합니다. GML 16 진수 부호와 함께 16 진수를 반환합니다.$

d=get_string('','')if(d=='')e=""else e="00"h="0123456789ABCDEF"while(d!=''){b=d&255i=string_char_at(h,byte div 16+1)l=string_char_at(h,byte mod 16+1)e+=i+l;d=d>>8}return '$'+e

이것을 스크립트로 만드십시오. 또한 초기화되지 않은 변수를 0으로 처리하여 컴파일하십시오.

출처


1

관장, 93 자

\B=@set{x;0123456789abcdef}\#
<D>=@substring{@div{$1;16};1;$x}@substring{@mod{$1;16};1;$x}
?=

샘플 실행 :

bash-4.3$ gema '\B=@set{x;0123456789abcdef}\#;<D>=@substring{@div{$1;16};1;$x}@substring{@mod{$1;16};1;$x};?=' <<< '0 255 127'
#00ff7f

1

Burlsque, 12 바이트 (소문자의 경우 10 바이트)

소문자도 허용되는 경우 10 바이트 :

psb6\['#+]

용법:

blsq ) "72 61 139"psb6\['#+]
"#483d8b"

대문자가 절실히 필요한 경우 다음을 추가하십시오 ZZ.

blsq ) "72 61 139"psb6\['#+]ZZ
"#483D8B"

문자열과 같이 정수를받지 못하면 다음과 같이하십시오.

blsq ) {72 61 139}b6\['#+]
"#483d8b"

설명:

ps -- parse string
b6 -- to hex
\[ -- concat
'#+] -- prepend #

여기에서 온라인으로 시도하십시오 .

보너스:

다시 변환하려면 다음을 사용하십시오.

blsq ) "#483d8b"[-2cob6
{72 61 139}

1

파워 쉘, 28 바이트

'#{0:X2}{1:X2}{2:X2}'-f$args

테스트 스크립트 :

$f = {

"#{0:X2}{1:X2}{2:X2}"-f$args
}

@(
    ,('#483D8B',72, 61, 139)
    ,('#4B0082',75,  0, 130)
    ,('#00FF7F',0 ,255, 127)
) | % {
    $e,$a = $_
    $r = &$f @a
    "$($r-eq$e): $r"
}

산출:

True: #483D8B
True: #4B0082
True: #00FF7F

0

Python3.3 @ 60 자

print("#"+3*"%.2X"%tuple(int(n) for n in input().split())) 

저항하지 못했습니다 :

[dan@danbook:code_golf/int_to_hex]$ python3.3 int_to_hex.py
176 11 30
#B00B1E

0

클로저 76 문자

완전성을 위해 늦을 수 있습니다.

(defn hexy [r g b] (reduce str (cons "#" (map #(format "%02X" %) [r g b]))))

호출 예 :

(hexy 0 255 127)
"#00FF7F"

0

매스 매 티카, 40 자

f = StringJoin["#", IntegerString[#, 16, 2]] &

rgbs = {{72, 61, 139}, {75, 0, 130}, {0, 255, 127}}

f /@ rgbs // Column

# 483d8b

# 4b0082

# 00ff7f


0

공통 리스프, 39 자

(format()"#~@{~2,'0x~}"#1=(read)#1##1#)

정수 세 개를 읽고 문자열을 반환합니다.


0

자바 스크립트 ES6, 63 바이트

h=>'#'+h.split` `.map(x=>(x<16?0:'')+(x*1).toString(16)).join``

우연히도, 나는 당신을보기 전에 당신과 거의 똑같은 글을 썼습니다. 아주 좋은 =) 그들은 내 게시물을 게시하지 않을 정도로 가까이 있지만 다음과 같이 매핑에 몇 바이트를 저장할 수 있습니다.x=>(x<16?0:'')+x.toString(16)
— Mwr247

1
또한 r=시작 부분 에 포함 할 필요가 없습니다 . 아무 것도 할당하지 않아도 호출 할 수 있으므로 익명 함수로도 함수로 계산됩니다.
— Mwr247

으악. 지도를 의미 : x=>(x<16?0:'')+(x*1).toString(16)귀하와 나의 첫 번째 지도는 현재에 대해 잘못된 값을 제공합니다 x>9.
— Mwr247

이것은 현재 첫 번째 테스트 사례 #7261139대신에 반환 됩니다 #483D8B.
— Dennis

0

파이썬 2, 40 바이트

s='#';exec's+="%02X"%input();'*3;print s

세 개의 개별 라인에서 입력을 읽습니다. 학대exec 및 문자열 곱셈.

사용법 예 :

$ python2 rgbint.py
72
61
139
#483D8B

$ python2 rgbint.py
75
0
130
#4B0082

$ python2 rgbint.py
0
255
127
#00FF7F

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.