Vous êtes développeur Web et votre patron a décidé de mettre à jour le site Web de l'entreprise. Il a décidé que moins de couleur est meilleure, mais il souhaite que le site soit identique. Vous décidez à juste titre qu'il n'a aucune idée de quoi il parle, mais vous allez quand même essayer, parce que vous vous ennuyez. Étant donné que la société possède des milliers de pages Web et que chacune possède son propre CSS, vous décidez d'écrire un script pour effectuer les modifications nécessaires. L'analyse HTML n'est pas requise.
Toutes les pages utilisent actuellement une chaîne comme rgb(255,0,0)
pour une couleur. Compte tenu des trois valeurs décimales représentant les valeurs RVB d'un attribut de couleur CSS (dans cet ordre), retour ou imprimer la plus courte représentation de chaîne de cette couleur, de telle sorte qu'il est utilisable pour CSS comme ceci: color:<your-result-here>;
.
Voici un tableau complet des mots-clés de couleur CSS valides . Ils sont insensibles à la casse.
Exemples:
Notez que les couleurs peuvent être définies avec 12 ou 24 bits. Le modèle #ABC
est une version plus courte de #AABBCC
. Chuck Norris est une couleur .
Votre programme n'accepte que 3 entiers, pas une chaîne (à l'exception du "bonus" mentionné plus loin).
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)
Scoring / Règles
- Le code le plus court gagne!
- Les failles standard sont interdites , à l'exception des fonctions intégrées.
- -50% octets (le bonus est arrondi vers le bas) si vous acceptez n'importe quel * sélecteur de couleur valide et produisez le plus court. Tout comme
DarkSlateBlue
les sorties#483D8B
, les#F00
sortiesred
, etc.- * Cela inclut uniquement les RVB, les codes hexadécimaux et les noms.
- Notez que certaines couleurs ont des noms alternatifs en raison de X11 (comme
Fuchsia
etMagenta
, ouCyan
etAqua
). Les autres noms sont inclus dans la liste chaînée des mots-clés de couleur CSS selon la norme W3.
- CSS3 est Turing complet . Ça vaudrait une prime.
Modifier:
- VEUILLEZ EXÉCUTER VOTRE CODE SUR LES CAS D'ESSAI!
#000
? Et si moins de 6 chiffres sont autorisés, pourquoi pas#0
? w3schools.com/cssref/css_colors.asp,, le CSSRéponses:
Perl, 212 - 50% = 106 octets
Avec des nouvelles lignes ajoutées:
Cas de test
Sortie
Perl, pas de bonus, 144 octets
Avec des nouvelles lignes ajoutées:
Graphics::ColorNames
n'est pas un module de base, mais il existe depuis 2001. Vous devrez peut-être l'installer via:La représentation hexadécimale est préférée si le nom de la couleur a la même longueur.
Cas de test
Sortie
la source
C # 6 527 octets / 2 bonus = 264
EDIT: Woot! J'ai finalement obtenu la réponse bonus avec un score inférieur à la réponse de base!
J'ai écrit juste une fonction. Il nécessite une
using
déclaration (incluse.)C # a une belle liste de couleurs connues avec lesquelles travailler, mais il insiste pour inclure le canal Alpha. Les couleurs connues incluent également toutes les couleurs du système, dont deux ont des noms de moins de 7 caractères, il fallait donc les supprimer.
Voici la solution bonus, prenant en charge des formats tels que:
12, 34, 56
#123
#123456
DarkSlateBlue
Complètement golfé:
Indentation et nouvelles lignes pour plus de clarté:
C #, 265 octets
Voici la solution de base.
Indentation et nouvelles lignes pour plus de clarté:
la source
Mathematica
207 242500-250 = 250 octetsMise à jour:
cela fonctionne avec des entrées composées de triplets RVB, de noms de couleurs ou de nombres hexadécimaux.
(12 bits) La sortie de profondeur de couleur fonctionne désormais correctement, grâce à un excellent article sur la réduction de profondeur de couleur . L'idée de base est que, si un triple RVB {r, g, b}, où r, g et b sont compris entre 0 et 255, (c'est-à-dire hex 00-ff) peut être représenté sans perte comme un nombre dans la plage de 0 à 15 (c.-à-d. 0-f), alors on peut utiliser le nombre hexadécimal à 3 chiffres au lieu du nombre à 6 chiffres. Il s'avère que cela se produit chaque fois que 17 (c'est-à-dire 255/15) divise r, g et b.
Seules les fonctions intégrées sont utilisées. Mathematica a des règles pour remplacer les noms de couleurs HTML par des triplets RVB. Par exemple, une règle est
"Teal"-> RGBColor[0, 128, 128]
. Lorsque ces règles sont inversées, les valeurs RVB (recalibrées à la plage, {0, 255}) peuvent être remplacées par des noms de couleur.Exemples
Code commenté, non golfé
(* règles pour remplacer un nom de couleur par un échantillon de couleur, par exemple
RGBColor{255,17,0}
(* règles pour remplacer une liste de 3 entiers par le nom de couleur respectif, s'il en existe un. Et les mêmes règles, inversées. *)
(* teste si une couleur hexadécimale 24 bits peut être représentée comme une couleur 12 bits sans perte.
reduce
peut changer l'expression 24 bits en une expression 12 bits. *)(* La liste RVB a été remplacée par un numéro Hex *)
(* Le numéro hexadécimal est devenu la liste RVB. *)
(* Plus de conversions *)
(* choisit l'expression CSS valide la plus courte d'une couleur *)
(* convertit toute entrée en une liste RVB et appelle
f
*)la source
FF
en base 16? Cela devrait donc faire#FFFFFF
, ce qui est plus long que le blanc. Je trouve#000
inhabituel mais examinera les bizarreries de CSS pour en être sûr.#FFF
est le même que#FFFFFF
(tous les bits un) qui est le même quewhite
. En outre,#0
n'est pas valide car ce n'est ni 24 bits ni 12 bitsCoffeeScript,
411 404 388 384382/2 = 191UPD: Je suis presque sûr que c'est le résultat final
J'espère que c'est correct à utiliser
window.document.*
. Vérifiez largb
fonction eteval
appelez.Résultats de test
Code commenté
Cela permettra d'économiser quelques octets.
q
La fonction placera la couleur d'entréedocument.body.style.color
et obtiendra la couleur compilée commergb(...)
. Il enregistrera également le résultat commehexColor:inputColor
dansd
. Remarquez l'eval
utilisation.rgb(100,100,100)
est un appel de fonction JavaScript valide avec trois arguments numériques.rgb
La fonction convertira les arguments en une seule notation HEX 24/12 (comme#fff
,#f0f0f0
).Fractionner la chaîne en un tableau de noms de couleurs, créer un objet de recherche.
Et renvoyez HEX s'il n'y a pas de variante plus courte
d
.la source
Stylet,
238234/2 = 117Plus de solution de type CSS! Le stylet a déjà un grand support pour la manipulation des couleurs, donc la fonction souhaitée est assez petite et peu jouée au golf.
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}}
Testez-le ici
la source
Matlab 617
Beaucoup de prétraitement et de codage en dur. L'ensemble minimal de noms de couleurs que vous devez prendre en compte sont les suivants. Dommage que Matlab n'ait pas de noms de couleurs intégrés = /
la source
r=0;g=16;b=0;
là-dedans, bien qu'il ne soit pas pris en compte dans votre score.Python 3,
857795 octetsLe fait d'avoir à spécifier manuellement toutes les couleurs acceptées requises a augmenté le nombre d'octets sur celui-ci: /
c(a)
prend un argument,a
qui se présente sous la forme dergb(#,#,#)
. De cela, le rgb et les crochets sont supprimés et la chaîne est ensuite divisée par des virgules en un tableau.c(x,y,z)
prend 3 pouces, les valeurs r, g et b de la couleur rgb à traiter. Nous les mettons ensemble dans un tableaua
. Nous utilisons ensuite la fonction intégrée de Pythonhex
qui convertit un nombre Base 10 en un nombre Base 16 sur notre tableau et créons une chaîne hexadécimale (cela se fait dans lafor
boucle). Lesif
instructions convertissent les couleurs comme000000
en000
et remplacent les couleurs connues à l'aide d'un dictionnaire.Le voici (merci à @undergroundmonorail pour avoir des conseils sur
;
Python):Ancienne version:
J'y ajouterai peut-être le bonus, je ne sais pas encore. Il pourrait certainement le faire avec 50% d'octets!
-Toastrackenigma
la source
;
, en sauvegardant l'indentation. par exemple:a=a[4:-1].split(",");b=""
. toutif
,else
,for
,while
, etc bloc avec une seule ligne peut être écrite commeif b in k:b=k[b]
.Enfin, vous pouvez perdre beaucoup de votre espaces au milieu des lignes, par exemplek = {
->k={
etreturn "color:
->return"color:
re.findall()
(il en aura également besoinimport re
): pastebin.com/rQHqgxXSJavaScript (ES6), 499
611Modifier Ajout des cas de test dans la question
Remarque: J'ai conservé uniquement les noms de couleurs plus courts que l'équivalent hexadécimal.
Note 2: cela peut sûrement être joué plus ...Moins golfé
la source
{f00:"red";"008000":"green"}
.