এইচএক্স 2 কে আরজিবিএতে রূপান্তর করবেন কীভাবে?


11

শিল্পের জগতটি রঙে পূর্ণ, তবে নেটওয়ার্কের জগৎ বিস্তৃত রঙের শিল্পের জগতের চেয়েও পরিপূর্ণ এবং এটি রেন্ডারিং। একারণে আমাদের জানতে হবে কীভাবে এক ধরণের রঙিন বিন্যাসকে অন্য রূপান্তর করতে হয়।

চ্যালেঞ্জটি স্ব-স্পষ্ট:

প্রদত্ত এইচএক্স কোডটি ( #00ff0080উদাহরণস্বরূপ) আরজিবিএতে (যেমন rgba(0, 255, 0, 0.5)) রূপান্তর করার চেয়ে একটি প্রোগ্রাম / ফাংশন লিখুন ।

নিয়মাবলী:

  • এইচএক্সকে আরজিবিএতে রূপান্তর করার জন্য বাহ্যিক গ্রন্থাগার / বিল্ট-ইনগুলি অনুমোদিত নয়। যাইহোক, jQuery এবং সিনট্যাক্স এর মতো সিন্ট্যাক্সগুলি গ্রহণযোগ্য।
  • স্ট্যান্ডার্ড ইনপুট / আউটপুট বিধি প্রযোজ্য।
  • আলফা ফর্ম্যাটটি (1 == 100%) বা অন্য (100 == 100%) এর মধ্যে হতে পারে যা সত্যই গুরুত্বপূর্ণ নয়।
  • আউটপুটটি নমনীয় , যতক্ষণ না এটি 4 রূপান্তরিত মানগুলি (স্ট্রিং, অ্যারে, তালিকা, আপনার পছন্দ হিসাবে) প্রদান করে।
  • #শুরুতে আপনি ইনপুট নেওয়া বেছে নিতে পারেন । অতএব, আপনি ইনপুট নিতে পারেন হিসাবে হয় #RRGGBBAAবা হিসাবে RRGGBBAA। আপনি ধরে নিতে পারেন যে হেক্স কোড (বাদে #) সর্বদা 8 টি অক্ষর দীর্ঘ হবে।
  • আপনার সমস্ত মানটি আলফা সহ 255 দ্বারা ভাগ করা উচিত। সর্বনিম্ন দশমিক সুস্পষ্টতা (আলফার জন্য 2 দশমিক স্থান হবে)।

পরীক্ষার কেস

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

স্কোরিং

, ন্যূনতম পরিমাণ বাইট জিতের কোড।


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
ডেনিস

1
আমাদের কি "হেক্স কোড" স্ট্রিং হিসাবে নেওয়া দরকার ? আপনি বলে থাকেন যে আমরা অগ্রণী ব্যতীত এটি নিতে পারি #, এক্ষেত্রে এটি কেবল 32-বিট সংখ্যার মান হবে। এটি কি হিসাবে গ্রহণ করা আইনী?
কোডি গ্রে

উত্তর:


4

জাভাস্ক্রিপ্ট (ES6), 73 54 50 বাইট

(@ লিকইনুন, সম্পাদিত চ্যালেঞ্জ এবং @ ক্রেইগএয়ারকে ধন্যবাদ জানিয়ে কিছু বাইট সংরক্ষণ করা হয়েছে))

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'));


রিক, দেখে মনে হচ্ছে আমাদের কাছে এখনই এটির চূড়ান্ত বৈশিষ্ট রয়েছে যাতে আপনি নিজের উত্তর আপডেট করতে পারেন।
শেগি

পাশাপাশি @ শ্যাগির মন্তব্য হিসাবে আপনি এর evalপরিবর্তে কয়েকটি বাইট সংরক্ষণ করতে পারেন parseInt:s=>s.match(/../g).map((x,i)=>eval('0x'+x)/(i-3?1:255))
ক্রেগ আয়রে

@ ক্রেইগএয়ার, গল্ফিংয়ের উদ্দেশ্যে evalএকটি দুর্দান্ত বিকল্প parseInt, ধন্যবাদ!
রিক হিচকক

@ রিকহিটকক, কোন উদ্বেগ নেই! আপনি ব্যবহার করে রেজেক্স থেকে কয়েক বাইট শেভ করতে পারেন /../g। এমনকি আপনি ব্যবহার করে এটি কমাতে আরও সক্ষম হতে পারেন replaceউপর match/map
ক্রেগ Ayre

ওহ, আমি দেখছি নিয়মগুলি পরিবর্তন হয়েছে, তাই প্রাথমিক পাউন্ড সাইনটির আর প্রয়োজন নেই।
রিক হিচকক

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

পিএইচপি , 63 বাইট

অ্যারে হিসাবে আউটপুট

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

এটি অনলাইন চেষ্টা করুন!

পিএইচপি , 80 বাইট

আরজিবা মান হিসাবে আউটপুট, বিনা ইনপুট #

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

এটি অনলাইন চেষ্টা করুন!

পিএইচপি , 88 বাইট

আরজিবা মান হিসাবে আউটপুট, ইনপুট #

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

05 এ বি 1 ই , 9 বাইট

2ôH`255/)

এটি অনলাইন চেষ্টা করুন!

কমপক্ষে আমাদের কাছে কিছুটা সাধারণ জ্ঞান ব্যবহার করার জন্য এমিগনার মতো সমর্থক রয়েছে ... (এটি আপনি সারা দিন গল্ফ করার জন্য পান এবং তারপরে আপনি stuff_ಠ এর মতো স্টাফ উত্পাদন শুরু করেন 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 বাইট ধন্যবাদ @ এরিকআউটগলফারকে ধন্যবাদ


1

পিএইচপি, 72 বাইট

জার্গসের অ্যারে আউটপুট সংস্করণ অপরাজেয়; কিন্তু অন্যান্য অপশন আছে:

<?=($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;

এত সাধারণ নয়, ৮১ বাইট :

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

হেক্সাডেসিমাল স্ট্রিংটি VAL () ব্যবহার করে একটি সংখ্যায় রূপান্তরিত হয়, তারপরে আরজিবিআরএডিআর প্রতিটি বাইট বের করে। #L 256 মান সহ একটি ধ্রুবক।

আরজিবিআরএডিটি একটি এআরজিবি রঙ থেকে চ্যানেলগুলি বের করার জন্য ডিজাইন করা হয়েছে, তবে সত্যই এটি একটি 4 বাইট পূর্ণসংখ্যা 4 টি পৃথক বাইটে বিভক্ত করে, যাতে আদেশের কোনও ব্যাপার হয় না।


আমি সর্বদা প্রাথমিক প্রতিক্রিয়াগুলি দেখতে পছন্দ করি তবে আমি ভয় করি যে এই প্রতিক্রিয়াটি অবৈধ হতে পারে, কারণ এটি হেক্সাডেসিমালকে আরগবাতে রূপান্তর করার জন্য একটি বিল্ট ইন ব্যবহার করে
টেলর স্কট

আমি মনে করি এটি হেক্স-> আরজিবা বিল্টিন হিসাবে গণ্য হচ্ছে না কারণ হেক্স স্ট্রিংটিকে পূর্ণসংখ্যায় রূপান্তর করতে এটির জন্য অতিরিক্ত পদক্ষেপের প্রয়োজন।
12Me21

প্রকৃতপক্ষে, এটিকে আবার দেখলে, আমি মনে করি আপনি ঠিক বলেছেন, হেক্স থেকে ইনটকে স্পষ্ট রূপান্তরকরণ এটি বৈধ করে তুলবে।
টেলর স্কট 12


0

JS 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

q / kdb +, 43 বাইট

সমাধান:

{(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ডি আইজিগুলি এর পরে একটি এলফ্যাবেট

⍞⍳⍨ পাঠ্য ইনপুটটির জন্য প্রম্পট করুন ( স্মৃতিভিত্তিক : উদ্ধৃতি সহ কনসোল) এবং এতে প্রতিটি বর্ণের de ndex সন্ধান করুন

4 2⍴R চার সারি দুই কলামের ম্যাট্রিক্স হিসাবে eshape

 ট্রান্সপোজ (কারণ বেস রূপান্তর কলাম দিকের কাজ করে)

16⊥বেস  হিসাবে মূল্যায়ন ষোল

 ফলন (পৃথক 3 এবং 16 প্রদান করে)

256÷⍨@3 25 তম দ্বারা 4 র্থ উপাদানকে ভাগ করুন



0

ইয়াবাসিক , 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

এটি অনলাইন চেষ্টা করুন!


এর আগে লাইন ব্রেকটি সরিয়ে আপনি একটি বাইট সংরক্ষণ করতে পারেন ?
12

0

এক্সেল ভিবিএ, 90 বাইট

একটি বেনামে ভিবিই তাত্ক্ষণিক উইন্ডো ফাংশন যা পরিসীমা থেকে ইনপুট নেয় [A1]এবং ভিবিই তাত্ক্ষণিক উইন্ডোতে আউটপুট নেয় ।

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

0

Vim, 46 বাইট

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

ছাড়াই ইনপুট নেয় #এবং স্ক্রিনে মুদ্রণ করে ফিরে আসে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.