Desafio
Dado um goo.gl
link encurtado válido , produza o URL original.
Exemplo
goo.gl/qIwi3N
daria algo parecido https://codegolf.stackexchange.com/
. Para entrada, você pode optar por ter o nome https?://
no início, pode optar por ter www.
antes do goo.gl
e também pode se livrar do goo.gl
se desejar apenas o final do URL. Uma barra no final é opcional para entrada e saída. Portanto, sua entrada acabará correspondendo ao regex (https?://)?(www\.)?(goo\.gl/)?[A-Za-z0-9]+/?
. Para a saída, você pode escolher se deseja ou não produzir https?://
, se deve ou não produzir www.
, e se deve ou não gerar uma barra final. No entanto, você deve ser consistente com o seu I / O formatação .
Eu direi que você não precisa ser consistente com https
vs. http
para saída (mas deve ser consistente para entrada), desde que seja consistente com a inclusão ou não da https?://
parte inteira .
Casos de teste
Eles são gravados sem https://
, não www.
, sem barra na entrada; sim https://
, não www.
e sim barra final na saída.
input -> output
goo.gl/HaE8Au -> https://codegolf.stackexchange.com/
goo.gl/IfZMwe -> https://stackoverflow.com/
goo.gl/JUdmxL -> https://chat.stackexchange.com/rooms/240/the-nineteenth-byte
Premissas
- Você pode assumir que o link reduzido não apontará para outro link reduzido e que o site de destino retornará um código de status
2xx
ou4xx
(sem redirecionamentos).
Você pode ir aqui e inserir um URL para aplicar a operação inversa: https://goo.gl/
www.
faz a diferença. Na maioria dos casos, é apenas o mesmo servidor a que se refere. Tente por exemplohttp://pks.mpg.de
ehttp://www.pks.mpg.de
. O primeiro não pode ser resolvido, enquanto o último pode.Respostas:
CJam , 7 bytes
Execução de teste
Como funciona
lg
lê uma linha de STDIN e faz uma solicitação GET para esse URL. O URL encurtado emite um redirecionamento 301, que o CJam não segue. Para o primeiro caso de teste, isso empurrana pilha. Finalmente,
'"/
divide-se em aspas duplas e5=
obtém o sexto pedaço. A saída está implícita.fonte
Solicitações Python 2 +, 44 bytes
requests.get(URL)
emite uma solicitação GET para o URL especificado. Ourl
campo do objeto de resposta contém a URL final, após qualquer redirecionamento. Um protocolo (por exemplohttp://
) é necessário para a entrada, e a entrada deve estar entre aspas.fonte
requests
não está embutido, portanto, ele precisa ser adicionado ao cabeçalho do idioma.lambda
expressão para -3 bytesBash ,
2824 bytesA saída termina com uma nova linha no estilo do Windows, que eu assumo ser aceitável.
Execução de teste
Como funciona
curl -I
envia uma solicitação HEAD, portanto, busca apenas os cabeçalhos HTTP do URL especificado. Para o primeiro caso de teste, ele imprimeou similar. A saída é enviada para
grep -oehtt.*
, que exibe apenas partes que correspondem à expressão regular especificada, ou seja, a cadeia htt seguido por qualquer quantidade de caracteres até o fim da linha.fonte
htt.*
portanto, assume que não há arquivos correspondentes no diretório atual. Para a maioria das regexes, eu concordo neste site que a possibilidade de correspondência de um arquivo é pequena o suficiente para que esteja tudo bem, mas, neste caso, acho que não. O código fonte do kernel Linux inclui arquivos nomeadoshtt.c
ehtt.h
, por exemplo. Mudá-lo paragrep -oehtt.*
não aumenta a contagem de bytes, mas reduz significativamente a probabilidade de causar problemas.-oehtt.*
é uma boa maneira de torná-lo mais confiável.PHP, 36 bytes
Entrada com
https://
get_headers
25 bytes se
Location:
no início não deve ser removidose o Google alterar o cabeçalho HTTP, aqui está uma versão mais segura
fonte
Python 2 , 43 bytes
Não possui dependências e atualmente é mais curto que a outra resposta do Python. shrug A entrada deve corresponder
https?://goo\.gl/.*?/?
fonte
NodeJS, 60 bytes
A entrada está no formato
http://goo.gl/<id>
.fonte