Os terminais compatíveis com Xterm de 256 cores adicionam 240 cores além das 16 cores usuais do sistema. As cores 16-231 usam 6 níveis (0, 95, 135, 175, 215, 255) de vermelho, verde e azul, ordenados lexicograficamente. As cores 232-255 são simplesmente 24 níveis de cinza (8 ... 238 por 10s). Para ter uma idéia melhor do que estou falando, consulte esta tabela .
O desafio
Seu objetivo é criar um programa ou função que receba, como entrada, valores rgb e produza o número correspondente à cor Xterm mais próxima desse valor rgb. Como as 16 cores do sistema (cores de 0 a 15) geralmente são personalizáveis, você as excluirá dessa conversão.
Para definir melhor qual é a cor "mais próxima", use a distância de Manhattan ao longo dos componentes vermelho, verde e azul. Por exemplo, rgb(10, 180, 90)
está a 20 unidades de distância rgb(0, 175, 95)
(cor 35) porque abs(10 - 0) + abs(180 - 175) + abs(90 - 95) == 20
. Se a cor de entrada estiver igualmente entre duas ou mais cores Xterm, imprima a cor Xterm com o índice mais alto.
Exemplos
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
Regras
- As brechas padrão são proibidas
- Seu programa ou função pode receber valores de rgb em qualquer formato razoável, incluindo:
- Argumentos separados para vermelho, verde e azul
- Uma lista, tupla, dicionário ou similar
- String ou stdin separados por delimitadores
- Cores hexagonais (por exemplo
#ff8000
)
- Você pode assumir que todos os valores de r, g e b serão números inteiros entre 0 e 255.
- Como as 16 cores do sistema devem ser excluídas do mapeamento, todas as saídas devem estar na faixa de 16 a 255.
Isso é código-golfe , então o código mais curto vence.
Kotlin ,
299290267265 bytesEmbelezado
Teste
TIO
TryItOnline
fonte
Lote, 266 bytes
fonte
Stax , 41 bytes
Execute e depure online!
Versão ASCII de 50 bytes:
fonte
C (gcc),
202 192 157 150 (141 com erros) 138134 bytesObrigado @ceilingcat
Experimente online!
fonte