HEX2をRGBAに変換する方法は?


11

アートの世界は色に満ちていますが、ネットワークの世界は、異なる色とそのレンダリングのアートの世界よりもさらに充実しています。そのため、ある形式のカラー形式を別の形式に変換する方法を知る必要があります。

課題は自明です:

与えられた16進コード(#00ff0080など)をRGBA(などrgba(0, 255, 0, 0.5))に変換するプログラム/関数を作成します。

ルール:

  • HEXをRGBAに変換するための外部ライブラリ/ビルトインは許可されていません。ただし、jQueryとそのような構文置換は許容されます。
  • 標準入出力ルールが適用されます。
  • アルファの形式は、(1 == 100%)またはもう1つ(100 == 100%)の間であり、これはあまり重要ではありません。
  • 4つの変換された値(String、Array、List、選択)を返す限り、出力は柔軟です。
  • #最初から入力せずに入力することもできます。したがって、入力は#RRGGBBAAまたはとして取得できますRRGGBBAA。16進コード(を除く#)は常に8文字の長さであると想定できます。
  • アルファを含むすべての値を255で除算する必要があります。最小小数点精度(アルファの場合、小数点以下2桁になります)。

テストケース

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

得点

、最小バイト数のコードが勝ちます。


コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
デニス

1
「16進コード」を文字列として取得する必要がありますか?あなたは、先行なしでそれを取ることができると言います#、その場合、それはちょうど32ビット整数値です。それとしてそれを取ることは合法ですか?
コーディグレー

回答:


4

JavaScript(ES6)、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'));


リック、これで最終仕様ができたようですので、回答を更新してください。
シャギー

だけでなく、シャギーさんのコメント@として、あなたが使用していくつかのバイトを保存することができますeval代わりにparseInts=>s.match(/../g).map((x,i)=>eval('0x'+x)/(i-3?1:255))
クレイグ・アイレ

@CraigAyre evalは、parseIntゴルフの目的に代わる素晴らしい選択肢です、ありがとう!
リックヒッチコック

@RickHitchcock、心配なし!を使用して、正規表現から数バイトを削ることもできます/../g。あなたは使用していても、さらにそれを軽減することができるかもしれないreplaceオーバーmatch/map
クレイグ・アイレ

ああ、ルールが変更されたので、最初のポンド記号は不要になりました。
リックヒッチコック

3

Japt、13バイト

入力を文字列として、先頭に#。rgba値を配列として出力します。

ò ®nG
pUo /#ÿ

試して


説明

変数を介して入力として文字列を暗黙的に取得しますU
"00ff0080"

ò

文字列を長さ2の要素の配列に分割します。
["00","ff","00","80"]

®nG

配列にマップし、各要素を基数16の文字列から10進数に変換します。次の改行のため、その配列は暗黙的にvariableに割り当てられます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バイト

rgba値として出力、なしで入力 #

$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

05AB1E、9バイト

2ôH`255/)

オンラインでお試しください!

少なくとも我々のようなサポーター持っEmignaしばしばには、いくつかの常識を使用して...(あなたはすべての日のゴルフのために取得し、どのようなのは、あなたのようなものを生産を開始することを2ô16öRć255/¸ìRಠ_ಠ)


5バイト短縮:2ôH`žz/)
エミグナ

チャレンジはそれにもかかわらず、閉じられた@Emigna ...
エリックOutgolfer

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

@EricTheOutgolferのおかげで-1バイト


1

PHP、72バイト

ヨルグの配列出力バージョンは最高です。しかし、他のオプションがあります:

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

でパイプとして実行し-Fます。#関係ありません、プレーンCSV出力

または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

SmileBASIC、50バイト

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

16進文字列はVAL()を使用して数値に変換され、RGBREADは各バイトを抽出します。#Lは値256の定数です。

RGBREADは、ARGBカラーからチャネルを抽出するように設計されていますが、実際には4バイト整数を4つの独立したバイトに分割するだけなので、順序は関係ありません。


私はいつも見てのような基本的な応答を、それはRGBAに進を変換するために構築された使用していますように私は、この応答は無効であり得ることを恐れている
テイラー・スコット

16進数文字列を整数に変換するための追加の手順が必要なため、16進数-> rgbaビルトインとしてはカウントされないと思います。
12Me21

実際、もう一度見てみると、あなたは正しいと思います。16進数からintへの明示的な変換は有効です。
テイラースコット


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

APL(Dyalog)、24バイト

⎕IO←0多くのシステムでデフォルトである必要があります。入力せずに大文字で入力を求めます#

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

オンラインでお試しください!

⎕D,⎕AD igitsに続いてA lphabet

⍞⍳⍨ テキスト入力(ニーモニック:引用付きコンソール)のための迅速かつ見つけるɩその中で各文字のNDEXを

4 2⍴Rの 4行2列の行列としてeshape

 転置(ベース変換は列ごとに機能するため)

16⊥ベース 16  として評価

 収量(3と16を分離するのに役立ちます)

256÷⍨@3 4 番目の要素を256で除算します




0

Excel VBA、90バイト

範囲から入力を受け取り[A1]、VBEイミディエイトウィンドウに出力する匿名VBEイミディエイトウィンドウ関数。

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.