Différents systèmes ont différentes manières de décrire les couleurs, même si tous parlent dans l'espace RGBA. Un développeur frontal familier avec CSS peut préférer #RRGGBBAA
. Mais les développeurs Android peuvent préférer #AARRGGBB
. Lors de la gestion du format de fichier AAS, #AABBGGRR
est nécessaire. C'est trop déroutant. Peut-être que nous avons besoin d'un programme qui peut convertir entre différents formats de couleurs.
Contribution:
L'entrée contient 3 parties:
- La couleur à transformer (par exemple
#1459AC0F
), une chaîne commençant par un signe pointu#
suivi de 8 chiffres hexadécimaux. - Le format de la couleur donnée (par exemple
#RRGGBBAA
), une chaîne commençant par#
suivie de 8 lettres qui se répartissent en 4 groupes différents et chaque groupe est l'un desRR
/GG
/BB
/AA
. - Format de conversion.
Production:
- Sortie de la couleur au format converti
Cas de test:
Color, OriginalFormat, TargetFormat -> Result
#12345678, #RRGGBBAA, #AARRGGBB -> #78123456
#1A2B3C4D, #RRGGBBAA, #AABBGGRR -> #4D3C2B1A
#DEADBEEF, #AARRGGBB, #GGBBAARR -> #BEEFDEAD
Les entrées / sorties ne sont pas sensibles à la casse. Vous pouvez entrer / sortir de n'importe quelle manière acceptable.
Règles:
Il s'agit du code golf, les codes les plus courts (en octets) de chaque langue gagnent
AARRGGBB
est objectivement le meilleur format de couleur. Si quelque chose attend 24 bitsRRGGBB
et que vous lui donnez 32 bits à laAARRGGBB
place, il peut simplement ignorer l'octet supérieur et continuer à fonctionner.Réponses:
APL (Dyalog Unicode) , 6 octets SBCS
Programme complet. Invite sur STDIN pour Original, puis Target, puis Color. Imprime le résultat sur STDOUT.
Essayez-le en ligne!
⍞
invite pour l'original⍞⍋
demander Target et trouver les indices dans Original qui feraient de Original dans Target⍞[
…]
Demander Color et utiliser les indices obtenus ci-dessus pour réorganiser Colorla source
JavaScript (ES6),
5352 octets1 octet enregistré grâce à @tsh
Prend comme entrée 3 paramètres distincts:
(Color, From, To)
.Essayez-le en ligne!
la source
(C,F,T)=>T.replace(/\w/g,(x,i)=>C[F.search(x)-~i%2])
enregistrer un octetStax , 8 octets
Exécuter et déboguer
Ce programme accepte les entrées dans ce format.
Voici la version non compressée non compressée commentée du même programme.
Exécutez celui-ci
la source
Python 2 , 59 octets
Essayez-le en ligne!
la source
Retina 0.8.2 , 33 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Pour chaque paire de caractères identiques, regardez en arrière pour une autre copie de cette paire, puis les 9e et 8e caractères avant cela, et remplacez la paire par ces caractères. Cela n'est possible que pour les paires de caractères dans le format cible et les remplace par le résultat souhaité.
Supprimez la couleur et le format source.
la source
Haskell ,
108104100 9487 octetsEssayez-le en ligne!
Ancienne version
Merci à Laikoni d'avoir raccourci 6 octets en trouvant une façon plus courte d'utiliser
lookup
!Essayez-le en ligne!
Explication:
p
fonction "analyse" une chaîne en ignorant les#
groupes (listes) de début et de retour de 2 caractères.(!)
opérateur prend en entrée la couleur et le format d'entrée et renvoie une fonction qui prend en paramètre le format de sortie et renvoie la couleur convertie. Il s'est avéré que la version sans point était plus courte, mais j'ai commencé avec la version plus lisible:f c i o='#':concat[x#zip(p<$>[i,c])|x<-p o]
Essayez-le en ligne!
la source
Perl 5
-p
,333227 octetsDonnez une entrée dans l'ordre: cible, original, nombre
Essayez-le en ligne!
Pour chaque caractère dans l'entrée, trouvez le même caractère un nombre pair de places en avant puis à partir de là, avancez de 10 caractères supplémentaires et prenez ce caractère en remplacement. Si vous ne pouvez pas faire ces étapes, remplacez-les par rien.
la source
05AB1E , 10 octets
Essayez-le en ligne!
Cela fonctionne parce que je change l'entrée de:
À:
Donc, chaque valeur est mappée de manière unique, alors je peux utiliser translittération.
Les arguments sont inversés.
la source
Java 10,
179105102 octetsSoit -77 octets grâce à @ OlivierGrégoire .
Explication:
Essayez-le en ligne.
la source
J , 5 octets
L'argument de gauche est la couleur. L'argument de droite est une matrice de caractères où la première ligne est le format cible et la deuxième ligne est le format d'origine. Essayez-le en ligne!
la source
CJam, 14 octets
Essayez-le en ligne!
L'entrée est un tableau dans l'ordre inverse.
la source
Python 2, 62 octets
la source
SmileBASIC, 144 octets
la source
Rouge ,
154 120114 octetsEssayez-le en ligne!
la source
Python 3 , 102 octets
Essayez-le en ligne!
la source
Gelée , 6 octets
Essayez-le en ligne!
Programme complet.
Argument 1:
Argument original 2:
Argument cible 3: Couleur
la source
C (clang) , 89 octets
Essayez-le en ligne!
Prend la valeur d'entrée dans
a
, au format dansi
et hors formato
. Renvoie la valeur dansb
Triche mineure: stocker le résultat au
b
lieu d'imprimer pour économiser des octets. La question ne l'interdit pas.C (clang) , 100 octets
Essayez-le en ligne!
C (gcc) , 181 octets
Essayez-le en ligne!
Crée uneRGBA
valeur dans unc[]
tableau en fonction du formati
, puis imprime auo
formatla source
char*a,b[10],*i,*o;f(x)
place dechar *a,b[10],*i,*o;f(x,y)
etx+=2)bcopy(a+(long)index(i,o[x])-i,b+x,2);
au lieu deb[x++]=a[y=index(i,o[x])-i],b[x++]=a[y+1]);
Clojure 1.8, 156 octets
Non golfé
L'essayer en ligne ne prend pas en charge Clojure 1.8. Très étrange!
la source
Perl 6 ,
555146 octetsEssayez-le en ligne!
Prend une liste (couleur, original, cible) en entrée. Fractionne chaque chaîne d'entrée en composants, crée un hachage mappant les clés source aux valeurs de couleur, recherche les valeurs de couleur dans l'ordre de clé cible, puis formate le résultat.
la source