Dados 3 bytes ou RGB como entrada, calcule os valores CMYK mais próximos e faça a saída deles.
- crie uma função com parâmetros e valor de retorno ou um programa que opere em stdin / stdout
- use o perfil de cores de sua escolha, mas forneça uma referência
- entrada pode ser valores numéricos separados no intervalo [0; 255] ou uma sequência hexadecimal de 6 dígitos
- a saída deve ser valores numéricos separados, variando entre [0; 1] ou [0; 100]
- código de golfe padrão: sem brechas , o código mais curto vence
- idéias extravagantes são bem-vindas
dados de amostra:
input output
108,174,106 [0.3793103448275862, 0.0, 0.3908045977011494, 0.3176470588235294]
0,0,0 0,0,0,1
170,255,238 33,0,7,0
0x0088ff 1,0.4667,0,0
[250,235,215] [0,6,14,1.96]
#123456 .7907,.3953,0,.6627
- O mapeamento não calibrado é bom e provavelmente o mais fácil
- Nenhuma validação de entrada é necessária; flutuadores são permitidos (variando de 0 a 255), mas também podem ser arredondados
- O formato de saída deve ser claramente comentado ou óbvio; ou seja:
- CMYK nessa ordem
- não importa se a porcentagem [0; 100] ou os números puros [0; 1]
- O teste deve incluir o exemplo trivial [0,0,0].
Este site tem o maior número de ferramentas online que eu encontrei. Alguém conhece uma ferramenta que fornece mais de 4 dígitos?
code-golf
conversion
color
Titus
fonte
fonte
~
.Respostas:
Dyalog APL ,
1615 bytes1 menos
1-
X dividido por
÷
Y , seguido por,
255 dividindo255÷⍨
Y⊢
, ondeX é ele próprio
⊢
(ou seja, a lista de valores RGB) eY é o máximo
/⌈
(dos valores RGB).TryAPL!
Créditos:
-1 byte por ngn .
fonte
⍨
! Emoticon agradável⍣
e⍤
. Espero que cheguemos⍥
e em⍢
breve.ಠ
me faria feliz!C # ,
88868584 bytessaída para
108,174,106
:Como o OP permite a função, enviei apenas o lambda. Você pode encontrar uma demonstração em execução no .NetFiddle . Eu não sou um jogador de golfe, eu posto por diversão. Além disso, é a minha primeira resposta \ o /. Sinta-se livre para comentar qualquer melhoria :)
Parabéns à Leaky Nun pela fórmula.
ressalva: não funciona por [0,0,0] (obrigado Titus)
fonte
1.0-x/j
? Você certamente não pode fazer1-x/j
?a[3]
lo e não especifica um tamanho fixo paraa
; portanto, pode fazê-lo{r,g,b}
ea[3]=j*j
(porque, de qualquer maneira1 * a = a
).a
com oselect()
. Se eu usara[3]
assim, vou ficar fora de alcance e jogar, não é?#
na frente da linha. :)Python, 46 bytes
Requer entrada para flutuar no Python 2, com certeza não no 3.
fonte
JavaScript (ES6),
5851 bytesAceita uma matriz
[R, G, B]
(adicione 7 bytes para parâmetros separados) e retorna uma matriz[C, M, Y, K]
usando o mapeamento de cores não calibrado.fonte
a
mistura seu conteúdo? Isso é estranho. 3) Você testou [0,0,0]? Nenhuma exceção no ES, mas parece uma divisão por zero.[...a,m=Math.max(...a)]
sua solução de array. 5) Você pode jogar golfe com o outro usando uma matriz como entrada? Considere usara.0
etc. em vez de.map
.Mathematica,
36.28.33 bytesApós a liberalização dos formatos de E / S, jogou golfe ainda mais:List@@#~ColorConvert~"CMYK"&
Função anônima, que faz o que é solicitado.
A função antiga recebe três argumentos de 0 a 255 (qualquer coisa além desse intervalo será cortada automaticamente para esse intervalo) e retorna uma matriz de valores "CMYK" entre
0.
e1.
Exemplo (para função antiga):
Como matrizes são permitidas como entrada, 33 bytes:
É claro que as built-in alças função
{0, 0, 0}
correctamente e volta{0, 0, 0, 1}
.fonte
/255
?Bash + ImageMagick, 69 bytes
Exemplo:
fonte
SmileBASIC,
7372 bytesPode ser muito mais curto.
fonte
J=MAX(R,G,B)
?Pitão,
2421182421 bytesA vida é uma viagem de ida e volta.
Suíte de teste.
Entrada de amostra:
108,174,106
Saída de amostra:
[0.3793103448275862, 0.0, 0.3908045977011494, 0.3176470588235294]
Entrada de amostra:
0,0,0
Saída de amostra:
[0, 0, 0, 1.0]
Fórmula utilizada:
Fórmula antiga: http://i.stack.imgur.com/ZtPD6.gif
Fórmula antiga: http://i.stack.imgur.com/Nqi9F.gif
fonte
Lit , 114 bytes
Experimente online!
max
leva qualquer número de argumentos)Não tenho certeza se isso está certo. Os dois primeiros resultados com os dados da amostra estão corretos, mas o restante não (consulte a seção Experimente online ).
Usa a implementação descrita bem da seguinte maneira:
fonte
PHP 7,
123110105 bytesEntrada como cor RGB
100 240 75
Emite valores CMYK como decimais no
0...1
intervalo.Economizou muitos bytes graças a Titus.
Uso da amostra:
Teste on-line
Entrada como cor HEX
#123456
, 202 bytes54 bytes para a função impedir a divisão por zero, provavelmente jogável ou removível.
Obtém a cor RGB de entrada como HEX
#123456
e gera CMYK como decimal no0...1
intervalo.Uso da amostra:
fonte
separate numeric values
significa que você pode simplesmente pegar$h=$argv;
e usar em$h[1]
vez de$h[0]
etc. Eu gosto doNAN
truque; mas isso não gera avisos?strtr
provavelmente é menor questr_replace
eNAN
não precisa de cotação (produzirá avisos, mas eles não serão exibidos na configuração padrão).1/0
resultaINF
) nem no PHP 5 (1/0
=>false
).$argv
dica de array muito interessante na linha de comando! Eu adicionei a versão PHP. Ele funcionaNAN
porque, quando você o usastr_replace
, converte implicitamente o número em string, para que ele saiaNAN
; na verdade, se você verificar neste link , verá que ele saiNAN
por causa de, emstr_replace("INF"
vez destr_replace("NAN"
. Eu não poderia fazê-lo funcionar usandostrtr
. Eu adicionei o@
para suprimir os avisos.$n/0
éINF
, mas0/0
éNAN
(também no PHP 7.0). Você pode salvar 4 bytes comstr_replace(NAN,0,$s)
ou 6 bytes comstrtr($s,["NAN"=>0)
.strtr()
;PHP, não competindo
Eu estava muito tentado a postar o meu.
Entrada RGB, 74 bytes
ou 68 bytes com uma vírgula à direita na saída: remova
[$i>3]
.Corra com
php -r '<code>' <red-value> <green-value> <blue-value>
.Entrada HEX, 100 bytes
Corra com
php -nr '<code>' RRGGBB
.Essa abordagem levaria 75 bytes para a entrada RGB:
substitua
foreach($a=array_map...as$c)
porforeach($a=$argv as$c)if($i++)
.fonte
C, 155 bytes
Estou tentando descobrir como é possível jogar mais golfe.
Uso:
Resultado:
fonte
i>0?i>1?i>2
j>0?
17 em livrar-se do loop e 6 em dividir aj
definição.F *
). Mas encontrei outro byte para jogar golfe em C99.j>0?j:1
pode serj+!j
para obter -3 bytes.C
macro está incorreta:1-x/1
paraj==0
? Eu acho que deveria ser1-(j>0?x/j:1)
.Hoon , 110 bytes
Use a biblioteca de ponto flutuante de precisão única. Crie uma nova função genérica que leva
a
. Definas
parasub
curry com.1
para mais tarde ej
para dobrara
commax
.Mapeie
a
dividindo cada elemento comj
, encontrando o mínimo disso e 1 para normalizar NaN e subtraindo 1 coms
. Adicione1-j/255
ao final dessa lista.fonte