Les URL deviennent trop longues. Vous devez donc implémenter un algorithme pour raccourcir une URL.
je. La structure d'une URL
Une URL se compose de 2 parties principales: un domaine et un chemin . Un domaine est la partie de l'URL avant la première barre oblique. Vous pouvez supposer que l'URL n'inclut pas de protocole. Le chemin est tout le reste.
ii. Le domaine
Le domaine d'une URL sera quelque chose comme: xkcd.com
meta.codegolf.stackexcchhannnge.cooom
. Chaque partie est séparée par des périodes, par exemple dans blag.xkcd.com
, les parties sont "blag", "xkcd" et "com". Voici ce que vous en ferez:
S'il contient plus de deux parties, mettez les deux dernières de côté et concaténez la première lettre du reste des parties.
Ensuite, concaténez cela à la première lettre de l'avant-dernière partie.
Ajoutez un point et les deuxième et troisième lettres de l'avant-dernière partie.
Jetez la dernière partie.
iii. Le chemin
Le chemin sera comme: /questions/2140/
/1407/
. Comme auparavant, les "pièces" sont séparées par des barres obliques. Pour chaque partie du chemin, faites:
Ajouter une barre oblique
S'il est entièrement composé de chiffres de base dix, interprétez-le comme un nombre et convertissez-le en un entier de base 36.
Sinon, ajoutez la première lettre de la pièce.
À la fin, ajoutez une barre oblique.
iv. Divers
- C'est le code-golf , donc le code le plus court l'emporte.
- Le chemin peut être vide, mais l'URL se terminera toujours par une barre oblique.
- Il n'y aura pas de protocole (par exemple
http://
,file:///
) - Il n'y aura jamais moins de deux parties dans le domaine.
- Des échappatoires standard s'appliquent.
Exemples
Entrée: xkcd.com/72/
Sortie:x.kc/20/
Entrée: math.stackexchange.com/a/2231/
Sortie:ms.ta/a/1pz/
Entrée: hello.org/somecoolcodeintrepreteriijjkk?code=3g3fzsdg32,g2/
Sortie:h.el/s/
la source
kk
et tout ce qui commence par?
est une chaîne de requête, qui ne devrait pas se terminer par une barre oblique? De plus, toutes les URL ne se terminent pas par une barre oblique/
, commewww.something.com/path
. Ou cela n'est-il pas pertinent aux fins de ce défi?Réponses:
Pyth,
9385 octetsCompilé manuellement en pseudocode pythonique:
Enfin, les atrocités se terminent ...
la source
JavaScript (ES6), 149 octets
Explication
J'ai rendu cela indépendant de la solution de @ Neil mais cela a fini par ressembler beaucoup .
Tester
Afficher l'extrait de code
la source
JavaScript ES6, 157 octets
Edit: 4 octets enregistrés grâce à Doᴡɴɢᴏᴀᴛ.
la source
.split('/')
et de créer.split('.')
des modèles de chaînesjoin
aussi!Python 2,
378365 octetsMise à jour
Golfé un peu. Les ~ 150 octets pour la fonction base36 sont ennuyeux, mais je ne peux pas m'en débarrasser tant que python n'a pas intégré cela ...
Ancienne version
Étant donné que Python n'a pas de méthode intégrée pour convertir les entiers en une chaîne de base36, j'ai pris l'implémentation de numpy et l'ai analysée. Le repos est assez simple, je vais le jouer plus après le travail. Des suggestions toujours appréciées en attendant!
la source
Pyhton 2,
336329 octetsmise à jour
fixe et plus court grâce à webwarrior
original
Version de DenkerAffe avec quelques mods: gérer correctement le schéma "foo / bar? Baz", plus, pas besoin de casse négative dans la fonction de conversion base36.
la source
r+=chr((range(48,58)+range(65,91))[a%36])