Los tripletes hexadecimales como #ffffff
(blanco) o #3764ef
(azulado) se usan a menudo para denotar colores RGB. Consisten en #
seguidos de seis dígitos hexadecimales (0-f), o, a veces, tres dígitos donde se obtiene el color real duplicando cada dígito. Por ejemplo, #fff
es #ffffff
y #1a8
es #11aa88
.
Lamentablemente, esa taquigrafía de tres dígitos era la más elegante que Internet tenía para ofrecer, hasta ahora .
Escriba un programa o función que tome una cadena de 1 a 7 caracteres:
- El primer carácter será siempre
#
. - Los otros personajes siempre estarán dígitos hexadecimales:
0123456789abcdef
.
La entrada es una forma abreviada de un triplete hexadecimal (o la forma completa si se dan 7 caracteres). Debe generar un triplete hexadecimal completo que expanda la taquigrafía de entrada en función de estos patrones:
Input -> Output
# -> #000000 (black)
#U -> #UUUUUU
#UV -> #UVUVUV
#UVW -> #UUVVWW (usual 3-digit shorthand)
#UVWX -> #UXVXWX
#UVWXY -> #UVWXYY
#UVWXYZ -> #UVWXYZ (not shorthand)
Cada uno de U
, V
, W
, X
, Y
, y Z
puede ser cualquier dígito hexadecimal. La salida es siempre de 7 caracteres.
Por ejemplo:
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
Notas
La entrada siempre comenzará
#
y también la salida.Puede suponer que todas las letras de entrada son minúsculas (
abcdef
) o mayúsculas (ABCDEF
) como prefiera.Las letras en la salida pueden estar en cualquier caso como prefiera. Incluso puedes mezclar casos.
Alfa / transparencia no se trata aquí (aunque hay versiones hexadecimales de colores RGBA).
El código más corto en bytes gana.
fuente
#UVWXY -> #UVWXYY
entrada porque permite una representación de un solo valor para el canal Azul, pero no hay una expresión similar para Rojo y Verde (por ejemplo, si quisiera#889071
no puedo abreviar, pero#907188
puedo ser ... como#90718
) los otros Todo funciona muy bien.#UVWX -> #UXVXWX
. Es un comportamiento tan inconsistente y arbitrario que es difícil creer que no haya un par de navegadores que lo implementen actualmente.#RGBA
y#RRGGBBAA
, por lo tanto, # 1234 debe leerse comorgba(17, 34, 51, 0.25)
Respuestas:
JavaScript
868277 bytessolo descubra que eliminar recursivo guardar 4 bytes ...
idea de @Arnauld guardar 4 bytes, +1 bytes más
fuente
([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
por 80 bytesReferenceError: x is not defined
Jalea , 24 bytes
Un programa completo (las líneas vacías son en realidad líneas vacías).
Pruébalo en línea! o ver un conjunto de pruebas *
¿Cómo?
* el programa de la suite de pruebas tuvo que modificarse cambiando el orden de lo que eran
Main link
yLink 7
, mientras que el pie de página se convirtió enMain Link
. Además,#
tuvo que ser reemplazado manualmente, ya que el programa tal cual lo encabeza.fuente
CJam,
454442403635 bytesEjecuta varios fragmentos de código en función de la longitud de la entrada.
fuente
<s></s>
PHP 7.1, 88 bytes
PHP 5,
9088 bytesfuente
_21422112233122444113355123456[6*$i+++strlen($argn|aa)-8]
?$argn
en21422112233122444113355123456
y selecciona el correcto basado en strlen.aa
rellena la cadena con al menos 2 caracteres. En la entrada#
hay ninguna es$argn[1]
tan?:0
da salida a una0
. Esto también funciona para0
en la cadena. ¡Una de las mejores respuestas que he visto! Lamentablemente, no paga demasiado (la respuesta de Jörg se redujo a 95).PHP,
95938987Básicamente, la respuesta de @ JörgHülsermann, pero fue un gran fracaso, así que decidí publicarla como una respuesta separada. Contaría esta respuesta como un esfuerzo colectivo de mí y Jörg.
fuente
Python 3,
166162160152 bytesConstruyo una lista de tuplas de reemplazo de expresiones regulares para cada patrón, y luego
len(x)-1
extraigo la tupla en el índice , finalmente salpicando (*
) en los argumentos dere.sub
:ahorró 8 bytes al memorizar
r'\1'
(gracias, Gábor Fekete)fuente
r'\1'
como parámetro con nombre no guardaría algunos bytes?o=r'\1'
pero usasb
en tu código: DJava 10,
228227224182 bytesPruébalo en línea.
Explicación:
fuente
APL (Dyalog) , 43 bytes
Requiere
⎕IO←0
cuál es el predeterminado en muchos sistemas.Pruébalo en línea!
1↓⍞
soltar el primer carácter (el hash){
aplicar la siguiente función anónima(≢⍵)⊃
use la longitud del argumento para elegir uno de los siguientes siete valores:'0'
a cero⍵
el argumento⍵
el argumento2/⍵
dos (2
) de cada (/
) del argumento (⍵
)∊⍵,¨⊃⌽⍵
el∊
argumento aplanado (⍵
) seguido de cada (,¨
) por el primero (⊃
) de el⌽
argumento invertido ( ) (⍵
)⍵,⌽⍵
el argumento (⍵
) antepuesto (,
) al⌽
argumento invertido ( ) (⍵
)⍵
el argumento6⍴
repita elementos de eso hasta que se logre una longitud de seis}
fin de la función anónima'#',
anteponer un hash a esofuente
Python 2,
167165 bytes-2 bytes gracias a Trelzevir
Crea una lista de cadenas y elige según la longitud de la cadena.
fuente
z=zip
.Sed, 119 (118 Bytes +
-E
)Sustitución directa de texto.
fuente
PHP, 87 bytes
utilizar números de Base 35
Pruébalo en línea!
o use los números de Base 33
Pruébalo en línea!
PHP, 89 bytes
Pruébalo en línea!
intval(["8kn",gd8,"9ft",wqq,i3j,i3k][strlen($argn|aa)-2],36)
+ 3 bytes usando una base 36PHP, 102 bytes
Pruébalo en línea!
PHP, 180 bytes
Pruébalo en línea!
fuente
Retina , 90 bytes
Pruébalo en línea! Incluye casos de prueba.
Explicación: La primera traducción maneja dos dígitos, el segundo tres, el tercero cuatro y el cuarto cero. Sin embargo, ni la segunda y la cuarta traducción repiten el (último) dígito, ya que eso se hace al final de todos modos para cubrir todos los casos restantes.
fuente
Haskell ,
13012712211810995 bytes (por user1472751 )Pruébalo en línea!
fuente
g
.(x:r)!(y:t)=x:y:r!t;e!_=e
es más corto quea!b=id=<<[[x,y]|(x,y)<-zip a b]
.#
puedes hacerlog(a:t)|l<-last t=a:[ ...
Powershell,
113111 bytesScript de prueba explicado:
Salida:
fuente
JavaScript (ES6), 96 bytes
Mostrar fragmento de código
fuente
Perl, 61 bytes
Corre con
perl -nE
. Asume que la entrada es exactamente como se describe (da resultados incorrectos si la entrada tiene una nueva línea final).La cadena "g + g + ÜRÉ / Â ¥ [[" codifica los 7 números de 16 bits
11111,11111,21212,12233,42434,23455,23456
como 14 caracteres latin1. Aquí hay un hexdump para mayor claridad:fuente
perl -nE 'say+(/./g,0)[0,1,(unpack+S7,pack "H*","672b672bdc52c92fc2a59f5ba05b")[y/#//c]=~/./g]'
. Pero cuando escribo "#a", obtengo "# a0a0a0", lo que creo que está mal. Debería ser "#aaaaaa". (Tal vez cometí un error en la llamada pack ().)perl -nE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'
. Todavía parece estar equivocado, ya que "#a" aún produce la respuesta incorrecta de "# a0a0a0" (en lugar de "#aaaaaa").-l
interruptor (que es "ell" como en la "letra L") con el-nE
interruptor, así:perl -lnE 'say+(/./g,0)[0,1,(11111,11111,21212,12233,42434,23455,23456)[y/#//c]=~/./g]'
. Ahora funciona correctamente.perl -nE
" a "Ejecutar conperl -lnE
". (La-l
parte del cambio se deshace de la nueva línea final para usted.)-F
en la línea de comando le permite cambiar esto parasay+(@F,0)[0,1,(unpack+S7,"g+g+ÜRÉ/Â¥[ [")[$#F]=~/./g]
guardar 5 bytes en el código.Lote de Windows,
389 372 362 349231 bytesCopié totalmente el código @Neil ...
fuente
%s:~3,1%%s:~4,1%
puede ser reemplazado con%s:~3,2%
. Además, no estoy seguro de que esto funcione para una entrada de#
.call:c %s:~1,1% %s:~2,1% %s:~3,1% %s:~4,1% %s:~5,1% %s:~6,1%
yfor %%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 bytes
Pruébelo en línea aquí , o verifique todos los casos de prueba aquí .
fuente
Python 2 , 99 bytes
Pruébalo en línea!
fuente
Python 2 - 179 bytes
¿Alguien puede ayudarme a guardar algunos bytes? Todas las declaraciones si parecen que podrían acortarse en algo más corto, simplemente no sé qué.
fuente
list[len(list)-x]
es lo mismo quelist[-x]
.if t==1:
aif t<2:
(yif t==2:
aif t<3:
, etc.). Es menos legible, sin duda, ¡pero más compatible con el código de golf!TXR Lisp: 171 bytes
Sangrado:
Esta es una función anónima: la
do
macro genera un(lambda ...)
formulario.Es un estilo de codificación idiomático, adecuado para la producción; el único golf es el espacio en blanco:
fuente
Braingolf , 95 bytes
Pruébalo en línea!
Esto es efectivamente el equivalente de Braingolf de un caso de cambio en la cantidad de caracteres después
#
de la entrada.Explicación
Cosas que siempre se ejecutan:
Si
#X
:Si
#XX
Este puede ser un poco golfa, podría mirarlo cuando llegue a casa
Si
#XXX
Tienes la idea
fuente
Rubí , 127 bytes
Pruébalo en línea!
fuente
Ruby , 118 bytes
Pruébalo en línea!
fuente
05AB1E , 24 bytes
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente