Usted es un desarrollador web y su jefe ha decidido actualizar el sitio web de la compañía. Ha decidido que menos color es mejor, pero quiere que el sitio se vea igual. Simplemente decide que no tiene idea de qué está hablando, pero lo intentará de todos modos, porque está aburrido. Como la compañía tiene miles de páginas web y cada una tiene su propio CSS, usted decide escribir un script para hacer los cambios necesarios. No se requiere analizar HTML .
Todas las páginas utilizan actualmente una cadena como rgb(255,0,0)
para un color. Teniendo en cuenta los tres valores decimales que representan los valores RGB de un atributo de color CSS (en ese orden), retorno o imprimir la representación de cadena más corta de ese color, de manera que es utilizable para CSS, así: color:<your-result-here>;
.
Aquí hay una tabla completa de palabras clave de color CSS válidas . Son insensibles a mayúsculas y minúsculas.
Ejemplos:
Tenga en cuenta que los colores se pueden definir con 12 o 24 bits. El patrón #ABC
es una versión más corta de #AABBCC
. Chuck Norris es un color .
Su programa solo tomará 3 enteros, no una cadena (con la excepción del "bono" mencionado más adelante).
0, 0, 0 -> #000 (same as #000000, but shorter)
255, 0, 0 -> red
0, 128, 128 -> TEAL
139, 0, 0 -> DarkRed (OR #8B0000)
72, 61, 139 -> #483D8B
255, 255, 254 -> #fffffe
255, 85, 255 -> #f5f (same as #ff55ff, but shorter)
Puntuación / Reglas
- ¡El código más corto gana!
- Las lagunas estándar no están permitidas , con la excepción de las incorporadas.
- -50% bytes (el bono se redondea hacia abajo) si acepta cualquier * selector de color válido y genera el más corto. Entonces
DarkSlateBlue
, salida#483D8B
,#F00
salidasred
, etc.- * Esto solo incluye RGB, códigos hexadecimales y nombres.
- Tenga en cuenta que algunos colores tienen nombres alternativos debido a X11 (como
Fuchsia
yMagenta
, oCyan
yAqua
). Los nombres alternativos se incluyen en la lista vinculada de palabras clave de color CSS de acuerdo con el estándar W3.
- CSS3 está Turing completo . Eso valdría una recompensa.
Editar:
- ¡POR FAVOR CORRE SU CÓDIGO EN LOS CASOS DE PRUEBA!
#000
? Y si se permiten menos de 6 dígitos, ¿por qué no#0
? w3schools.com/cssref/css_colors.asp , el CSSRespuestas:
Perl, 212 - 50% = 106 bytes
Con nuevas líneas agregadas:
Casos de prueba
Salida
Perl, sin bonificación, 144 bytes
Con nuevas líneas agregadas:
Graphics::ColorNames
no es un módulo central, pero existe desde 2001. Es posible que deba instalarlo a través de:Se prefiere la representación hexadecimal si el nombre del color tiene la misma longitud.
Casos de prueba
Salida
fuente
C # 6 527 bytes / 2 bonus = 264
EDITAR: Woot! ¡Finalmente obtuve la respuesta extra con una puntuación más baja que la respuesta básica!
He escrito solo una función. Requiere una
using
declaración (incluida).C # tiene una buena lista de colores conocidos para trabajar, pero insiste en incluir el canal Alpha. Los colores conocidos también incluyen todos los colores del sistema, dos de los cuales tienen nombres de menos de 7 caracteres de longitud, por lo que deben eliminarse.
Aquí está la solución adicional, que admite formatos como:
12, 34, 56
#123
#123456
DarkSlateBlue
Completamente golfizado:
Sangría y nuevas líneas para mayor claridad:
C #, 265 bytes
Aquí está la solución básica.
Sangría y nuevas líneas para mayor claridad:
fuente
Mathematica
207 242500-250 = 250 bytesActualización:
esto funciona con entradas que consisten en triples rgb, nombres de colores o números hexadecimales.
La salida de profundidad de color (12 bits) ahora funciona bien, gracias a un excelente artículo sobre Reducción de profundidad de bits de color . La idea básica es que, si un triple RGB {r, g, b}, donde r, gyb están en el rango de 0-255, (es decir, hex 00-ff) puede representarse sin pérdida como un número en el rango de 0-15 (es decir, 0-f), entonces uno puede usar el número hexadecimal de 3 dígitos en lugar del número de 6 dígitos. Resulta que esto ocurrirá siempre que 17 (es decir, 255/15) divida r, g, y b.
Solo se utilizan las funciones integradas. Mathematica tiene reglas para reemplazar nombres de colores HTML con triples RGB. Por ejemplo, una regla es
"Teal"-> RGBColor[0, 128, 128]
. Cuando tales reglas se invierten, los valores rgb (recalibrados al rango, {0, 255}) se pueden reemplazar con nombres de colores.Ejemplos
Código comentado y sin golf
(* reglas para reemplazar un nombre de color con una muestra de color, p. ej.
RGBColor{255,17,0}
(* reglas para reemplazar una lista de 3 enteros con el nombre del color respectivo, si existe). Y las mismas reglas, invertidas. *)
(* prueba si un color hexadecimal de 24 bits se puede representar como un color de 12 bits sin pérdida.
reduce
puede cambiar la expresión de 24 bits a una expresión de 12 bits. *)(* La lista RGB cambió a un número hexadecimal *)
(* El número hexadecimal cambió a la lista RGB. *)
(* Más conversiones *)
(* elige la expresión CSS más corta válida de un color *)
(* convierte cualquier entrada en una lista RGB y llama
f
*)fuente
FF
en la base 16? Eso debería hacer#FFFFFF
, que es más largo que el blanco. Me#000
parece inusual, pero examinaré las peculiaridades de CSS para estar seguro.#FFF
es lo mismo que#FFFFFF
(todos los bits uno) que es lo mismo quewhite
. Además,#0
no es válido porque no tiene 24 bits ni 12 bitsCoffeeScript,
411 404 388 384382/2 = 191UPD: bastante seguro de que es el resultado final
Espero, está bien usarlo
window.document.*
. Verifique largb
función yeval
llame.Resultados de la prueba
Código comentado
Esto ahorrará algunos bytes.
q
La función colocará el color de entradadocument.body.style.color
y obtendrá el color compilado comorgb(...)
. También almacenará el resultado comohexColor:inputColor
end
. Aviso deeval
uso.rgb(100,100,100)
es una llamada a función de JavaScript válida con tres argumentos numéricos.rgb
La función convertirá argumentos a notación HEX 24/12 única (como#fff
,#f0f0f0
).Dividir la cadena en una matriz de nombres de colores, crear objetos de búsqueda.
Y devuelve HEX si no hay una variante más corta
d
.fuente
Aguja,
238234/2 = 117¡Más solución tipo CSS! Stylus ya tiene un gran soporte para la manipulación del color, por lo que la función deseada es bastante pequeña y no se juega mucho.
f(c){for n in split(' ''navy green teal indigo maroon purple olive gray sienna brown silver peru tan orchid plum violet khaki azure wheat beige salmon linen tomato coral orange pink gold bisque snow ivory red'){lookup(n)==c?c=s(n):c}}
Pruébalo aquí
fuente
Matlab 617
Mucho preprocesamiento y codificación. El conjunto mínimo de nombres de colores que debe tener en cuenta son estos. Lástima que Matlab no haya incorporado nombres de color = /
fuente
r=0;g=16;b=0;
allí, aunque no se cuenta en tu puntuación.Python 3,
857795 bytesTener que especificar manualmente todos los colores aceptados requeridos aumentó el número de bytes en este: /
c(a)
toma un argumento,a
que viene en forma dergb(#,#,#)
. A partir de eso, se eliminan los rgb y los corchetes y la cadena se divide por comas en una matriz.c(x,y,z)
toma 3 ints, los valores r, g y b del color rgb para procesar. Los juntamos en una matriza
. Luego usamos la función incorporada de Pythonhex
que convierte un número de Base 10 en un número de Base 16 en nuestra matriz y crea una cadena hexadecimal (esto se hace en elfor
bucle). Lasif
declaraciones convierten colores similares000000
a000
, y reemplazan los colores conocidos usando un diccionario.Aquí está (gracias a @undergroundmonorail por la información sobre
;
Python):Versión antigua:
Tal vez le agregue la bonificación, aún no lo sé. ¡Definitivamente podría hacerlo con un 50% de bytes de descuento!
-Toastrackenigma
fuente
;
, guardando la sangría. por ejemplo:a=a[4:-1].split(",");b=""
. ningunaif
,else
,for
,while
bloques, etc, con sólo una línea se puede escribir comoif b in k:b=k[b]
.Finalmente, se puede perder mucho de su espacio en blanco en el medio de líneas, por ejemplok = {
->k={
yreturn "color:
->return"color:
re.findall()
(también lo necesitaráimport re
): pastebin.com/rQHqgxXSJavaScript (ES6),
499611Editar Se agregaron los casos de prueba en la pregunta
Nota: Mantuve solo los nombres de color que son más cortos que el equivalente hexadecimal.
Nota 2: esto seguramente se puede jugar más golf ...Menos golf
fuente
{f00:"red";"008000":"green"}
.