Los diferentes sistemas tienen diferentes formas de describir los colores, incluso si todos están hablando en el espacio RGBA. Un desarrollador front-end que esté familiarizado con CSS puede preferir #RRGGBBAA
. Pero los desarrolladores de Android pueden preferir #AARRGGBB
. Cuando se maneja el formato de archivo AAS, #AABBGGRR
es necesario. Eso es muy confuso. Quizás necesitemos un programa que pueda convertir entre diferentes formatos de color.
Entrada:
La entrada contiene 3 partes:
- El color a transformar (p
#1459AC0F
. Ej. ), Una cadena que comienza con un signo agudo#
seguido de 8 dígitos hexadecimales. - El formato del color dado (p
#RRGGBBAA
. Ej. ), Una cadena que comienza con#
8 letras seguidas de 4 grupos diferentes y cada grupo es uno deRR
/GG
/BB
/AA
. - El formato para convertir.
Salida:
- Salida del color en formato convertido
Casos de prueba:
Color, OriginalFormat, TargetFormat -> Result
#12345678, #RRGGBBAA, #AARRGGBB -> #78123456
#1A2B3C4D, #RRGGBBAA, #AABBGGRR -> #4D3C2B1A
#DEADBEEF, #AARRGGBB, #GGBBAARR -> #BEEFDEAD
Entrada / salida son mayúsculas y minúsculas. Puede ingresar / emitir de cualquier manera aceptable.
Reglas:
Este es el código de golf, los códigos más cortos (en bytes) de cada idioma ganado
AARRGGBB
es objetivamente el mejor formato de color. Si algo espera 24 bitsRRGGBB
y le das 32 bitsAARRGGBB
, puede ignorar el byte superior y seguir funcionando.Respuestas:
APL (Dyalog Unicode) , SBCS de 6 bytes
Programa completo Solicita STDIN para Original, luego Destino, luego Color. Imprime el resultado en STDOUT.
Pruébalo en línea!
⍞
solicitud de original⍞⍋
solicite Target y encuentre los índices en Original que convertirían Original en Target⍞[
...]
solicite Color y use los índices obtenidos anteriormente para reordenar Colorfuente
JavaScript (ES6),
5352 bytesGuardado 1 byte gracias a @tsh
Toma de entrada como 3 parámetros distintos:
(Color, From, To)
.Pruébalo en línea!
fuente
(C,F,T)=>T.replace(/\w/g,(x,i)=>C[F.search(x)-~i%2])
guardar un byteStax , 8 bytes
Ejecutar y depurarlo
Este programa toma la entrada en este formato.
Aquí está la versión desempaquetada y no comentada del mismo programa.
Ejecute este
fuente
Python 2 , 59 bytes
Pruébalo en línea!
fuente
Retina 0.8.2 , 33 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Para cada par de caracteres idénticos, busque otra copia de ese par, y luego los caracteres noveno y octavo antes de eso, y reemplace el par con esos caracteres. Esto solo es posible para los pares de caracteres en el formato de destino, y los reemplaza con el resultado deseado.
Eliminar el color y el formato de origen.
fuente
Haskell ,
108104100 9487 bytesPruébalo en línea!
Versión antigua
¡Gracias a Laikoni por acortar 6 bytes al encontrar una forma más corta de usar
lookup
!Pruébalo en línea!
Explicación:
p
función "analiza" una cadena al ignorar los#
grupos (listas) iniciales y de retorno de 2 caracteres.(!)
operador toma como entrada el color y el formato de entrada y devuelve una función que toma como parámetro el formato de salida y devuelve el color convertido. Resultó que la versión sin puntos era más corta, pero comencé con la versión más legible:f c i o='#':concat[x#zip(p<$>[i,c])|x<-p o]
Pruébalo en línea!
fuente
Perl 5
-p
,333227 bytesDar entrada en el orden: objetivo, original, número
Pruébalo en línea!
Para cada carácter en la entrada, encuentre el mismo carácter un número par de lugares hacia adelante y luego desde allí avance 10 caracteres más y tome ese carácter como reemplazo. Si no puede hacer estos pasos, reemplácelos por nada.
fuente
05AB1E , 10 bytes
Pruébalo en línea!
Esto funciona porque cambio la entrada de:
A:
Entonces, cada valor se asigna de manera única, luego puedo usar transliterate.
Los argumentos se invierten.
fuente
Java 10,
179105102 bytesLa friolera de -77 bytes gracias a @ OlivierGrégoire .
Explicación:
Pruébalo en línea.
fuente
J , 5 bytes
El argumento izquierdo es el color. El argumento correcto es una matriz de caracteres donde la primera fila es el formato de destino y la segunda fila es el formato original. Pruébalo en línea!
fuente
CJam, 14 bytes
Pruébalo en línea!
La entrada es una matriz en el orden inverso.
fuente
Python 2, 62 bytes
fuente
SmileBASIC, 144 bytes
fuente
Rojo ,
154 120114 bytesPruébalo en línea!
fuente
Python 3 , 102 bytes
Pruébalo en línea!
fuente
Jalea , 6 bytes
Pruébalo en línea!
Programa completo
Argumento 1:
Argumento original 2:
Argumento de destino 3: Color
fuente
C (clang) , 89 bytes
Pruébalo en línea!
Toma el valor de entrada en
a
, en formato dentroi
y fuera de formatoo
. Devuelve el valor enb
Truco menor: almacenando el resultado en
b
lugar de imprimir para guardar bytes. La pregunta no lo rechaza.C (clang) , 100 bytes
Pruébalo en línea!
C (gcc) , 181 bytes
Pruébalo en línea!
Crea unRGBA
valor en unac[]
matriz según el formatoi
, luego imprime eno
formatofuente
char*a,b[10],*i,*o;f(x)
lugar dechar *a,b[10],*i,*o;f(x,y)
y enx+=2)bcopy(a+(long)index(i,o[x])-i,b+x,2);
lugar deb[x++]=a[y=index(i,o[x])-i],b[x++]=a[y+1]);
Clojure 1.8, 156 bytes
Sin golf
Pruébelo en línea no tiene soporte Clojure 1.8. ¡Muy extraño!
fuente
Perl 6 ,
555146 bytesPruébalo en línea!
Toma una lista (color, original, destino) como entrada. Divide cada cadena de entrada en componentes, crea claves de origen de mapeo de hash para valores de color, busca valores de color en el orden de las teclas de destino y luego formatea el resultado.
fuente