HEX2 को RGBA में कैसे बदलें?


11

कला की दुनिया रंग से भरी है, लेकिन अलग-अलग रंगों की कला की दुनिया की तुलना में नेटवर्क की दुनिया और भी अधिक पूर्ण है और यह रेंडरिंग है। इसलिए हमें यह जानना होगा कि एक प्रकार के रंग प्रारूप को दूसरे में कैसे परिवर्तित किया जाए।

चुनौती स्व-स्पष्ट है:

किसी दिए गए HEX कोड (जैसे #00ff0080, उदाहरण के लिए) को RGBA (जैसे rgba(0, 255, 0, 0.5)) से कनवर्ट करता है ।

नियम:

  • HEX को RGBA में परिवर्तित करने के लिए बाहरी लाइब्रेरी / बिल्ट-इन को अस्वीकृत कर दिया गया है। हालाँकि, jQuery और सिंटेक्स प्रतिकृति जैसे स्वीकार्य हैं।
  • मानक इनपुट / आउटपुट नियम लागू होते हैं।
  • अल्फा का प्रारूप (1 == 100%) या अन्य (100 == 100%) के बीच हो सकता है जो वास्तव में महत्वपूर्ण नहीं है।
  • आउटपुट लचीला है , जब तक कि यह 4 परिवर्तित मान (एक स्ट्रिंग, सरणी, सूची, आपकी पसंद के रूप में) लौटाता है।
  • आप #शुरुआत में बिना इनपुट के चुनाव कर सकते हैं । इसलिए, आप #RRGGBBAAया तो इनपुट ले सकते हैं RRGGBBAA। आप मान सकते हैं कि हेक्स कोड (को छोड़कर #) हमेशा 8 वर्ण लंबा होगा।
  • आपको अल्फा सहित सभी मानों को 255 से विभाजित करना चाहिए। न्यूनतम दशमलव सटीकता (अल्फा के लिए 2 दशमलव स्थान होंगे)।

परीक्षण के मामलों

Input:  00ff0080
Output: 0, 255, 0, 0.5

स्कोरिंग

, कम से कम बाइट्स वाला कोड जीतता है।


टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
डेनिस

1
क्या हमें एक स्ट्रिंग के रूप में "हेक्स कोड" लेने की आवश्यकता है ? आप कहते हैं कि हम इसे अग्रणी के बिना ले सकते हैं #, इस स्थिति में यह केवल 32-बिट पूर्णांक मान होगा। क्या इसे वैसा ही लेना कानूनी है?
कोडी ग्रे

जवाबों:


4

जावास्क्रिप्ट (ईएस 6), 73 54 50 बाइट्स

(@LeakyNun, संपादित चुनौती और @CraigAyre की बदौलत कुछ बाइट्स को सहेजा गया)

s=>s.match(/../g).map((c,i)=>('0x'+c)/(i-3?1:255))

let f=

s=>s.match(/../g).map((c,i)=>('0x'+c)/(i-3?1:255))

console.log(f('00ff0080'));


रिक, ऐसा लगता है कि हमारे पास इसके लिए अंतिम कल्पना है ताकि आप अपने उत्तर को अपडेट कर सकें।
झबरा

साथ ही @ Shaggy की टिप्पणी से आप evalइसके बजाय कुछ बाइट्स बचा सकते हैं parseInt:s=>s.match(/../g).map((x,i)=>eval('0x'+x)/(i-3?1:255))
क्रेग आयरे

@ क्रेगएयर, गोल्फ उद्देश्यों के लिए evalएक बढ़िया विकल्प parseIntहै, धन्यवाद!
रिक हिचकॉक

@RickHitchcock, कोई चिंता नहीं! तुम भी regex से बाइट्स के एक जोड़े का उपयोग कर दाढ़ी कर सकते हैं /../g। आप replaceओवर को कम करने में सक्षम हो सकते हैं match/map
क्रेग आयरे

ओह, मैं देख रहा हूं कि नियम बदल गए हैं, इसलिए प्रारंभिक पाउंड साइन की आवश्यकता नहीं है।
रिक हिचकॉक

3

जाप , 13 बाइट्स

अग्रणी के बिना, एक स्ट्रिंग के रूप में इनपुट लेता है #। एक सरणी के रूप में rgba मान को आउटपुट करता है।

ò ®nG
pUo /#ÿ

झसे आज़माओ


व्याख्या

हम स्पष्ट रूप से स्ट्रिंग को चर के माध्यम से इनपुट के रूप में लेते हैं U
"00ff0080"

ò

स्ट्रिंग को लंबाई 2 के तत्वों की एक सरणी में विभाजित करें।
["00","ff","00","80"]

®nG

सरणी पर मैप करें और प्रत्येक तत्व को आधार 16 स्ट्रिंग से दशमलव संख्या में परिवर्तित करें। निम्नलिखित न्यूलाइन के कारण, उस सरणी को स्पष्ट रूप से चर को सौंपा गया है U
[0,255,0,128]

Uo

सरणी से अंतिम तत्व पॉप।
128

/#ÿ

इसे 255 से विभाजित करें।
0.5019607843137255

p

परिणाम को Uफिर से अंतिम रूप से आउटपुट में स्पष्ट रूप से पुश करें ।
[0,255,0,0.5019607843137255]


2

PHP , 63 बाइट्स

सरणी के रूप में आउटपुट

$h=array_map(hexdec,str_split($argn,2));$h[3]/=255;print_r($h);

इसे ऑनलाइन आज़माएं!

PHP , 80 बाइट्स

आरजीबी मूल्य के रूप में आउटपुट, बिना इनपुट #

$h=array_map(hexdec,str_split($argn,2));$h[3]/=255;echo"rgba(",join(",",$h),")";

इसे ऑनलाइन आज़माएं!

PHP , 88 बाइट्स

आउटपुट के रूप में rgba मूल्य, इनपुट के साथ #

for(;$i<7;)$h[]=hexdec($argn[++$i].$argn[++$i]);$h[3]/=255;echo"rgba(",join(",",$h),")";

इसे ऑनलाइन आज़माएं!


2

सी (जीसीसी) , 139 बाइट्स

C(x){x=x>57?x-87:x-48;}
#define Z C(h[i])*16+C(h[++i]))
i;f(char*h){printf("rgba(");for(i=0;i<6;i++)printf("%i, ",Z;printf("%g)",(Z/256.);}

इसे ऑनलाइन आज़माएं!

मेरा अन्य प्रयास 145 बाइट्स में देखा गया । मैं एक सी गोल्फर से ज्यादा नहीं हूं, इसलिए यह शायद कम हो सकता है।


2

05AB1E , 9 बाइट्स

2ôH`255/)

इसे ऑनलाइन आज़माएं!

कम से कम हमारे पास समर्थकों जैसे एमिग्ना अक्सर कुछ सामान्य ज्ञान का उपयोग करते हैं ... (यह वही है जो आपको पूरे दिन गोल्फिंग के लिए मिलता है और फिर आप you_ಠ जैसे सामान का उत्पादन शुरू करते हैं 2ô16öRć255/¸ìR)


5 बाइट्स छोटी:2ôH`žz/)
एमिगना

@Emigna चुनौती को अभी भी बंद कर दिया गया है ...
एरिक आउटगॉल्फर

1

जेली , 15 14 बाइट्स

Øhi$€’s2ḅ⁴÷4¦⁹

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

Øhi$€’s2ḅ⁴÷4¦⁹ - main link, takes input without # and all lowercase
   $€             - to each input character:
  i               - return its 1-based index in
Øh                - the string "0123456789abcdef"
     ’            - decrement (otherwise 0 is mapped to 1 and f to 16)
      s2          - split the characters into groups of two
        ḅ⁴        - convert from base 16 to decimal
           4¦     - on the fourth element:
          ÷       - divide by
             ⁹    - 256

-1 बाइट के लिए धन्यवाद @EricTheOutgolfer


1

PHP, 72 बाइट्स

Jörg ;s सरणी आउटपुट संस्करण अपराजेय है; लेकिन अन्य विकल्प भी हैं:

<?=($a=hexdec($argn))>>24,",",255&$a>>16,",",255&$a>>8,",",(255&$a)>256;

साथ पाइप के रूप में चलाएँ -F#कोई बात नहीं, सादे सीएसवी उत्पादन

या 73 बाइट्स (साथ चलाएं -R):

for($a=hexdec($argn);$i++<4;)echo(255&$a>>32-8*$i)/($i<4?:256),","[$i>3];

रिक्त स्थान के साथ 74 बाइट्स :

<?=($a=hexdec($argn))>>24,$c=", ",255&$a>>16,$c,255&$a>>8,$c,(255&$a)>256;

इतना सादा नहीं, 81 बाइट्स :

rgba(<?=($a=hexdec($argn))>>24,$c=", ",255&$a>>16,$c,255&$a>>8,$c,(255&$a)/256?>)


1

एक्सेल, 99 बाइट्स

=HEX2DEC(LEFT(A1,2))&","&HEX2DEC(MID(A1,3,2))&","&HEX2DEC(MID(A1,5,2))&","&HEX2DEC(RIGHT(A1,2))/256

1

स्माइलबासिक, 50 बाइट्स

INPUT H$RGBREAD VAL("&H"+H$)OUT R,G,B,A?R,G,B,A/#L

हेक्साडेसिमल स्ट्रिंग को वैल () का उपयोग करके संख्या में परिवर्तित किया जाता है, फिर RGBREAD प्रत्येक बाइट को निकालता है। #L मान 256 के साथ एक स्थिर है।

RGBREAD को एक ARGB रंग से चैनल निकालने के लिए डिज़ाइन किया गया है, लेकिन वास्तव में यह 4 बाइट पूर्णांक को 4 अलग बाइट्स में विभाजित करता है, इसलिए यह क्रम मायने नहीं रखता है।


मैं हमेशा बुनियादी प्रतिक्रियाओं को देखना पसंद करता हूं , लेकिन मुझे डर है कि यह प्रतिक्रिया अमान्य हो सकती है, क्योंकि यह हेक्साडेसिमल को आरजीबी में परिवर्तित करने के लिए बनाया गया है
टेलर स्कॉट

मुझे लगता है कि यह एक हेक्स-> आरजीबी बिलिन के रूप में नहीं गिना जाता है क्योंकि हेक्स स्ट्रिंग को पूर्णांक में बदलने के लिए एक अतिरिक्त कदम की आवश्यकता होती है।
12M2121

दरअसल, इसे फिर से देखते हुए, मुझे लगता है कि आप सही हैं, हेक्स से इंट में स्पष्ट रूपांतरण इसे वैध बना देगा।
टेलर स्कॉट


0

जेएस ES2015, 84 बाइट्स

$=>{a=[1,3,5,7].map(b=>eval("0x"+$.substr(b,2)));a[3]=(a[3]/256);return a.join(",")}

यह एक समारोह है। इसका उपयोग करके चलाएं

( CODE )("#00ff0080")


0

क्यू / केडीबी +, ४३ बाइट्स

समाधान:

{(16 sv'(.Q.n,6#.Q.a)?/:2 cut x)%1 1 1 256}

उदाहरण:

q){(16 sv'(.Q.n,6#.Q.a)?/:2 cut x)%1 1 1 256}"00ff0080"
0 255 0 0.5

स्पष्टीकरण:

{                                         } / anonymous lambda function
                        2 cut x             / split input into 2-char length lists
                     ?/:                    / returns index where (each-right) item is found in 'the list'
        (           )                       / 'the list'
              6#.Q.a                        / Q.a is lowercase alphabet, 6# takes first 6 chars
         .Q.n,                              / Q.n is "012..89", so prepend this onto the "abcdef"                         
  16 sv'                                    / converts each index from base 16 to base 10
 (                            )%1 1 1 256   / divide this output by 1,1,1,256 to get alpha in 0..1 range 

0

एपीएल (डायलॉग) , 24 बाइट्स

⎕IO←0कई सिस्टम पर डिफ़ॉल्ट की आवश्यकता होती है। इनपुट के लिए संकेतों का बिना अपरकेस के रूप में #

256÷⍨@316⊥⍉4 2⍴⍞⍳⍨⎕D,⎕A

इसे ऑनलाइन आज़माएं!

⎕D,⎕Aडी igits द्वारा पीछा एक वर्णमाला

⍞⍳⍨ पाठ इनपुट के लिए शीघ्र (स्मरक: उद्धरण के साथ सांत्वना) और पाते हैं ɩ कि में प्रत्येक अक्षर के ndex

4 2⍴चार पंक्ति दो स्तंभ मैट्रिक्स के रूप में r eshape

 स्थानांतरण (क्योंकि आधार रूपांतरण कॉलमवाइज़ काम करता है)

16⊥आधार सोलह के  रूप में मूल्यांकन करें

 उपज (3 और 16 अलग करने के लिए कार्य करता है)

256÷⍨@3 4 वें तत्व को 256 से विभाजित करें



0

Yabasic , 96 बाइट्स

फिर भी एक और जवाब; इनपुट को स्ट्रिंग के रूप में लेता है और कंसोल को आउटपुट करता है।

Input""a$
For i=1To 7Step 2
?Dec(Mid$(a$,i,2))/(j+1);
If i=5Then j=255Fi
If i<7Then?", ";Fi
Next

इसे ऑनलाइन आज़माएं!


पहले लाइन ब्रेक को हटाकर आप एक बाइट बचा सकते हैं ?
12M2121

0

एक्सेल VBA, 90 बाइट्स

एक अनाम VBE तत्काल विंडो फ़ंक्शन जो रेंज से इनपुट लेता है [A1]और VBE तत्काल विंडो में आउटपुट करता है।

For i=1To 7Step 2:[B1]=i:?[Hex2Dec(Mid(A1,B1,2))]/IIf(i=7,256,1)&""+IIf(i<7,", ","");:Next

0

विम, 46 बाइट्स

:s/../$((16#&)) /g␊iecho ␛$hhi*100/255␛:w !sh␊

बिना इनपुट के लेता है #और स्क्रीन पर प्रिंट करके लौटता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.