I terminali compatibili con Xterm a 256 colori aggiungono 240 colori in aggiunta ai soliti 16 colori di sistema. I colori 16-231 usano 6 livelli (0, 95, 135, 175, 215, 255) di rosso, verde e blu, ordinati lessicograficamente. I colori 232-255 sono semplicemente 24 livelli di grigio (8 ... 238 per 10 secondi). Per avere un'idea migliore di cosa sto parlando, vedere questa tabella .
La sfida
Il tuo obiettivo è creare un programma o una funzione che accetta, come input, valori rgb e genera il numero corrispondente al colore Xterm più vicino a quel valore rgb. Poiché i 16 colori di sistema (colori 0-15) sono spesso personalizzabili, li escluderai da questa conversione.
Per definire meglio qual è il colore "più vicino", usa la distanza di Manhattan lungo i componenti rosso, verde e blu. Ad esempio, rgb(10, 180, 90)
dista 20 unità da rgb(0, 175, 95)
(colore 35) perché abs(10 - 0) + abs(180 - 175) + abs(90 - 95) == 20
. Se il colore di input è uguale tra due o più colori Xterm, genera il colore Xterm con l'indice più alto.
Esempi
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
Regole
- Sono vietate le scappatoie standard
- Il tuo programma o funzione è autorizzato ad assumere valori rgb in qualsiasi formato ragionevole, tra cui:
- Argomenti separati per rosso, verde e blu
- Un elenco, tupla, dizionario o simili
- Stringa o stdin separati da delimitatore
- Colori esadecimali (ad es.
#ff8000
)
- Puoi presumere che tutti i valori di r, g e b saranno numeri interi compresi tra 0 e 255.
- Poiché i 16 colori di sistema devono essere esclusi dalla mappatura, tutte le uscite devono essere comprese nell'intervallo 16 ... 255.
Questo è code-golf , quindi vince il codice più corto.