Las URL son demasiado largas. Por lo tanto, debe implementar un algoritmo para acortar una URL.
yo. La estructura de una URL
Una URL tiene 2 partes principales: un dominio y una ruta . Un dominio es la parte de la URL antes de la primera barra inclinada. Puede suponer que la URL no incluye un protocolo. El camino es todo lo demás.
ii. El dominio
El dominio de una dirección URL será algo como: xkcd.com
meta.codegolf.stackexcchhannnge.cooom
. Cada parte está separada por blag.xkcd.com
puntos , por ejemplo, en , las partes son "blag", "xkcd" y "com". Esto es lo que harás con él:
Si contiene más de dos partes, ponga las dos últimas a un lado y concatene la primera letra del resto de las partes.
Luego, concatena eso a la primera letra a la penúltima parte.
Agregue un punto y la segunda y tercera letra de la penúltima parte.
Desechar la última parte.
iii) El camino
El camino será como: /questions/2140/
/1407/
. Como antes, las "partes" están separadas por barras. Para cada parte de la ruta, haga:
Agregar una barra inclinada
Si está completamente hecho de dígitos de base diez, interprete como un número y conviértalo a un entero de base 36.
De lo contrario, agregue la primera letra de la parte.
Al final, agregue una barra.
iv. Misceláneos
- Este es el código de golf , por lo que gana el código más corto.
- La ruta puede estar vacía, pero la URL siempre terminará con una barra inclinada.
- No habrá un protocolo (p
http://
. Ej .file:///
) - Nunca habrá menos de dos partes en el dominio.
- Se aplican lagunas estándar.
Ejemplos
In: xkcd.com/72/
Out:x.kc/20/
In: math.stackexchange.com/a/2231/
Out:ms.ta/a/1pz/
In: hello.org/somecoolcodeintrepreteriijjkk?code=3g3fzsdg32,g2/
Out:h.el/s/
fuente
kk
y todo lo que comienza?
es una cadena de consulta, que no debería terminar con una barra diagonal? Además, no todas las URL terminarán con una barra inclinada/
, comowww.something.com/path
. ¿O es esto irrelevante para el propósito de este desafío?Respuestas:
Pyth,
9385 bytesCompilado a mano a pseudocódigo pitónico:
Finalmente, la insoportable termina ...
fuente
JavaScript (ES6), 149 bytes
Explicación
Lo hice independiente de la solución de @ Neil, pero terminó pareciéndose muy similar.
Prueba
Mostrar fragmento de código
fuente
JavaScript ES6, 157 bytes
Editar: Guardado 4 bytes gracias a Doᴡɴɢᴏᴀᴛ.
fuente
.split('/')
y crear.split('.')
plantillas de cadenajoin
!Python 2,
378365 BytesActualizar
Golfed por un poco. Los ~ 150 Bytes para la función base36 son molestos, pero no puedo deshacerme de él hasta que Python tenga un incorporado para eso ...
Versión antigua
Como Python no tiene una forma integrada de convertir ints en una cadena base36, tomé la implementación de numpy y la bajé. El descanso es bastante sencillo, lo jugaré más después del trabajo. Sugerencias siempre apreciadas mientras tanto!
fuente
Pyhton 2,
336329 bytesactualizar
arreglado y más corto gracias a webwarrior
original
La versión de DenkerAffe con algunas modificaciones: maneja correctamente el esquema "foo / bar? Baz", además, no hay necesidad de mayúsculas y minúsculas en la función de conversión base36.
fuente
r+=chr((range(48,58)+range(65,91))[a%36])