3 개의 정수 rgb가 주어지면 16 진 표현을 문자열로 출력합니다.
Input: Output:
72 61 139 #483D8B
75 0 130 #4B0082
0 255 127 #00FF7F
가장 짧은 정통 코드 승리
3 개의 정수 rgb가 주어지면 16 진 표현을 문자열로 출력합니다.
Input: Output:
72 61 139 #483D8B
75 0 130 #4B0082
0 255 127 #00FF7F
가장 짧은 정통 코드 승리
답변:
나는 "정통파"부분을 위해 더 가고 있었다. ;)
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
지적 대신 @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 자로 줄이십시오.
foreachPowerShell 의 올바른 구문이라고 생각하지 않습니다 . (적어도 테스트 실행을 할 수 없었습니다.) 그러나 올바른 구문, 기본 제공 별칭 및 최근에 발견 한 다른 PowerShell 바로 가기를 사용하면 더 나은 무언가가 있다고 생각합니다. 당신의 제안에서 또 다른 12 문자. (1..3)|%{...}(줄임표 대신 기존 스크립트에서 괄호로 묶은 문장을 삽입하십시오.) 여전히 스크립트에서 이것을 완전히 테스트해야하지만 그 방향으로 나를 가리켜 주셔서 감사합니다!
(1..3)|%작동 한다는 것을 확인 했으며 스크립트를 56 자로 줄였습니다. 답변으로 편집하고 아이디어에 대해 분명히 당신을 인정합니다. 다시 감사합니다!
-join: '#'+-join(1..3|%{"{0:X2}"-f+(read-host)}).
( \큰 따옴표 대신 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
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'> </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"
브라우저 창이 다음과 같이 표시됩니다.

값을 변경하기 위해 마우스 휠을 굴릴 수있는 위치 (Shift 키를 15 단계로 누른 상태) ...
printf \#%02X%02X%02X충분합니다.
d+=${c[$b$a 0x10]}합니다 !
d+=${c[$b$a 020]}일을 하고 멋지게 보일 것입니다
perl -nE 'say"#",map{unpack H2,chr}split'
그런 짧은 프로그램을 정 통화하기는 어렵지만 이것이 효과가 있다고 생각합니다.
unpack질문 : 질문에서와 같이 16 진수 a..f를 대문자로 만들 수 있습니까?
unpack했지만 운이 없다. 한 가지 방법은 sprintf대신에 사용 하는 unpack것이지만 더 길고 완전히 정통입니다. 다른 방법은 문자열을 대문자로 바꾸는 것 map{uc unpack H2,chr}입니다.
pack및 unpack결코 내 코딩 스타일에 들어가. 그래서 그 정통은 나를 위해 충분합니다.
trace("#"+(72<<16|61<<139|b).toString(16));
산출: #483D8B
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
: D 0 <<# # # #> TYPE #>> ; 35 EMIT HEX SWAP ROT D D D DECIMAL
1 1 1출력한다 #010101. 다른 값 0-255도 작동합니다. 어떤 환경을 사용하고 있습니까?
[#]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
(그러나 별도의 줄에 입력 번호가 필요합니다.)
[#]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
dc이 웹 사이트에 충분한 답변 이 없습니다 .
자바 스크립트, 89 자
console.log('#' + ('00000' + eval('256*(256*(' + DEC.replace(/ /g, ')+')).toString(16)).slice(-6))
변환 72 61 139을 256*(256*(72)+61)+139하고 evals을.
eval('(('+DEC.replace(/ /g,'<<8)+'))대신 eval('256*(256*('+DEC.replace(/ /g,')+'))할 수는 5 개 문자를 저장!
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"
main(){int a,b,c;scanf("%d%d%d",&a,&b,&c);printf("#%02X%02X%02X",a,b,c);}
지루한 C 프로그램-매우 정통.
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에서 올바른 출력을 생성합니다. 또한 개행을 귀찮게하지 않으며 알 수 있습니다. "대화식으로"실행할 때 '#'을 올바르게 추가하지 마십시오.)
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으로 처리하여 컴파일하십시오.
소문자도 허용되는 경우 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}
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
h=>'#'+h.split` `.map(x=>(x<16?0:'')+(x*1).toString(16)).join``
x=>(x<16?0:'')+x.toString(16)
r=시작 부분 에 포함 할 필요가 없습니다 . 아무 것도 할당하지 않아도 호출 할 수 있으므로 익명 함수로도 함수로 계산됩니다.
x=>(x<16?0:'')+(x*1).toString(16)귀하와 나의 첫 번째 지도는 현재에 대해 잘못된 값을 제공합니다 x>9.
#7261139대신에 반환 됩니다 #483D8B.