Os URLs estão ficando muito longos. Portanto, você deve implementar um algoritmo para encurtar uma URL.
Eu. A estrutura de uma URL
Um URL tem duas partes principais: um domínio e um caminho . Um domínio é a parte do URL antes da primeira barra. Você pode assumir que o URL não inclui um protocolo. O caminho é tudo o resto.
ii. O domínio
O domínio de uma URL será algo como: xkcd.com
meta.codegolf.stackexcchhannnge.cooom
. Cada parte é separada por períodos, por exemplo blag.xkcd.com
, as partes são "blag", "xkcd" e "com". Isto é o que você fará com ele:
Se contiver mais de duas partes, coloque as duas últimas de lado e concatene a primeira letra do restante das partes.
Em seguida, concatenar isso para a primeira letra para a penúltima parte.
Adicione um ponto final e a segunda e terceira letra da penúltima parte.
Descarte a última parte.
iii. O caminho
O caminho vai ser como: /questions/2140/
/1407/
. Como antes, "partes" são separadas por barras. Para cada parte do caminho, faça:
Adicione uma barra
Se for totalmente composto por dígitos da base dez, interprete-o como um número e converta para um número inteiro da base 36.
Caso contrário, adicione a primeira letra da peça.
No final, adicione uma barra.
iv. Misc.
- Isso é código-golfe , então o código mais curto vence.
- O caminho pode estar vazio, mas o URL sempre terminará com uma barra.
- Não haverá um protocolo (por exemplo
http://
,file:///
) - Nunca haverá menos de duas partes no domínio.
- Aplicam-se brechas padrão.
Exemplos
Em: xkcd.com/72/
Fora:x.kc/20/
Em: math.stackexchange.com/a/2231/
Fora:ms.ta/a/1pz/
Em: hello.org/somecoolcodeintrepreteriijjkk?code=3g3fzsdg32,g2/
Fora:h.el/s/
fonte
kk
e tudo o que começa com?
uma string de consulta não deve terminar com uma barra? Além disso, nem todos os URLs terminam com uma barra/
, comowww.something.com/path
. Ou isso é irrelevante para o objetivo deste desafio?Respostas:
Pitão,
9385 bytesCompilado manualmente para pseudocódigo pitônico:
Finalmente, a excruciação termina ...
fonte
JavaScript (ES6), 149 bytes
Explicação
Eu fiz isso independente da solução da @ Neil, mas acabou parecendo muito semelhante.
Teste
Mostrar snippet de código
fonte
JavaScript ES6, 157 bytes
Editar: salvou 4 bytes graças a Doᴡɴɢᴏᴀᴛ.
fonte
.split('/')
e.split('.')
em modelos de cordasjoin
também!Python 2,
378365 bytesAtualizar
Golpeou um pouco. Os ~ 150 bytes para a função base36 são irritantes, mas não consigo me livrar dele até que o python tenha um builtin para isso ...
Versão antiga
Como o Python não possui uma maneira embutida de converter ints em uma base36-String, peguei a implementação do numpy e a joguei para baixo. O descanso é bem direto, vou jogar mais depois do trabalho. Entretanto, sugestões sempre apreciadas!
fonte
Pyhton 2,
336329 bytesatualizar
fixo e mais curto graças ao webwarrior
original
A versão da DenkerAffe com alguns mods: manipula corretamente o esquema "foo / bar? Baz", além disso, não há necessidade de maiúsculas e minúsculas na função de conversão base36.
fonte
r+=chr((range(48,58)+range(65,91))[a%36])