En el pasado, todos los 1337 niños usaban faders de texto en las salas de chat. No sé ustedes, pero quiero sentirme genial como ellos. El único problema es que sus antiguos scripts y aplicaciones estaban fuertemente acoplados al software para el que fueron creados, por lo que no puedo utilizar esta increíble funcionalidad donde quiera. También quiero que la solución sea fácilmente portátil, por lo que tendrá que hacer que el código sea lo más pequeño posible para que quepa en mi disquete (prefiero solo llevar un disquete, pero si su código fuente es demasiado grande) Puedo llevar más de uno : P ).
Entrada
- Una lista de colores (rgb, hexadecimal, nombres, etc.)
- Texto a formatear
Su programa debe esperar que la lista de colores contenga al menos 2 colores.
El texto a formatear puede tener cualquier longitud mayor que cero y los caracteres se limitarán a ascii imprimibles. (Sugerencia: las entradas de texto más largas pueden requerir que reutilice colores intermedios para caracteres consecutivos)
Salida
El texto de salida no debe diferir del texto de entrada de ninguna otra manera que no sea la fuente y / o el marcado / estilo (Nota: si su salida contiene marcado html, entonces necesitará codificar html en la entrada). Puede generar texto con marcado / estilo (etiquetas de estilo html, colores de consola, etc.) o una imagen del texto desvanecido. Todos los hexágonos de color deben estar presentes en la salida a menos que la entrada no contenga suficientes caracteres para cumplir este requisito. Si este es el caso, consulte las reglas de prioridad para determinar qué hexágonos de color deben estar presentes en su salida. El orden o estos colores en su salida aún deben ser orden de entrada.
Reglas de prioridad de color
- En el caso de que la entrada sea un carácter, se utilizará el primer color.
- En el caso de que solo haya dos caracteres, se utilizará el primer y el último color.
- En el caso de que haya más de tres colores y más colores que caracteres, se deben priorizar el primer y el último color, luego el resto de los colores en el orden ingresado.
- En el caso de que haya más caracteres que colores, los caracteres deberían desvanecerse de un color a otro utilizando colores intermedios.
Ejemplos (Reglas de prioridad 1-3 respectivamente):
# Colores | Color 0 | ... | Color n | Texto
3 ff0000 0000ff ffff00 M
-> -> ->
3 ff0000 0000ff ffff00 hi
4 ff0000 0000ff ffff00 0fff00 sup
Para que quede claro, el color del texto debe desvanecerse de un hexágono de color al siguiente. El desvanecimiento no tiene que ser perfectamente uniforme, pero no debería ser un cambio de color abrupto a menos que no haya suficientes caracteres para desvanecerse bien. En general, este desvanecimiento se logra eligiendo colores intermedios para cada uno de los caracteres incrementando / decrementando los valores rgb en un intervalo determinado por el número de caracteres con los que tiene que trabajar y la diferencia entre los colores. Por ejemplo, si necesitáramos un solo color entre (# ff0000) y (# 000000), podríamos elegir ya que se encuentra justo en el medio. La salida óptima se verá bastante bonita.
Ejemplo (regla de prioridad 4):
3 ff0000 ff7f00 f0ff00 To be or not to be, that is the question...
->
-O BIEN-
<span style="color:#ff0000;">T</span><span style="color:#ff0600;">o</span><span style="color:#ff0c00;"> </span><span style="color:#ff1200;">b</span><span style="color:#ff1800;">e</span><span style="color:#ff1e00;"> </span><span style="color:#ff2400;">o</span><span style="color:#ff2a00;">r</span><span style="color:#ff3000;"> </span><span style="color:#ff3600;">n</span><span style="color:#ff3c00;">o</span><span style="color:#ff4300;">t</span><span style="color:#ff4900;"> </span><span style="color:#ff4f00;">t</span><span style="color:#ff5500;">o</span><span style="color:#ff5b00;"> </span><span style="color:#ff6100;">b</span><span style="color:#ff6700;">e</span><span style="color:#ff6d00;">,</span><span style="color:#ff7300;"> </span><span style="color:#ff7900;">t</span><span style="color:#ff7f00;">h</span><span style="color:#fe8500;">a</span><span style="color:#fe8b00;">t</span><span style="color:#fd9100;"> </span><span style="color:#fc9700;">i</span><span style="color:#fb9d00;">s</span><span style="color:#fba400;"> </span><span style="color:#faaa00;">t</span><span style="color:#f9b000;">h</span><span style="color:#f9b600;">e</span><span style="color:#f8bc00;"> </span><span style="color:#f7c200;">q</span><span style="color:#f6c800;">u</span><span style="color:#f6ce00;">e</span><span style="color:#f5d400;">s</span><span style="color:#f4da00;">t</span><span style="color:#f4e100;">i</span><span style="color:#f3e700;">o</span><span style="color:#f2ed00;">n</span><span style="color:#f1f300;">.</span><span style="color:#f1f900;">.</span><span style="color:#f0ff00;">.</span>
En su respuesta, especifique cómo se debe mostrar su salida (como html, en una consola, como una imagen, etc.).
* Todos los fondos negros son solo para enfatizar el color y no son obligatorios
Puntuación
Este es el código de golf , por lo que gana la respuesta más corta (en bytes).
Si logras agregar desvanecimiento a los personajes individuales, siempre pensaré que eres genial (pero no hay bonificación para anotar, ya que esto no será justo para algunos langs)
#000000
y#ff0000
no es#800000
.000000
yff0000
debería serb40000
(255*sqrt((0+1)/2)
)Respuestas:
JavaScript (ES6), 290 bytes
fuente
Pyth, 126 bytes
Promedio obligatorio de raíz cuadrática media en lugar de media aritmética directa.
Pruébalo en línea!
Salida de muestra:
fuente
Java,
702662 caracteresDos funciones de golf:
Como nadie puede leer esto: aquí hay ambas funciones en una versión sin golf en una clase:
Aquí tiene un límite superior para su propio código. El uso es mediante una llamada
colorize
(o c en la versión de golf) y pasa el texto y una serie de códigos de colores hexadecimales. La función devolverá una Cadena con etiquetas HTML como lo hizo el OP, por lo que necesita alguna forma de representar el HTML.El algoritmo es más fácil como parece la pregunta. El primer personaje siempre obtiene el primer color, el último siempre el último.
Si tenemos más colores que caracteres en el texto, simplemente iteramos sobre el texto y los colores y los aplicamos.La parte divertida es la que se desvanece: comencé descubriendo a qué distancia están los colores en el texto. Básicamente calculo la diferencia de rojo, verde y azul entre dos colores dados y luego agrego una parte de esta diferencia al primer color, dependiendo de dónde esté el carácter entre los colores. Si deja el intervalo de dos colores, comenzamos de nuevo con los siguientes dos colores. Esto se repite para todos menos el último carácter, que sabemos que siempre es el último color. Esto da un desvanecimiento muy hermoso.¡Esa pregunta fue muy divertida! ¡Gracias!
Actualizaciones
Ahora no manejo todos los casos especialmente. En cambio, recorto los colores si hay dos y aplico la función de fundido a cada cadena. Si hubiera más colores que texto, los colores se recortarán y la función de desvanecimiento funcionará exactamente como un mapeo simple.
fuente