Instrucciones
Dado un nombre de clase / paquete Java totalmente calificado, debe acortarlo como tal:
Cada parte del paquete separado por puntos se acortará a su primera letra, aparte de la última sección y la clase (si existe).
los nombres de los paquetes estarán en minúsculas, y la clase (si existe) comenzará con una letra mayúscula y será UpperCamelCase. los paquetes vienen en forma de:
foo.bar.foo
y
foo.bar.foo.Class
Ejemplos
(No Class)
Input com.stackoverflow.main
Output c.s.main
(Class)
Input com.google.parser.Gson
Output c.g.parser.Gson
(Class)
Input com.google.longer.package.TestClass
Output c.g.l.package.TestClass
Reglas
- El código más corto en bytes gana
- Se aplican lagunas estándar
fantastic.foo.func.bar
convertidof.f.f.bar
o está garantizado que 2 paquetes no pueden comenzar con la misma letra?f.f.f.bar
Sería correcto.Respuestas:
Retina , 17 bytes
Pruébalo en línea!
Explicación
Esto se reemplaza con
$1
, que es el punto y la letra minúscula que no se debe eliminar.fuente
JavaScript (ES6),
6853 bytesVea mi otra solución aquí .
Intentalo
fuente
s=>s.split`.`.map((x,y,z)=>z[y+1]>"["?x[0]:x).join`.`
?Mathematica, 75 bytes
Función anónima. Toma una cadena como entrada y devuelve una cadena como salida.
fuente
Japt ,
30 2725 bytesPruébalo en línea!
fuente
('[>ZgJ)
Python 2 ,
7673 bytesPruébalo en línea! o Pruebe todos los casos de prueba
fuente
Python 2 ,
8881 bytesPruébalo en línea!
fuente
Java 7, 66 bytes
Puerto de la sorprendente respuesta de Retina de @MartinEnder .
Pruébalo aquí.
fuente
JavaScript (ES6), 36 bytes
Otro puerto de la Retina de Martin responde . Vea mi otra solución aquí .
fuente
V , 9 bytes
Pruébalo en línea!
Hexdump:
Este es un maravilloso ejemplo de la firma del V compresión de expresiones regulares .
Explicación:
fuente
Python 2 ,
1089789 bytesPruébalo en línea!
-8 con muchas gracias a @ovs por el dato
fuente
for x in range(len(i)+~(i[-1][0]<"[")):i[x]=i[x][0]
para -8sed ,
5722 bytesEsperaba que la solución sed fuera un poco más corta que esto ...Editar:
La solución más corta utiliza expresiones regulares de la respuesta de Martin Ender .
Código fuente de 21 bytes + 1 byte para
-r
bandera (o-E
bandera para BSD sed).fuente
s|\B\w+(\.[a-z])|\1|g
?Haskell , 58 bytes
Pruébalo en línea! Uso:
f "some.string"
.lex
analiza una cadena como tokens Haskell, por lo quelex "some.string"
regresa[("some",".string")]
.f
vuelve a aparecer sobre los tokens en la cadena y siempre agrega el primer caráctera
del token actual, pero el restot
del token solo si la cadena restante después de los dos puntosp
comienza con un carácter en mayúscula, es decirx<'a'
. Si la coincidencia de patrón falló, hemos alcanzado el último token y simplemente regresamoss
.fuente