Briefing
Dado um nome de classe / pacote Java totalmente qualificado, você deve abreviá-lo da seguinte forma:
Cada parte do pacote separado por pontos será reduzida para a primeira letra, além da última seção e da classe (se existir).
os nomes dos pacotes serão todos minúsculos e a classe (se existir) começará com uma letra maiúscula e será UpperCamelCase. pacotes vêm na forma de:
foo.bar.foo
e
foo.bar.foo.Class
Exemplos
(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
Regras
- Menor código em bytes ganha
- Aplicam-se brechas padrão
fantastic.foo.func.bar
sef.f.f.bar
ou é garantido que 2 pacotes não podem começar com a mesma letra?f.f.f.bar
estaria correto.Respostas:
Retina , 17 bytes
Experimente online!
Explicação
Isso é substituído por
$1
, que é o período e a letra minúscula que não deve ser removida.fonte
JavaScript (ES6),
6853 bytesVeja minha outra solução aqui .
Tente
fonte
s=>s.split`.`.map((x,y,z)=>z[y+1]>"["?x[0]:x).join`.`
?Mathematica, 75 bytes
Função anônima. Pega uma string como entrada e retorna uma string como saída.
fonte
Japonês ,
30 2725 bytesExperimente online!
fonte
('[>ZgJ)
Python 2 ,
7673 bytesExperimente online! ou Experimente todos os casos de teste
fonte
Python 2 ,
8881 bytesExperimente online!
fonte
Java 7, 66 bytes
Porto da incrível resposta Retina de @MartinEnder .
Experimente aqui.
fonte
JavaScript (ES6), 36 bytes
Outro porto da resposta da Martin Retina . Veja minha outra solução aqui .
fonte
V , 9 bytes
Experimente online!
Hexdump:
Este é um exemplo maravilhoso da assinatura do V compressão regex .
Explicação:
fonte
Python 2 ,
1089789 bytesExperimente online!
-8 com muito obrigado a @ovs pela dica
fonte
for x in range(len(i)+~(i[-1][0]<"[")):i[x]=i[x][0]
para -8sed ,
5722 bytesEu esperava que a solução sed fosse um pouco mais curta que isso ...Editar:
A solução mais curta usa regex da resposta de Martin Ender .
Código de origem de 21 bytes + 1 byte para
-r
sinalizador (ou-E
sinalizador para BSD sed).fonte
s|\B\w+(\.[a-z])|\1|g
?Haskell , 58 bytes
Experimente online!Uso:
f "some.string"
.lex
analisa uma string como tokens Haskell, entãolex "some.string"
retorna[("some",".string")]
.f
recorre sobre os tokens na string e sempre acrescenta o primeiro caracterea
do token atual, mas o restantet
do token somente se a string restante após os dois pontosp
começar com um caractere maiúsculox<'a'
. Se a correspondência do padrão falhar, alcançamos o último token e simplesmente retornamoss
.fonte