トゥルーカラーコード


12

ウィキペディアのトゥルーカラー(24ビット)は、関連する部分で次のように説明されています。

24ビットは、ほとんどの場合、R、G、Bの各8ビットを使用します。2018年現在、24ビットの色深度は、ほぼすべてのコンピューターと電話のディスプレイ、および大多数の画像ストレージ形式で使用されています。ピクセルごとに32ビットがあるほとんどすべての場合、24が色に使用され、残りの8がアルファチャネルまたは未使用であることを意味します。

2 24は16,777,216色のバリエーションを提供します。人間の目は最大1,000万色を識別でき[10]、ディスプレイの色域は人間の視覚の範囲よりも小さいため、これはその範囲を知覚できるより詳細にカバーする必要があることを意味します。...

...

Macintoshシステムでは、24ビットカラーを「数百万色」と呼びます。「トゥルーカラー」という用語は、この記事で「ダイレクトカラー」と呼ぶものを意味するために使用される場合があります。[13]また、24以上のすべての色深度を指すためにもよく使用されます。

An image containing all 16,777,216 colors

16,777,216色すべて

仕事

配列内のすべての16,777,216色のバリエーションを生成し、CSS rgb()関数の文字列として返すプログラムを作成する

5.1。RGB関数:rgb()およびrgba()

このrgb()関数は、赤、緑、青のチャンネルを直接指定することにより、RGBカラーを定義します。構文は次のとおりです。

rgb() = rgb( <percentage>{3} [ / <alpha-value> ]? ) |
        rgb( <number>{3} [ / <alpha-value> ]? )
<alpha-value> = <number> | <percentage>

最初の3つの引数は、それぞれ色の赤、緑、青のチャンネルを指定します。0%は、sRGB色域内のそのカラーチャネルの最小値を100%表し、最大値を表します。A は最大値を表します。これらの値は、多くのグラフィックスエンジンがカラーチャネルを内部で1バイトとして格納し、0〜255の整数を保持できるという事実に基づいています。実装は、可能な限り、作成または計算されたチャネルの精度を尊重する必要があります。これが不可能な場合、チャネルは使用される最高精度で最も近い値に丸められ、2つの値が等しく近い場合は切り上げられます。<number>はと同等ですが、<percentage>範囲が異なります。0ここでも、カラーチャネルの最小値を表しますが、255

最後の引数、は<alpha-value>、色のアルファを指定します。aとして指定した場合<number>、値の有効な範囲は0 (完全に透明な色を1表す)から(完全に不透明な色を表す)です。として指定した場合0%、完全に透明な色を100%表し、完全に不透明な色を表します。省略した場合、デフォルトはになり100%ます。

これらの範囲外の値は無効ではありませんが、計算値の時点でここで定義された範囲に固定されます。

レガシーの理由により、rgb()すべての引数をコンマで区切る代替構文もサポートしています。

rgb() = rgb( <percentage>#{3} , <alpha-value>? ) |
        rgb( <number>#{3} , <alpha-value>? )

また、従来の理由から、rgba()と同じ文法と動作を持つ関数も存在しrgb()ます。

またはRGB 16進表記#RRGGBB形式

5.2。RGB 16進表記:#RRGGBB

CSSの16進色表記では、チャネルを16進数で指定することで色を指定できます。これは、コンピューターコードで色を直接記述する場合とよく似ています。また、同じ色をrgb()表記で書くよりも短いです。

構文が<hex-color>あり<hash-token>、その値は3、4、6、または8桁の16進数で構成されたトークン。つまり、16進数の色は、ハッシュ文字「#」の後に、0〜9の数字またはa〜fの文字が続きます(文字の大文字小文字は関係ありません- #00ff00は同一です#00FF00)。

指定された16進数字の数によって、16進表記をRGBカラーにデコードする方法が決まります。

6桁

16進数として解釈される最初の数字のペアは、色の赤チャネルを指定します。ここで00、最小値を表し、ff(10進数で255)は最大を表します。同じように解釈される次の数字のペアは緑のチャンネルを指定し、最後のペアは青を指定します。色のアルファチャネルは完全に不透明です。

例2
言い換えれば、(ライムグリーン)#00ff00と同じ色を表しrgb(0 255 0)ます。

CSS Color Module Level 4のエディターのドラフトを参照してください。

CSSのrgb()機能空白文字はコンマ文字に置き換えることができ、例えば、rgb(0 255 0)

// `rgb()` `<percentage>` as strings in resulting array
['rgb(0%,0%,0%)', ...,'rgb(0%,255%,0)', ...'rgb(255,255,255)']

// `rgb()` `<number>` as strings in resulting array
['rgb(0,0,0)', ...,'rgb(0,255,0)', ...'rgb(255,255,255)']

CSS RGB 16進表記 RRGGBB

// RGB hexadecimal notation as strings in resulting array
['#000000', ...,'#00ff00', ...'#ffffff']

受賞基準

プログラムの書き込みに使用される最小バイト。


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

回答:


8

R、25バイト

sprintf("#%06X",1:2^24-1)

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


Rに精通していませんが、これは#000000の出力に失敗しますか?
nyanpasu64

2
いいえ、#000000を出力します。TIOリンクを参照してください
-J.Doe

@ jimbo1qaz a:b-ca-cto からをb-c含むベクターを作成します(ato からベクターを作成しbc各エントリから減算します)。
アーサー

2
ああ、Rは算術よりも厳密な優先順位でコロンを指定します... Pythonスライスとは異なります。
nyanpasu64

7

パイソン277の 40 39 37バイト

print['#%06X'%c for c in range(8**8)]

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

デジタルトラウマのおかげで-1バイト

-dylnanのおかげで-2バイト


2
なぜラムダが必要なのですか?リストの理解自体は有効な答えではありませんか?
アディリオ

2
バイトを保存する8**8代わりに試してください1<<24
デジタルトラウマ

2
どうprint['...
ですか

1
@Adirio値だけでは、チャレンジの実装としてカウントされません。
ジョナサンフレッチ

2
@Adirioあなた自身が[...]をPythonターミナルで書いた[...] -したがって、あなたの投稿はPython 2ではなくPython 2 REPLで書かれます。
ジョナサンフレッチ

6

PowerShell28 26バイト

1..16mb|%{"#{0:x6}"-f--$_}

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

から(16777216)1までループし16mbます。各反復では、文字列に対して-f事前にデクリメントされた現在の数値に作用するormat演算子を使用--$_します"#{0:x6}"。ここではx6数字が埋め込まれた値を指定し、その#前にハッシュを付けています。TIOでは、60秒/ 128KiBの出力に制限されています。変更1するために(16mb-5)見て、それが終了しますか


6

JavaScript(ES7)、65 62 61バイト

保存しました 3 4は@tshのおかげでバイト

#RRGGBB文字列の配列を返します。

_=>[...Array(n=8**8)].map(_=>'#'+(n++).toString(16).slice(1))

オンラインでお試しください! (出力の切り捨て)


現在のPythonソリューションはの8**8代わりに使用します1<<24。JSでも機能します。
tsh


4

Japt、14バイト

として出力し#rrggbbます。

G²³ÇsG ùT6 i'#

試してみてください(最初の4096要素に制限されています)


説明

G                  :16
 ²                 :Squared
  ³                :Cubed
   Ç               :Map the range [0,result)
    sG             :  Convert to base-16 string
       ù           :  Left pad
        T          :   With 0
         6         :   To length 6
           i'#     :  Prepend "#"

興味深い言葉。文字Tが「0」に使用される理由は何ですか?バイトを保存するために16-> Gを取得しますが、T-> 0では同じことを実行できません。
アレック

@Alec Tを0に置き換えると、6に結合して06になるためです。
geokavel18年

ああ、落とした。前/次の数字と結合したくない場合に、数字ごとに1文字がありますか?
アレック

@Alecは、geokavelが言ったように、この特定のケースでは、コンマを使用してに渡される2つの引数を区切る必要がないため、1バイト節約できますù。別の典型的な使用例は、たとえば配列のマッピング中に変数をインクリメントする必要がある場合にカウンターとして使用することです。そしてもちろん、それは変数なので、必要に応じて単純に値を割り当てることもできます。0ただし、独自の変数を持つ唯一の1桁の整数です。ただし、技術的には、6入力変数のU-Zデフォルトは7 です0。Japtの変数に割り当てられる他の整数は次のとおり-1, 10-16, 32, 64 & 100です。
シャギー

Japtの詳細については、お気軽にお問い合わせください。 、チャットルームください
シャギー



3

バッチ、87バイト

@set s= in (0,1,255)do @
@for /l %%r%s%for /l %%g%s%for /l %%b%s%echo rgb(%%r,%%g,%%b)

CSS形式で出力します。forステートメントが解析される前に変数置換が行われるため、実際のコードは次のようになります。

@for /l %%r in (0,1,255)do @for /l %%g in (0,1,255)do @for /l %%b in (0,1,255)do @echo rgb(%%r,%%g,%%b)



2

K(oK)、19バイト

解決:

$(3#256)\'!16777216

オンラインでお試しください!(最初の500個の数字に制限されます)

説明:

RGB文字列をダンプします。0から16777216までの各数値を基数256に変換してから、文字列に変換します...

$(3#256)\'!16777216 / the solution
          !16777216 / range 0..16777215
 (     )\'          / split each both
  3#256             / 256 256 256
$                   / string

2

MATL17 15バイト

10W:q'#%06X,'YD

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

TIOバージョンでは、タイムアウトしないように最初の2 ^ 10のみが表示されます。最後の繰り返しをフッターに含めて、実際にで終了することを示します #FFFFFFfprintf文字列を手動でアセンブルする代わりにに変更して1バイトを保存しました。コンマ区切りリストを出力します。

説明

24W:q            % Range from 0 to 2^24-1
     '#%06X,'    % fprintf format spec (# followed by hexadecimal, zero-padded, fixed-width, followed by newline)
             YD  % Call fprintf. Internally loops over range.

2

APL(Dyalog Unicode)47 43 20バイト

'#',(⎕D,⎕A)[↑,⍳616]

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

十分な時間/メモリがある場合、この匿名関数はすべてを出力します 2241カラーコード。これを確認6⍴するに4⍴は、コードのa を交換します。最大4桁のすべてのコードが出力されます。

23バイトの@Dzaimaと@ngnに感謝します。

を使用し⎕IO←0ます。

どうやって:

'#',(⎕D,⎕A)[↑,⍳616]  Main function
               616   Generate every possible 6 digit hex number in a matrix format
              ,        Ravel the matrix (from a 16x16x16x16x16x16 matrix to a 16^6x2 list)
                      Mix; (turns the list into a 16^6x2 matrix)
    (⎕D,⎕A)[       ]  Use that matrix to index the vector of the digits 0-9 concatenated with the alphabet.
'#',                   Then prepend a '#' to each.


1

V、25バイト

8É00lrx16777215ñÄ<C-a>ñ0<C-v>Gls#

オンラインでお試しください!(に置き換えられまし1677721531

説明

8É0                                " insert 8 zeroes
   0l                              " move cursor to the second character
     rx                            " replace by x
       16777215ñ      ñ            " 16777215 times do ..
                Ä                  " .. duplicate line
                 <C-a>             " .. increment (leading 0x makes sure it uses hexadecimals)
                       0<C-v>      " move cursor to beginning of line and start selection
                             Gl    " select the column with 0x
                               s#  " replace by #

1

バッチ、69 + 4 = 73

g.cmd、69

for /L %%A in (0,1,16777215)do cmd/kexit %%A&set #%%A=#!=exitcode:~2!

16進値をフォームとともに#RRGGBB「配列」に保存します。

g.cmdを使用して呼び出されcmd /V/Q/K g.cmdます。+ 4は、どこから来るこれは/V/Q、4つの追加文字としてカウントしたばかりに比べてcmd /K g.cmd。これにより、メモリ内に「配列」を持つ環境が設定されます。また、実行には永遠に時間がかかるため、非常に低い値を使用して実行を試行または中断しますCtrl+C


壊す

呼び出し

  • /V遅延展開を有効にしますが、より短いためsetlocal EnableDelayedExpansioncmd最初に呼び出しが必要です
  • /Q 出力を省略し、次と同等です @echo off
  • /K式(この場合g.cmd)を実行でき、その後終了しないため、次を使用して 'Array'を確認できます。set #

g.cmd

for /L %%A IN (0,1,16777215) DO (
    cmd /k exit %%A
    set #%%A=#!=exitcode:~2!
)

このビットは、ここに記載さているトリックを使用して通常の数値を16進数に変換し、その値を「配列」に保存します。


私はその格納構造を「配列」と呼んでいましたが、実際には配列がバッチに存在しないため、実際には正しくありません。ただし、次のように変数に名前を付けて、配列のような名前を付けることができます。

set elem[1]=First element
set elem[2]=Second one

または、この場合のように:

set #1=First element
set #2=Second one

あなたはまだそれらにアクセスすることができます !#%position%!


よく分かりません。ただし/V/Q/K、インタープリターの「引数」として要求され、「3 + 69 = 72」としてカウントされる場合があります。メタ
tsh

私はそれを知らなかったので、それに応じて答えを更新します。Thx @tsh

0

Groovy、53バ​​イト

c={a=[];(1<<24).times{a.add "".format("#%06x",it)};a}

関数定義。c()はArrayListを返します(配列を要求する質問でも問題ないと思います)。

暗黙のタイプを使用したゴルフなし:

ArrayList<String> c = {
    ArrayList<String> a = []
    (1 << 24).times { 
        a.add("".format("#%06x", it)) // add the hex-formatted number to the list.
    }
    return a
}

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


0

Java 10、87 84バイト

v->{int i=1<<24;var r=new String[i];for(;i-->0;)r[i]="".format("#%06X",i);return r;}

@ archangel.mjjのおかげで-3バイト。

オンラインで試してください(最初の4,096アイテムに限定)。

説明:

v->{                       // Method with empty unused parameter & String-array return-type
  int i=1<<24;             //  Integer `i`, starting at 16,777,216
  var r=new String[i];     //  Result String-array of that size
  for(;i-->0;)             //  Loop `i` in the range (16777216, 0]
    r[i]=                  //   Set the `i`'th item in the array to:
      "".format("#%06X",i);//   `i` converted to a hexadecimal value (of size 6)
  return r;}               //  Return the result-array

ああ、あなたは私が私の投稿を書いている間にこれを投稿したので、私たちは非常に似た答えを持っています。あなたはとの3つのバイトによって向上させることができますr[i]="".format("#%06X",i);
archangel.mjj

@ archangel.mjjああ、私はバカです。ありがとう!"".format("#%06X",i)Pythonの回答でそれを見たので実際に前に持っていましたが、TIOに十分な速度で動作させることができなかったため、回答を落としました。それから私鋸皆がちょうど最初の出力を4,096、私は忘れ、再び答えを書いたので、TIO上の項目を"#%06X"...> <。
ケビンCruijssen

@KevinCruijssen私はあなたがvar rJavaでできることを決して知りませんでした
。– FireCubez

@FireCubezこれはJava 10以降の新機能です。:) ここで、var
ケビンクルイッセン

0

PHP、68 62バイト

これはファイル内に配置されることになっており、配列は最後に返されて使用可能になります。

<?foreach(range(0,1<<24)as$i)$a[]=sprintf('#%06x',$i);return$a;

配列にアクセスするには、インクルードの結果(例$a = include 'xyz.php';:)を変数に渡すだけです。


@manatworkに6バイトを節約してくれてありがとう。


1
これにより、%1$06dフォーマット文字列を含む16進数が出力されることは確かですか?そして、私は使用する理由がわかりません1$。フォーマット文字列に「#」を含めることにより、長さを短縮できます#%06x。現在、最大16777216 =#1000000までカウントされるため、範囲を修正するために余分な文字を追加するときに便利です。
マナトワーク

まあ、それは....に変更%dすることを忘れなかった場合%x。そして#sprintf()通話内の移動を完全に忘れていました。あなたは私に6バイトを保存しました。ありがとう
イスマエルミゲル





0

T-SQL、122 117バイト

#RRGGBB文字列の16,777,216行のテーブルを返します。改行は読みやすくするためのものです:

WITH t AS(SELECT 0n UNION ALL SELECT n+1FROM t WHERE n<16777215)
SELECT'#'+FORMAT(n,'X6')FROM t option(maxrecursion 0)

0〜2 ^ 24-1の数値テーブルに再帰CTEを使用し、組み込みFORMATコマンド(SQL 2012以降で使用可能)を使用して、6桁の16進数文字列に変換します。を#前面に取り付ければ完了です。

編集1:POWER()機能を削除し、番号が短くなりました:P



0

Jelly, 8 bytes

ØHṗ6”#;Ɱ

Try it online! (note: uses 2 rather than 6 as 6 times out on TIO)

Function submission (because Jelly full programs will, by default, print lists of strings with no delimiters between them, making it hard to see the boundaries). The TIO link contains a wrapper to print a list of strings using newlines to separate them.

Explanation

ØHṗ6”#;Ɱ
ØH         All hex digits (“0123456789ABCDEF”)
  ṗ6       Find all strings of 6 of them (order relevant, repeats allowed)
    ”#;    Prepend “#”
       Ɱ     to each of the resulting strings

1
Out of interest -- why did you make your answer a community wiki?
Jonathan Frech

@JonathanFrech: I do this for all my posts because a) it reduces the incentive for people to game the reputation system (as the post doesn't give reputation), b) I'm happy to have my posts edited and the community-wiki marker is a way to indicate that. Stack Exchange's reputation system is more or less completely broken: on a past account, I once intentionally rep-capped every day for a week to show how easy the system was to game. Nowadays I pretty much want no part in it, especially as higher reputation simply just makes the site try to persuade you to moderate it.
ais523

Just curious -- on which stack did you achieve to game the reputation system?
Jonathan Frech

@JonathanFrech: This one. I was a 20k user, but eventually deleted my account because it was kind-of messing up my life, and because the reputation system was actively pushing me into making content that made the site worse, as opposed to better.
ais523



0

Perl 6, 26 bytes

{map *.fmt("#%06X"),^8**8}

Try it online!

Uses the same format as everyone else. Times out on TIO.

Or, in rgb format:

31 bytes

{map {"rgb($_)"},[X] ^256 xx 3}

Try it online!


I think the rgb output should be rgb(0, 0, 0) including the string rgb.
nwellnhof

@nwellnhof Updated (though it ended up shorter to do hexadecimal)
Jo King
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.