El reto
Teniendo en cuenta las dos cadenas hexadecimales en mayúsculas (ambos 6 caracteres de largo, XXXXXX y YYYYYY) que representa los valores RGB (que van desde 000000
a FFFFFF
inclusive), y un no-cero positivo número entero N, muestran una transición lineal de los N + 2 colores generados a partir de XXXXXX a YYYYYY eso daría como resultado un gradiente de color.
Ejemplo
Entrada
FF3762
F08800
9
Salida
Tenga en cuenta que en nuestro ejemplo, solicité 9 pasos intermedios entre los dos colores, por lo tanto, se mostrarán 11 líneas desde el color inicial hasta el color final.
FF3762
FD3F58
FC474E
FA4F44
F9573A
F75F31
F66727
F46F1D
F37713
F17F09
F08800
Advertencias
Si bien he seguido un proceso lineal simple de derivar los valores enteros para los colores intermedios antes de convertirlos nuevamente en hexadecimales, sus métodos pueden variar. Considere las diversas formas en que uno podría redondear sus números hacia arriba / abajo en consecuencia.
Pruebas
Para hacer esto interesante, proporcioné un fragmento para permitir la prueba de su código, incluido un botón para proporcionarle dos colores aleatorios para probar su código. ¡Mostrar sus resultados es opcional, pero se recomienda!
c1=()=>('00000'+(Math.random()*(1<<24)|0).toString(16)).slice(-6);
$("#col").click(function(){
alert("Your two colors are: "+c1()+" and "+c1()+".");
});
$("#colors").blur(function(){
$("#test").empty();
var colArr = $("#colors").val().split("\n");
for(c in colArr){
$("#test").append('<div class="tester" style="background-color:#'+colArr[c]+';">'+colArr[c]+'</div>')
}
});
.tester{height: 20px;
width: 60px;padding: 4px;border: 1px solid black;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="col">Your two colors</button><br />
<textarea id="colors"></textarea>
<div id="test">
</div>
1) Puede acceder a dos colores aleatorios para su prueba haciendo clic en el botón "Sus dos colores". 2) El número de pasos intermedios será el mismo que el número de caracteres en su nombre de usuario PPCG incluyendo espacios, en el caso de "WallyWest" sería 9 (según mi ejemplo anterior). 3) Ejecute su código con los dos colores y el número y una vez que tenga su lista generada, tiene la opción de pegar su salida en el área de texto y alejarla para obtener el gradiente de color generado.
Mi ejemplo se muestra aquí:
Debo admitir que se ve increíble.
Tenga en cuenta: Como mencioné, mostrar sus pruebas de su salida usando el fragmento es opcional, ¡pero se recomienda! :)
Salida
La salida de la lista debe estar en forma de N + 2 conjuntos de números hexadecimales de 6 dígitos separados por avances de línea (\ n) como se muestra en mi ejemplo anterior. La salida puede ser en forma de líneas separadas, lista separada por espacios / comas, una matriz o lo que sea más adecuado para su idioma ... (Gracias @nimi por los encabezados) Recuerde, si planea probar su código con el fragmento, sin embargo, separe cada "color" depende de usted.
Reglas
Este es el código de golf, por lo que la solución más corta en bytes se coronará como el ganador. No hay escapatorias , naturalmente. La entrada debe aceptar las dos cadenas y un número (que como dije será equivalente al número de letras en su nombre de usuario en PPCG, por lo tanto, su salida resultante siempre tendrá un mínimo de tres líneas de largo.
Respuestas:
MATL , 31 bytes
Esto usa interpolación lineal con redondeo hacia abajo. El formato de entrada es
Pruébalo en línea!
Salida gráfica, 31 bytes.
Este es el resultado para entradas
Pruébalo en MATL Online ! El intérprete es actualmente experimental. Si no obtiene ninguna salida, actualice la página y presione "Ejecutar" nuevamente
fuente
JavaScript (ES6), 130 bytes
fuente
Dyalog APL , 44 bytes
Solicita N , luego B eginning-color, luego E nding-color. Necesidades, lo
⎕IO←0
cual es predeterminado en muchos sistemas.h[
...]
indice en h (que tiene un valor cuando terminamos de evaluar el contenido del paréntesis)N←⎕
solicitud de N numérico (4)1+
agregue uno a N (5)(
...)÷
usa eso para dividir el resultado de ...⍞⍞
solicitud de dos cadenas de caracteres ["7E0E7E", "FF3762"](
...)∘⍳¨
encuentra los índices de los caracteres de cada cadena en ...⎕D,⎕A
D igits seguido por A lphabeth←
asignado a hahora tenemos "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
E B←
asignar los índices a E y B [[7,14,0,14,7,14], [15,15,3,7,6,2]]-/
restar y encerrar B de E [[-8, -1, -3,7,1,12]]el resultado hasta ahora es [[-1.6, -0.2, -0.6,1.4,0.2,2.4]]
(
...)×
multiplique esto por ...2+N
dos más N (6)⍳
primeros enteros [0,1,2,3,4,5]esto nos da [[0,0,0,0,0,0], [- 1.6, -0.2, -0.6,1.4,0.2,2.4], [- 3.2, -0.4, -1.2,2.8,0.4,4.8 ], ...]
B∘+¨
agregue B a cada [[15,15,3,7,6,2], [13.4,14.8,2.4,8.4,6.2,4.4], [11.8,14.6,1.8,9.8,6.4,6.8], ... ]⌊
redondear hacia abajo [[15,15,3,7,6,2], [13,14,2,8,6,4], [11,14,1,9,6,6], ...]↑
hacer una lista de listas en la tablaaquí indexamos en h , dando
que es lo mismo que
e imprime como
TryAPL en línea!
fuente
Pyth - 35 bytes
Horriblemente golf, simplemente se rindió.
Pruébelo en línea aquí .
Ejemplo:
fuente
7cb472 93fb8a 8
y recibido solo 10 líneas de salida al probar su código?93fb8a
... ¿Tu código generó dos líneas del mismo valor?PowerShell v2 +,
176159150 bytesToma la entrada como dos cadenas y un número, luego convierte la cadena de inicio en una matriz de cadenas divididas en cada dos caracteres, almacena eso en
$x
. Luego salimos$a
como nuestra sección de inicio, y hacemos un bucle de++$n
a1
(para garantizar una colocación de cerca adecuada).En cada iteración, se establece
$j
el número de ayudante en el número actual (que se usa más adelante para garantizar que tengamos el número correcto de pasos entre donde estamos actualmente en nuestro destino) y calcula el siguiente paso en función de un bucle$x
.Cada bucle interno es solo una tarea. Estamos configurando
$x
en el lugar apropiado igual a una nueva cadena"{0:x2}"
usando el-f
operador ormat. Elx2
que aquí se especifica una salida hexadecimal de dos dígitos, y la entrada es la parte derecha del-f
operador. PowerShell tiene un operador hexadecimal a decimal nativo0x
, por lo que esta larga expresión anidada por parentesco está utilizando ese operador para convertir el hexadecimal actual en números, restando para encontrar la diferencia que falta (hecho al dividir dinámicamente$b
aquí como lo hicimos nosotros$a
, y usando el módulo para seleccionar el elemento correcto), dividiendo por los$j
pasos restantes, convirtiendo en un[int]
(PowerShell realiza el redondeo del banco por defecto) y resta ese conteo de pasos del hex actual para obtener lo que nuestro próximo hex debe ser.El resultado de ese cálculo se almacena de nuevo en
$x
tres elementos hexadecimales. Eso se encapsula en parens para crear una copia en la tubería y se-join
edita en una sola cadena. Todas esas cadenas resultantes se dejan en la tubería, y la salida a través de lo implícitoWrite-Output
ocurre en la ejecución del programa.Ejemplo
Me dieron 0ba7c5 y 6c0e50 para mis dos colores, y TimmyD tiene 6 caracteres.
fuente
Python 2, 189 bytes
fuente
[Groovy] Actualización Final (199 Bytes) - Según solicitud
No golf
Golf
Pruebe la final aquí: https://groovyconsole.appspot.com/script/5130696796405760
ANTIGUAS VERSIONES A CONTINUACIÓN, DECLINADAS POR OP
Groovy (123 bytes)
Golf
No golf
Entradas
Ejemplo de salida
resultados en
Pruébelo usted mismo: https://groovyconsole.appspot.com/script/5184465357766656
Con conversiones hexagonales incluidas
Supongo que también estoy haciendo trampa ... Aquí está el script con el uso de hexadecimal:
Nuevo código con conversiones hexadecimales:
188 caracteres cuando se juega golf:
Salida para 000000 a FFFFFF y 16 (longitud de nombre de usuario)
fuente
{s-> s.split("(?<=\\G.{2})").collect{Integer.parseInt(it,16)}}('FFFFFF')
Resultados en [255,255,255] Puedo agregar 62 bytes a mi código usando esa conversión si realmente quieres que lo haga.R, 68 bytes
Hay una función incorporada que interpola dos colores:
Entrada:
Salida: un vector con valores
La especificación de color en R requiere un símbolo hash.
Tracemos algo, como una función:
fuente
FF3762 F08800 15
?C,
175169168 bytesSin golf:
¡Gracias a @ h-walters por reducir 5 bytes!
fuente
puts
sintaxis nuevamente?printf()
, pero no formatea nada, solo imprime la cadena dada tal como está y agrega una nueva línea.puts("")
a la tercera parte del primer bucle for (;
después de convertirse en,
antes) ... +0 bytes. Sin embargo, esto le permite eliminar las llaves después del segundo bucle ... -2 bytes. Puede guardar otro 1 byte eliminando 3j<3
y reemplazándolo con suprintf
declaración (esto es astuto ... printf solo devolverá 2, pero aún tiene que evaluar la tercera vez).0
enj=0
. Una vez que todo esté en su lugar, su programa debería ser 5 bytes más corto y al menos un 50% más extraño.sh + ImageMagick, 81 bytes
uso:
("-depth 8" no es necesario si su IM está compilado con 8bpp como predeterminado)
fuente