256色のXterm互換端末は、通常の16システム色の上に240色を追加します。色16〜231は、辞書式に並べられた赤、緑、青の6つのレベル(0、95、135、175、215、255)を使用します。色232-255は、単純に24レベルのグレー(8〜238 x 10秒)です。私が話していることをよりよく理解するには、この表を参照してください。
チャレンジ
目標は、入力としてrgb値を取り、そのrgb値に最も近いXterm色に対応する数値を出力するプログラムまたは関数を作成することです。16のシステムカラー(色0〜15)は多くの場合カスタマイズ可能であるため、この変換から除外します。
「最も近い」色を明確に定義するには、赤、緑、青の成分に沿ってマンハッタン距離を使用します。たとえば、rgb(10, 180, 90)
から20ユニット離れていますrgb(0, 175, 95)
(色35)abs(10 - 0) + abs(180 - 175) + abs(90 - 95) == 20
。入力色が2つ以上のXterm色の間で等しい場合、最高のインデックスを持つXterm色を出力します。
例
R G B Xterm
0 0 0 ==> 16
95 135 0 ==> 64
255 255 255 ==> 231
238 238 238 ==> 255
90 133 140 ==> 66
218 215 216 ==> 188
175 177 178 ==> 249
175 0 155 ==> 127
75 75 75 ==> 239
23 23 23 ==> 234
115 155 235 ==> 111
ルール
- 標準的な抜け穴は禁止されています
- プログラムまたは関数は、次のような合理的な形式でrgb値を取得できます。
- 赤、緑、青の個別の引数
- リスト、タプル、辞書など
- 区切り文字で区切られた文字列または標準入力
- 16進数の色(例
#ff8000
)
- すべてのr、g、およびbの値は0〜255の整数であると想定できます。
- 16のシステムカラーはマッピングから除外されるため、すべての出力は16 ... 255の範囲にある必要があります。
これはcode-golfなので、最短のコードが優先されます。