สี RGB int ถึง hex


13

กำหนดจำนวนเต็มสาม rgb การแสดงเลขฐานสิบหกเอาต์พุตเป็นสตริง

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

รหัสนอกรีตที่สั้นที่สุดจะเป็นผู้ชนะ


16
คำถามที่พบบ่อยของเราบอกว่าคำถามทั้งหมดในเว็บไซต์นี้ ... ควรมีเกณฑ์การชนะขั้นต้นอย่างมีวัตถุประสงค์ดังนั้นจึงเป็นไปได้ที่จะตัดสินใจอย่างเด็ดขาดว่ารายการใดควรชนะ . ที่สั้นที่สุดคือวัตถุประสงค์ แต่ "นอกรีตส่วนใหญ่" ไม่ได้เป็น นอกจากนี้ควรใช้แท็กcode-golfเฉพาะเมื่อสภาพการชนะเป็นเพียงรหัสที่สั้นที่สุด และควรใช้แท็กรหัสท้าต่อเมื่อไม่มีรหัสแท็กกอล์ฟ
Peter Taylor

และยอมรับผู้ชนะก่อนเวลา (ในกรณีนี้ไม่ได้ 24 ชั่วโมง) ชนิดของการมีส่วนร่วมเพิ่มเติมท้อ ...
woliveirajr

@PeterTaylor ขออภัยฉันจะตรวจสอบให้แน่ใจเพื่ออ่าน guidlines จากนี้ :( ฉันเดาว่าคุณพูดถูกนอกรีตค่อนข้างคลุมเครือมาก
Quillion

คำตอบ:



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กับเอาต์พุตลูปแทนที่จะต้องใส่มันลงในตัวแปร

รหัส Golfed:

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

บันทึก:

ไม่มีการตรวจสอบข้อผิดพลาดที่นี่สำหรับอินพุตที่ไม่ถูกต้อง สคริปต์จะใช้อินพุต 256, 4096 และ 65536 อย่างมีความสุขจากนั้นเอาต์พุต # 100100010000 (ซึ่งเห็นได้ชัดว่าใช้งานไม่ได้กับ RGB)

Ungolfed พร้อมความคิดเห็น:

# 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 อักขระ
จัดการ

@ การทำงานฉันไม่คิดว่าเป็นไวยากรณ์ที่เหมาะสมสำหรับforeachใน PowerShell (อย่างน้อยฉันก็ไม่สามารถทำงานทดสอบได้) อย่างไรก็ตามการใช้ไวยากรณ์ที่ถูกต้องนามแฝงในตัวและทางลัด PowerShell ทางลัดอื่นที่ฉันค้นพบเมื่อเร็ว ๆ นี้ฉันคิดว่าฉันมีอะไรที่ดีกว่าโกนหนวด อีก 12 ตัวอักษรออกจากข้อเสนอแนะของคุณ (1..3)|%{...}(แทรกคำสั่งที่อยู่ในวงเล็บจากสคริปต์ที่มีอยู่ในตำแหน่งของจุดไข่ปลา) ฉันยังต้องทดสอบอย่างเต็มที่ในสคริปต์ แต่ขอบคุณที่ชี้ให้ฉันไปในทิศทางนั้น!
Iszi

ไม่มีความคิดว่าเป็นไวยากรณ์ที่เหมาะสมหรือไม่ แต่การอ้างอิง SS64 สำหรับการforeachกล่าวถึงมันและมันทำงานได้สำหรับฉัน (ไม่มีความคิดเกี่ยวกับรุ่นหนึ่งซึ่งมาพร้อมกับ Windows 7)
จัดการ

@ การทำงานที่น่าสนใจ ฉันต้องการขุดและคิดว่ามีอะไรผิดปกติอีก (ฉันได้รับข้อผิดพลาด "โทเค็นที่ไม่คาดคิด" ใน "... ") ในบางครั้ง เป็นไปได้ที่บทความ SS64 นั้นเขียนขึ้นสำหรับ PowerShell รุ่นอื่น - ฉันไม่แน่ใจ สำหรับตอนนี้ฉันได้รับการยืนยันว่าใช้(1..3)|%งานได้และทำให้สคริปต์มีความยาว 56 อักขระ ฉันจะแก้ไขให้เป็นคำตอบและให้เครดิตคุณอย่างแน่นอนสำหรับความคิด ขอบคุณอีกครั้ง!
Iszi

2
โอ้แดง คุณสามารถได้รับนี้ถึง 41 โดยใช้:-join '#'+-join(1..3|%{"{0:X2}"-f+(read-host)})
Joey

4

ทุบตี22 21 ตัวอักษร

(ขอบคุณ @ manatwork สำหรับ 1 char โดยใช้\แทนเครื่องหมายคำพูดคู่)

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: ทุบตี ( วิธีแหกคอกมากขึ้น) 84 83 ตัวอักษร

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

ฉันรู้ว่ามันอาจเป็น 82 ตัวอักษรถ้า020ที่เขียน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"

นี่จะแสดงหน้าต่างเบราว์เซอร์ด้วย:

ตัวแปลงมุมมอง hex int RGB 2

ที่ซึ่งคุณสามารถหมุนเมาส์วีลเพื่อเปลี่ยนค่า (โดยกดปุ่ม Shift ค้างไว้ทีละ 15) ...


จริงๆแล้วการขึ้นบรรทัดใหม่ไม่ได้รับการร้องขอและมีเพียง "#" เท่านั้นที่ต้องการการหลบหนีดังนั้นprintf \#%02X%02X%02Xก็เพียงพอแล้ว
จัดการ

เพิ่มวิธีการนอกรีตที่มากขึ้น :
F. Hauri

ฮ่า ๆ. วงในนั้นแน่นอนแหกคอกอย่างน่าตกใจ
จัดการ

@Manatwork ขอบคุณฉันพบd+=${c[$b$a 0x10]}สิ่งที่เซ็กซี่ !
F. Hauri

1
... หรืออาจd+=${c[$b$a 020]}จะทำงานและดูดี
F. Hauri

3

Perl, 31 ตัวอักษร

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

มันยากที่จะทำให้โปรแกรมสั้น ๆ แหกคอก แต่ฉันคิดว่ามันใช้งานได้


ฉันชอบคำตอบนี้ :) อีกสองสามครั้งและฉันคิดว่าฉันอาจจะจัดการกับเรื่องนี้ถ้าไม่มีอะไรดีกว่า
Quillion

เย็น! เป็นเพียงunpackคำถาม: คุณสามารถสร้างเลขฐานสิบหก a..f ตัวพิมพ์ใหญ่เหมือนในคำถามได้ไหม
ผลิต

@ การทำงานฉันพยายามหาวิธีที่จะทำภายในของunpackแต่ไม่มีโชค วิธีหนึ่งคือการใช้sprintfแทนunpackแต่ที่อีกต่อไปและออร์โธดอกสมบูรณ์ อีกวิธีหนึ่งคือเพียงแค่ปรับเปลี่ยนสตริงให้เป็นตัวพิมพ์ใหญ่: map{uc unpack H2,chr}โดยมีอักขระสามตัว
breadbox

ขอบคุณ @breadbox พวกนั้นมีเล่ห์เหลี่ยมเล็กน้อยpackและunpackไม่เคยเข้ากับสไตล์การเขียนโค้ดของฉันเลย นอกรีตมันก็เพียงพอแล้วสำหรับฉัน
ผลิต

นับผิด ทำเงิน 30 ตัว!
F. Hauri

3

Action Script 3 | 43 ตัวอักษร

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

เอาท์พุท: #483D8B


คุณไม่สามารถปล่อยพื้นที่สีขาวจำนวนมากที่นี่ได้หรือไม่? ฉันไม่รู้จัก Action Script แต่พวกเขาไม่จำเป็นต้องดู
Cruncher

@ Cruncher ใช่ขอโทษคำตอบแรกของฉันที่นี่
Ilya Gazman

2
สังหารอัฒภาคในตอนท้ายเพื่อบันทึกตัวละคร
Doorknob

3

Perl 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 ยังใช้งานได้ คุณกำลังใช้สภาพแวดล้อมหรือสภาพแวดล้อมใด
Darren Stone

2

C (67 ตัวอักษรไม่มีหลักสำเร็จรูป)

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

การใช้งาน printf & bit twiddler bog มาตรฐาน


รอreadf? ไม่ควรจะเป็นอย่างนั้นscanf?
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

JavaScript, 89 ตัวอักษร

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

แปลง72 61 139ไปเป็น256*(256*(72)+61)+139และ evals มัน


เป็นสิ่งที่ดี แต่ล้มเหลวในตัวอย่างที่ 3 ที่โพสต์ในคำถาม
จัดการ

อ่าดีโทร แก้ไขแล้ว.
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

PowerShell 37

บันทึกหนึ่งไบต์ขอบคุณ TimmyD

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 ไม่ทราบว่าการลบ [ไบต์] ทำงานอย่างถูกต้องในทุกรุ่นในรุ่นที่ฉันทดสอบ (iirc 2.0 ใน xp) โดยไม่มี [ไบต์] มันไม่ได้ต่อกันเป็น hex แต่เป็น ints 72 61 139 คือ # 7261139 ไม่ใช่ # 483d8b "# $ o" คำพูดไม่ได้ภายในตัวอักษรสตริง แต่การประเมินที่ดีสตริงที่จะรู้ว่าต้องขอบคุณความคิดเห็นเกี่ยวกับการแปลงเลขฐานสิบหกจะได้รับการชื่นชม
blabb

เห็นได้ชัดว่าเป็นความแตกต่างระหว่าง PowerShell v2 และ v3 - ต้องเป็นสิ่งที่รุ่น. NET ที่เกี่ยวข้องจัดการการแปลงเลขฐานสิบหก แต่ฉันไม่พบเอกสารประกอบ
AdmBorkBork


1

C, 67 73 ตัวอักษร (65 Chars ไม่รวม main)

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

โปรแกรม C น่าเบื่อ - ออร์โธดอกซ์มาก


ไม่ทำงานกับ ab หรือ c ที่เล็กกว่า 16
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()))

ฉันกำลังมองหาวิธีที่ดีกว่าในการจัดการค่าเลขฐานสิบหกหลักเดียว ความคิดใด ๆ


อาจจะใช้สตริงรูปแบบ? '% 02x' ดูเหมือนจะเป็นสิ่งที่ทุกคนทำ
jqblz

1

Befunge-98, 45 ตัวอักษร

Bleh รหัสซ้ำ โอ้ดี เพียงแค่การใช้ Radix Conversion

"#",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 นอกจากนี้ยังไม่ต้องสนใจกับ newlines และตามที่คุณเห็นว่ามันไม่ได้ ไม่ต้องเพิ่ม '#' อย่างถูกต้องเมื่อเรียกใช้ "แบบโต้ตอบ")


1

Game Maker Language, 175 (ข้อผิดพลาดที่ตำแหน่ง 81)

แจ้งสำหรับ RGB 3 ถึง 9 หลัก ส่งกลับเลขฐานสิบหกที่มีเครื่องหมายฐานสิบหกของ GML$

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

Gema, 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

Powershell ขนาด 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

Clojure 76 ตัวละคร

นี่อาจจะมาสายเพื่อความสมบูรณ์:

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

ตัวอย่างการโทร:

(hexy 0 255 127)
"#00FF7F"

0

Mathematica, 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

Javascript 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

Python 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.