Desafío
Dado un goo.gl
enlace acortado válido , genera la URL original.
Ejemplo
goo.gl/qIwi3N
daría algo así https://codegolf.stackexchange.com/
. Para la entrada, puede elegir tener el https?://
al principio, puede elegir tener www.
antes del goo.gl
, y también puede optar por deshacerse de él goo.gl
si solo desea el final de la URL. Una barra oblicua al final es opcional para entrada y salida. Entonces, su entrada terminará haciendo coincidir la expresión regular (https?://)?(www\.)?(goo\.gl/)?[A-Za-z0-9]+/?
. Para la salida, puede elegir si generar o no https?://
, si generar o no www.
, y si generar o no una barra diagonal final. Sin embargo, debe ser compatible con el formato de su E / S .
Diré que no tiene que ser consistente con https
vs. http
para salida (pero debe ser consistente para entrada), siempre y cuando sea consistente con si incluye o no la https?://
parte completa .
Casos de prueba
Estos se escriben con no https://
, no www.
, sin barra diagonal en la entrada; sí https://
, no www.
y sí, barra diagonal final en la salida.
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
Supuestos
- Puede suponer que el enlace acortado no apuntará a otro enlace acortado y que el sitio de destino devolverá un código de estado de
2xx
o4xx
(sin redireccionamientos).
Puede ir aquí e ingresar una URL para aplicar la operación inversa de esto: https://goo.gl/
www.
marca la diferencia. En la mayoría de los casos, es el mismo servidor al que se refiere. Prueba por ejemplohttp://pks.mpg.de
yhttp://www.pks.mpg.de
. El primero no puede resolverse, mientras que el último sí.Respuestas:
CJam , 7 bytes
Prueba de funcionamiento
Cómo funciona
lg
lee una línea de STDIN y realiza una solicitud GET a esa URL. La URL acortada emite una redirección 301, que CJam no sigue. Para el primer caso de prueba, esto empujaen la pila Finalmente, se
'"/
divide entre comillas dobles y5=
obtiene el sexto fragmento. La salida es implícita.fuente
Python 2 + solicitudes, 44 bytes
requests.get(URL)
emite una solicitud GET a la URL especificada. Elurl
campo del objeto de respuesta contiene la URL final, después de cualquier redireccionamiento. Sehttp://
requiere un protocolo (por ejemplo ) para la entrada, y se espera que la entrada esté entre comillas.fuente
requests
no está integrado, por lo que debe agregarse al encabezado del idioma.lambda
expresión para -3 bytesBash ,
2824 bytesEl resultado finaliza con una nueva línea de estilo Windows, que supongo que es aceptable.
Prueba de funcionamiento
Cómo funciona
curl -I
envía una solicitud HEAD, por lo que solo obtiene los encabezados HTTP de la URL especificada. Para el primer caso de prueba, imprimeo similar. La salida se canaliza a
grep -oehtt.*
, que muestra solo partes que coinciden con la expresión regular especificada, es decir, la cadena htt seguida de cualquier cantidad de caracteres hasta el final de la línea.fuente
htt.*
lo que se supone que no existen archivos coincidentes en el directorio actual. Para la mayoría de las expresiones regulares, estoy de acuerdo en este sitio que la posibilidad de que un archivo coincida es lo suficientemente pequeña como para que esté bien, pero en este caso, no lo creo. El código fuente del kernel de Linux incluye archivos nombradoshtt.c
yhtt.h
, por ejemplo. Cambiarlo agrep -oehtt.*
no aumenta el recuento de bytes, pero hace que sea mucho menos probable que cause problemas.-oehtt.*
es una buena manera de hacerlo más confiable.PHP, 36 bytes
Entrada con
https://
get_headers
25 bytes si
Location:
al principio no se deben eliminarsi Google cambia el encabezado HTTP, aquí hay una versión más segura
fuente
Python 2 , 43 bytes
No tiene dependencias y actualmente es más corto que la otra respuesta de Python. encogerse La entrada debe coincidir
https?://goo\.gl/.*?/?
fuente
NodoJS, 60 bytes
La entrada está en el formato
http://goo.gl/<id>
.fuente