Sistemas diferentes têm maneiras diferentes de descrever cores, mesmo que todos falem no espaço RGBA. Um desenvolvedor front-end familiarizado com CSS pode preferir #RRGGBBAA
. Mas os desenvolvedores do Android podem preferir #AARRGGBB
. Ao manipular o formato de arquivo AAS, #AABBGGRR
é necessário. Isso é muito confuso. Talvez precisemos de um programa que possa converter entre diferentes formatos de cores.
Entrada:
A entrada contém 3 partes:
- A cor a ser transformada (por exemplo
#1459AC0F
), uma sequência que começa com um sinal nítido#
seguido por 8 dígitos hexadecimais. - O formato da cor fornecida (por exemplo
#RRGGBBAA
), uma sequência iniciada#
por 8 letras, que se enquadram em 4 grupos diferentes e cada grupo é um deRR
/GG
/BB
/AA
. - O formato para o qual converter.
Resultado:
- Saída da cor no formato convertido
Casos de teste:
Color, OriginalFormat, TargetFormat -> Result
#12345678, #RRGGBBAA, #AARRGGBB -> #78123456
#1A2B3C4D, #RRGGBBAA, #AABBGGRR -> #4D3C2B1A
#DEADBEEF, #AARRGGBB, #GGBBAARR -> #BEEFDEAD
Entrada / saída não diferenciam maiúsculas de minúsculas. Você pode entrada / saída de qualquer maneira aceitável.
Regras:
Esse é o código de golfe, os códigos mais curtos (em bytes) de cada idioma
AARRGGBB
é objetivamente o melhor formato de cor. Se algo espera 24 bitsRRGGBB
e você dá 32 bitsAARRGGBB
, pode ignorar o byte superior e continuar funcionando.Respostas:
APL (Dyalog Unicode) , SBCS de 6 bytes
Programa completo. Solicita no STDIN o Original, o Destino e a Cor. Imprime o resultado em STDOUT.
Experimente online!
⍞
solicitação de Original⍞⍋
solicitar Target e encontrar os índices no Original que tornariam Original no Target⍞[
…]
Solicite cores e use os índices obtidos acima para reordenar coresfonte
JavaScript (ES6),
5352 bytesGuardado 1 byte graças a @tsh
Toma entrada como 3 parâmetros distintos:
(Color, From, To)
.Experimente online!
fonte
(C,F,T)=>T.replace(/\w/g,(x,i)=>C[F.search(x)-~i%2])
salvar um byteStax , 8 bytes
Execute e depure
Este programa recebe entrada neste formato.
Aqui está a versão descompactada e não empacotada comentada do mesmo programa.
Execute este
fonte
Python 2 , 59 bytes
Experimente online!
fonte
Retina 0.8.2 , 33 bytes
Experimente online! O link inclui casos de teste. Explicação:
Para cada par de caracteres idênticos, procure outra cópia desse par e, em seguida, o nono e o oitavo caracteres antes e substitua o par por esses caracteres. Isso só é possível para os pares de caracteres no formato de destino e os substitui pelo resultado desejado.
Exclua a cor e o formato de origem.
fonte
Haskell ,
108 104 100 9487 bytesExperimente online!
Versão antiga
Agradecemos a Laikoni por reduzir 6 bytes, encontrando uma maneira mais curta de usar
lookup
!Experimente online!
Explicação:
p
função "analisa" uma string ignorando os#
grupos inicial e retornado (listas) de 2 caracteres.(!)
operador toma como entrada a cor e o formato de entrada e retorna uma função que assume como parâmetro o formato de saída e retorna a cor convertida. Descobriu-se que a versão pointfree era mais curta, mas comecei com a versão mais legível:f c i o='#':concat[x#zip(p<$>[i,c])|x<-p o]
Experimente online!
fonte
Perl 5
-p
,333227 bytesDê entrada na ordem: destino, original, número
Experimente online!
Para cada caractere na entrada, encontre o mesmo caractere com um número par de lugares para a frente e, a partir daí, prossiga com mais 10 caracteres e leve esse caractere como substituto. Se você não pode executar essas etapas, substitua por nada.
fonte
05AB1E , 10 bytes
Experimente online!
Isso funciona porque eu altero a entrada de:
Para:
Portanto, cada valor é mapeado exclusivamente, para que eu possa usar o transliterado.
Os argumentos são invertidos.
fonte
Java 10,
179105102 bytesSurpreendente -77 bytes graças a @ OlivierGrégoire .
Explicação:
Experimente online.
fonte
J , 5 bytes
O argumento da esquerda é a cor. O argumento correto é uma matriz de caracteres em que a primeira linha é o formato de destino e a segunda linha é o formato original. Experimente online!
fonte
CJam, 14 bytes
Experimente Online!
Entrada é uma matriz na ordem inversa.
fonte
Python 2, 62 bytes
fonte
SmileBASIC, 144 bytes
fonte
Vermelho ,
154 120114 bytesExperimente online!
fonte
Python 3 , 102 bytes
Experimente online!
fonte
Gelatina , 6 bytes
Experimente online!
Programa completo.
Argumento 1:
Argumento original 2:
Argumento de destino 3: Cor
fonte
C (clang) , 89 bytes
Experimente online!
Recebe o valor de entrada
a
, no formato ini
e out, no formato ino
. Retorna o valor emb
Fraude menor: armazenar o resultado em
b
vez de imprimir para salvar bytes. A pergunta não a desaprova.C (clang) , 100 bytes
Experimente online!
C (gcc) , 181 bytes
Experimente online!
Cria umRGBA
valor nac[]
matriz com base no formatoi
e depois imprime noo
formatofonte
char*a,b[10],*i,*o;f(x)
vez dechar *a,b[10],*i,*o;f(x,y)
e emx+=2)bcopy(a+(long)index(i,o[x])-i,b+x,2);
vez deb[x++]=a[y=index(i,o[x])-i],b[x++]=a[y+1]);
Clojure 1.8, 156 bytes
Ungolfed
Experimente online não tem suporte ao Clojure 1.8. Muito estranho!
fonte
Perl 6 ,
555146 bytesExperimente online!
Leva uma lista (cor, original, destino) como entrada. Divide cada sequência de entrada em componentes, cria chaves de origem de mapeamento Hash para valores de cores, pesquisa valores de cores na ordem das chaves de destino e formata o resultado.
fonte