Dados 3 bytes o RGB como entrada, calcule los valores CMYK más cercanos y expórtelos.
- cree una función con parámetros y valor de retorno o un programa que opera en stdin / stdout
- use el perfil de color de su elección, pero proporcione una referencia
- la entrada puede ser valores numéricos separados en el rango [0; 255] o una cadena hexadecimal de 6 dígitos
- la salida debe ser valores numéricos separados que varían entre [0; 1] o [0; 100]
- golf de código estándar: sin lagunas , gana el código más corto
- ideas extravagantes son bienvenidas
Data de muestra:
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
- El mapeo sin calibrar está bien y probablemente sea el más fácil
- No se requiere validación de entrada; los flotadores están permitidos (de 0 a 255), pero también pueden redondearse
- El formato de salida debe ser claramente comentado u obvio; es decir:
- CMYK en ese orden
- no importa si el porcentaje [0; 100] o los números puros [0; 1]
- Las pruebas deben incluir el ejemplo trivial [0,0,0].
Este sitio tiene la mayor cantidad de herramientas en línea que pude encontrar. ¿Alguien sabe una herramienta que da más de 4 dígitos?
code-golf
conversion
color
Tito
fuente
fuente
~
.Respuestas:
Dyalog APL ,
1615 bytes1 menos
1-
X dividido por
÷
Y , seguido de,
255 dividiendo255÷⍨
Y⊢
, dondeX es en sí mismo
⊢
(es decir, la lista de valores RGB) eY es el máximo
/⌈
(de los valores RGB).TryAPL!
Créditos:
∘ -1 byte por ngn .
fuente
⍨
! Nice emoticon⍣
y⍤
. Espero que lleguemos⍥
y⍢
pronto.ಠ
me haría feliz!C # ,
88868584 bytessalida para
108,174,106
:Como OP permite la función, envié solo la lambda. Puede encontrar una demostración en ejecución en .NetFiddle . No soy golfista, publico por diversión. Además, es mi primera respuesta \ o /. Siéntase libre de comentar cualquier mejora :)
Felicitaciones a Leaky Nun por la fórmula.
advertencia: no funciona para [0,0,0] (gracias Titus)
fuente
1.0-x/j
? ¿Seguramente no puedes hacer1-x/j
?a[3]
, y no parece especificar un tamaño fijo paraa
, por lo que puede hacer{r,g,b}
ya[3]=j*j
(porque, de todos modos,1 * a = a
).a
con elselect()
. Si lo usoa[3]
así, estaré fuera de alcance y tiraré, ¿no?#
frente a la línea. :)Python, 46 bytes
Requiere que la entrada sea flotante en Python 2, bastante seguro de que no lo hace en 3.
fuente
JavaScript (ES6),
5851 bytesAcepta una matriz
[R, G, B]
(agregue 7 bytes para parámetros separados) y devuelve una matriz[C, M, Y, K]
usando el mapeo de color no calibrado.fuente
a
mezclas mezcla su contenido? Esto es raro 3) ¿Has probado [0,0,0]? No hay excepción en ES, pero parece una división por cero.[...a,m=Math.max(...a)]
en su solución de matriz. 5) ¿Puedes seguir jugando al golf usando una matriz como entrada? Considere usara.0
etc. en lugar de.map
.Mathematica
362833 bytesDespués de la liberalización de los formatos de E / S, jugó más:List@@#~ColorConvert~"CMYK"&
Función anónima, que hace lo que se le pide.
La función anterior toma tres argumentos de 0 a 255 (todo lo que esté más allá de este rango se recortará automáticamente a este rango) y devuelve una matriz de valores "CMYK" entre
0.
y1.
Ejemplo (para función antigua):
Como las matrices están permitidas como entrada, 33 bytes:
Por supuesto, los incorporados en las manijas de función
{0, 0, 0}
correctamente y regresa{0, 0, 0, 1}
.fuente
/255
?Bash + ImageMagick, 69 bytes
Ejemplo:
fuente
SmileBASIC,
7372 bytesPodría ser mucho más corto.
fuente
J=MAX(R,G,B)
?Pyth,
2421182421 bytesLa vida es un viaje redondo, de hecho.
Banco de pruebas.
Entrada de muestra:
108,174,106
Salida de muestra:
[0.3793103448275862, 0.0, 0.3908045977011494, 0.3176470588235294]
Entrada de muestra:
0,0,0
Salida de muestra:
[0, 0, 0, 1.0]
Fórmula utilizada:
Fórmula anterior: http://i.stack.imgur.com/ZtPD6.gif
Fórmula anterior: http://i.stack.imgur.com/Nqi9F.gif
fuente
Lithp , 114 bytes
Pruébalo en línea!
max
toma cualquier número de argumentos)No estoy muy seguro de que esto sea correcto. Los primeros dos resultados con los datos de la muestra son correctos, pero el resto no lo es (consulte la sección Pruébelo en línea ).
Utiliza la implementación que se describe muy bien de la siguiente manera:
fuente
PHP 7,
123110105 bytesEntrada como color RGB
100 240 75
Emite valores CMYK como decimales en el
0...1
rango.Ahorré muchos bytes gracias a Titus.
Uso de la muestra:
Prueba en línea
Entrada como color HEX
#123456
, 202 bytes54 bytes para la función para evitar la división por cero, probablemente golfable o extraíble.
Obtiene como entrada el color RGB como HEX
#123456
y genera CMYK como decimal en el0...1
rango.Uso de la muestra:
fuente
separate numeric values
significa que puedes tomar$h=$argv;
y usar en$h[1]
lugar de$h[0]
etc. Me gusta elNAN
truco; pero eso no genera advertencias?strtr
es probablemente más corto questr_replace
yNAN
no necesita qotation (generará avisos, pero no se muestran en la configuración predeterminada).1/0
resultaINF
) ni en PHP 5 (1/0
=>false
).$argv
sugerencia de matriz muy interesante en la línea de comandos! Agregué la versión de PHP. Funciona conNAN
porque cuando lo usastr_replace
convierte implícitamente el número a cadena para que salgaNAN
, de hecho, si marca en este enlace , verá que saleNAN
enstr_replace("INF"
lugar de en lugar destr_replace("NAN"
. No pude hacerlo funcionar usandostrtr
. Agregué el@
para suprimir las advertencias.$n/0
esINF
, pero0/0
esNAN
(también en PHP 7.0). Puede guardar 4 bytes constr_replace(NAN,0,$s)
o 6 bytes constrtr($s,["NAN"=>0)
.strtr()
;PHP, no compitiendo
Estaba demasiado tentado a publicar el mío.
Entrada RGB, 74 bytes
o 68 bytes con una coma final en la salida: eliminar
[$i>3]
.Corre con
php -r '<code>' <red-value> <green-value> <blue-value>
.Entrada HEX, 100 bytes
Corre con
php -nr '<code>' RRGGBB
.Ese enfoque tomaría 75 bytes para la entrada RGB:
reemplace
foreach($a=array_map...as$c)
conforeach($a=$argv as$c)if($i++)
.fuente
C, 155 bytes
Estoy tratando de descubrir cómo es posible el golf más.
Uso:
Salida:
fuente
i>0?i>1?i>2
j>0?
17 para deshacerse del bucle y 6 para dividir laj
definición.F *
). Pero encontré otro byte para jugar golf en C99.j>0?j:1
puede serj+!j
lograr -3 bytes.C
macro es incorrecta: ¿1-x/1
paraj==0
? Creo que debería ser1-(j>0?x/j:1)
.Hoon , 110 bytes
Utilice la biblioteca de punto flotante de precisión única. Crea una nueva función genérica que tome
a
. Establecers
alsub
curry con.1
para más tarde yj
doblara
conmax
.Haz un mapa
a
dividiendo cada elemento conj
, encontrando el mínimo de eso y 1 para normalizar NaN, luego resta 1 cons
. Añadir1-j/255
al final de esa lista.fuente