Les triplets hexagonaux tels que #ffffff
(blanc) ou #3764ef
(bleuâtre) sont souvent utilisés pour désigner les couleurs RVB. Ils consistent en #
suivis de six chiffres hexadécimaux (0-f), ou parfois de trois chiffres où la couleur réelle est obtenue en doublant chaque chiffre. Par exemple, #fff
est #ffffff
et #1a8
est #11aa88
.
Malheureusement, ce raccourci à trois chiffres était le plus risqué qu'Internet pouvait offrir jusqu'à présent .
Ecrivez un programme ou une fonction qui prend une chaîne de 1 à 7 caractères:
- Le premier caractère sera toujours
#
. - Les autres personnages seront toujours des chiffres hexadécimaux:
0123456789abcdef
.
L'entrée est une forme abrégée d'un triplet hexadécimal (ou la forme complète si 7 caractères sont fournis). Vous devez générer un triplet hexagonal complet qui élargit le raccourci d’entrée en fonction de ces modèles:
Input -> Output
# -> #000000 (black)
#U -> #UUUUUU
#UV -> #UVUVUV
#UVW -> #UUVVWW (usual 3-digit shorthand)
#UVWX -> #UXVXWX
#UVWXY -> #UVWXYY
#UVWXYZ -> #UVWXYZ (not shorthand)
Chacun de U
, V
, W
, X
, Y
et Z
peut - être un chiffre hexadécimal. La sortie comporte toujours 7 caractères.
Par exemple:
Input -> Output
# -> #000000
#0 -> #000000
#4 -> #444444
#f -> #ffffff
#a1 -> #a1a1a1
#0f -> #0f0f0f
#99 -> #999999
#1a8 -> #11aa88
#223 -> #222233
#fff -> #ffffff
#1230 -> #102030
#d767 -> #d77767
#bbb5 -> #b5b5b5
#aabbc -> #aabbcc
#00000 -> #000000
#3764e -> #3764ee
#3764ef -> #3764ef
#123456 -> #123456
#f8f8f8 -> #f8f8f8
Remarques
L'entrée commencera toujours par
#
et la sortie aussi.Vous pouvez supposer que toutes les lettres entrées sont en minuscule (
abcdef
) ou en majuscule (ABCDEF
) selon vos préférences.Les lettres dans la sortie peuvent être dans les deux cas comme vous préférez. Vous pouvez même mélanger des cas.
L'alpha / transparence n'est pas traité ici (bien qu'il existe des versions hexagonales des couleurs RGBA).
Le code le plus court en octets gagne.
la source
#UVWXY -> #UVWXYY
entrée car elle permet une représentation à valeur unique pour le canal bleu, mais il n'y a pas d'expression similaire pour le rouge et le vert (par exemple, si je voulais,#889071
je ne peux pas abréger, mais#907188
peut être ... comme#90718
) les autres. tout fonctionne très bien.#UVWX -> #UXVXWX
. C'est un comportement tellement incohérent et arbitraire qu'il est difficile de croire qu'aucun navigateur ne l' implémente actuellement.#RGBA
et#RRGGBBAA
, donc # 1234 doit être lu commergba(17, 34, 51, 0.25)
Réponses:
JavaScript,
868277 octetsjuste découvrir que supprimer récursive enregistrer 4 octets ...
idée de @Arnauld économiser 4 octets, +1 octets supplémentaires
la source
([s,a=0,b=a,c,d,e,f]=x)=>f?x:e?x+e:d?s+a+d+b+d+c+d:c?s+a+a+b+b+c+c:s+a+a+a+b+b+b
pour 80 octetsReferenceError: x is not defined
Gelée , 24 octets
Un programme complet (les lignes vides sont en réalité des lignes vides).
Essayez-le en ligne! ou voir une suite de tests *
Comment?
* le programme de la suite de tests a dû être modifié en inversant l’ordre de ce qui était le
Main link
etLink 7
, tandis que le pied de page devenait leMain Link
. En outre, il a#
fallu le remplacer manuellement, car le programme en tant que tel l’est.la source
CJam,
454442403635 octetsExécute divers extraits de code en fonction de la longueur de l'entrée.
la source
<s></s>
PHP 7.1, 88 octets
PHP 5,
9088 octetsla source
_21422112233122444113355123456[6*$i+++strlen($argn|aa)-8]
?$argn
dans21422112233122444113355123456
et sélectionne la bonne base sur strlen.aa
compresse la chaîne à au moins 2 caractères. Sur l’entrée,#
il n’ya pas de sortie,$argn[1]
donc?:0
a0
. Cela fonctionne aussi pour0
dans la chaîne. Une des meilleures réponses que j'ai vues! Malheureusement, cela ne paie pas trop (la réponse de Jörg a été réduite à 95).PHP,
95938987Fondamentalement, la réponse de @ JörgHülsermann a beaucoup diminué, alors j’ai décidé de l’afficher séparément. Je considérerais cette réponse comme un effort collectif de Jörg et moi.
la source
Python 3,
166162160152 octetsJe construis une liste de tuples de remplacement de regex pour chaque motif, puis extrait le tuple à l'index
len(x)-1
, le divisant enfin (*
) dans les arguments dere.sub
:sauvé 8 octets en mémorisant
r'\1'
(merci, Gábor Fekete)la source
r'\1'
comme paramètre nommé sauver quelques octets?o=r'\1'
mais utilisezb
dans votre code: DJava 10,
228227224182 octetsEssayez-le en ligne.
Explication:
la source
APL (Dyalog) , 43 octets
Nécessite
⎕IO←0
ce qui est la valeur par défaut sur de nombreux systèmes.Essayez-le en ligne!
1↓⍞
déposer le premier caractère (le hachage){
appliquer la fonction anonyme suivante(≢⍵)⊃
utilisez la longueur de l'argument pour choisir l'une des sept valeurs suivantes:'0'
a zéro⍵
l'argument⍵
l'argument2/⍵
two (2
) de chaque (/
) de l'argument (⍵
)∊⍵,¨⊃⌽⍵
l'∊
argument flattened ( ) (⍵
) suivi de chaque (,¨
) par le premier (⊃
) de l'⌽
argument reversé (⍵
)⍵,⌽⍵
l'argument (⍵
) prepended (,
) à l'⌽
argument reversé (⍵
)⍵
l'argument6⍴
répéter les éléments à partir de ce point jusqu'à atteindre une longueur de six}
fin de la fonction anonyme'#',
ajouter un hachage à celala source
Python 2,
167165 octets-2 octets grâce à Trelzevir
Il crée une liste de chaînes et choisit en fonction de la longueur de la chaîne.
la source
z=zip
.Sed, 119 (118 octets +
-E
)Substitution de texte simple.
la source
PHP, 87 octets
utiliser des numéros de base 35
Essayez-le en ligne!
ou utilisez des numéros de base 33
Essayez-le en ligne!
PHP, 89 octets
Essayez-le en ligne!
intval(["8kn",gd8,"9ft",wqq,i3j,i3k][strlen($argn|aa)-2],36)
+ 3 octets utilisant une base de 36PHP, 102 octets
Essayez-le en ligne!
PHP, 180 octets
Essayez-le en ligne!
la source
Rétine , 90 octets
Essayez-le en ligne! Inclut les cas de test.
Explication: La première traduction utilise deux chiffres, la deuxième trois, la troisième quatre et la quatrième zéro. Cependant, ni les deuxième et quatrième traductions ne répètent le dernier chiffre, comme cela est fait à la fin pour couvrir tous les cas restants.
la source
Haskell ,
13012712211810995 octets (par l' utilisateur1472751 )Essayez-le en ligne!
la source
g
.(x:r)!(y:t)=x:y:r!t;e!_=e
est plus court quea!b=id=<<[[x,y]|(x,y)<-zip a b]
.#
possibleg(a:t)|l<-last t=a:[ ...
Powershell,
113111 octetsScript de test expliqué:
Sortie:
la source
JavaScript (ES6), 96 octets
Afficher l'extrait de code
la source
Perl, 61 octets
Courez avec
perl -nE
. Suppose que l’entrée est conforme à la description (donne des résultats incorrects si l’entrée a une nouvelle ligne).La chaîne "g + g + ÜRÉ / Â ¥ [[" "code les 7 nombres de 16 bits
11111,11111,21212,12233,42434,23455,23456
sous forme de 14 caractères latins1. Voici un cliché hexagonal pour plus de clarté:la source
perl -nE 'say+(/./g,0)[0,1,(unpack+S7,pack "H*","672b672bdc52c92fc2a59f5ba05b")[y/#//c]=~/./g]'
. Mais lorsque je tape "#a", je reçois "# a0a0a0", ce qui me semble faux. Ce devrait être "#aaaaaa". (Peut-être que j'ai commis une erreur lors de l'appel du pack ().)perl -nE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'
. Cela semble toujours être faux, car "#a" donne toujours la réponse incorrecte de "# a0a0a0" (au lieu de "#aaaaaa").-l
commutateur (qui est « ELL » , comme dans la « lettre L ») avec le-nE
commutateur, comme celui - ci:perl -lnE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'
. Maintenant cela fonctionne correctement.perl -nE
" par "Exécuter avecperl -lnE
". (La-l
partie du commutateur supprime la nouvelle ligne pour vous.)-F
sur la ligne de commande vous permet de changer cela poursay+(@F,0)[0,1,(unpack+S7,"g+g+ÜRÉ/Â¥[ [")[$#F]=~/./g]
économiser 5 octets dans le code.Lot Windows,
389 372 362 349231 octetsJ'ai totalement copié le code @Neil ...
la source
%s:~3,1%%s:~4,1%
peut être remplacé par%s:~3,2%
. Aussi, je ne suis pas sûr que cela fonctionne pour une entrée de#
.call:c %s:~1,1% %s:~2,1% %s:~3,1% %s:~4,1% %s:~5,1% %s:~6,1%
etfor %%r in (#%1%2%3%4%5%6.%6 #%1%2%3%4%5%5.%5 #%1%4%2%4%3%4.%4 %s%%1%2%3.%3 %s%%1%2%1%2.%2 %s%%1%1%1%1%1.%1 #000000.0)do if not %%~xr.==. echo %%~nr&exit/b
.Pyth, 35 octets
Essayez-le en ligne ici ou vérifiez tous les cas de test ici .
la source
Python 2 , 99 octets
Essayez-le en ligne!
la source
Python 2 - 179 octets
Quelqu'un peut-il m'aider à économiser des octets? Si toutes les déclarations semblent pouvoir être réduites en quelque chose de plus court, je ne sais pas quoi.
la source
list[len(list)-x]
est identique àlist[-x]
.if t==1:
enif t<2:
(etif t==2:
enif t<3:
, etc.). C'est moins lisible, certes, mais plus codable au golf!TXR Lisp: 171 octets
Dentelé:
C’est une fonction anonyme: la
do
macro génère un(lambda ...)
formulaire.C'est un style de codage idiomatique, adapté à la production; le seul golf est en écrasant les espaces blancs:
la source
Braingolf , 95 octets
Essayez-le en ligne!
Ceci est effectivement l'équivalent de Braingolf d'un switch-case sur le nombre de caractères après
#
l'entrée.Explication
Des choses qui fonctionnent toujours:
Si
#X
:Si
#XX
Celui-ci peut être golfable un peu, je pourrais le regarder quand je rentre à la maison
Si
#XXX
Vous avez eu l'idée
la source
Ruby , 127 octets
Essayez-le en ligne!
la source
Ruby , 118 octets
Essayez-le en ligne!
la source
05AB1E , 24 octets
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source