URLs werden zu lang. Sie müssen also einen Algorithmus implementieren, um eine URL zu verkürzen.
ich. Die Struktur einer URL
Eine URL besteht aus zwei Hauptteilen: einer Domain und einem Pfad . Eine Domain ist der Teil der URL vor dem ersten Schrägstrich. Sie können davon ausgehen, dass die URL kein Protokoll enthält. Der Weg ist alles andere.
ii. Die Domain
Die Domäne einer URL wird wie etwas sein: xkcd.com
meta.codegolf.stackexcchhannnge.cooom
. Jeder Teil ist nach Perioden getrennt, z. B. blag.xkcd.com
lauten die Teile "blag", "xkcd" und "com". Das wirst du damit machen:
Wenn es mehr als zwei Teile enthält, legen Sie die letzten beiden beiseite und verketten Sie den ersten Buchstaben der restlichen Teile.
Verketten Sie das dann zu dem ersten Buchstaben zu dem vorletzten Teil.
Fügen Sie einen Punkt und den zweiten und dritten Buchstaben des vorletzten Teils hinzu.
Verwerfen Sie den letzten Teil.
iii. Der Weg
Der Weg wird sein , wie: /questions/2140/
/1407/
. Nach wie vor werden "Teile" durch Schrägstriche getrennt. Führen Sie für jeden Teil des Pfads Folgendes aus:
Fügen Sie einen Schrägstrich hinzu
Wenn es vollständig aus Ziffern zur Basis zehn besteht, interpretieren Sie es als Zahl und konvertieren Sie es in eine Ganzzahl zur Basis 36.
Andernfalls fügen Sie den ersten Buchstaben des Teils hinzu.
Fügen Sie am Ende einen Schrägstrich hinzu.
iv. Sonstiges
- Das ist Code-Golf , also gewinnt der kürzeste Code.
- Der Pfad kann leer sein, die URL endet jedoch immer mit einem Schrägstrich.
- Es wird kein Protokoll (zB sein
http://
,file:///
) - Es wird niemals weniger als zwei Teile in der Domäne geben.
- Es gelten Standardlücken.
Beispiele
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/
quelle
kk
und alles, was mit beginnt,?
ist eine Abfragezeichenfolge, die nicht mit einem Schrägstrich enden sollte. Auch werden nicht alle URLs mit einem Schrägstrich/
wie endenwww.something.com/path
. Oder ist das für den Zweck dieser Herausforderung irrelevant?Antworten:
Pyth,
9385 BytesHandkompilierter pythonischer Pseudocode:
Endlich endet die Grausamkeit ...
quelle
JavaScript (ES6), 149 Byte
Erläuterung
Ich habe dies unabhängig von der Lösung von @ Neil gemacht, aber es sah sehr ähnlich aus.
Prüfung
Code-Snippet anzeigen
quelle
JavaScript ES6, 157 Byte
Bearbeiten: 4 Bytes dank Doᴡɴɢᴏᴀᴛ gespeichert.
quelle
.split('/')
und.split('.')
in String-Vorlagen zu machenjoin
!Python 2,
378365 BytesAktualisieren
Golf es ein bisschen runter. Die ~ 150 Bytes für die base36-Funktion sind ärgerlich, aber ich kann es nicht loswerden, bis Python ein eingebautes dafür hat ...
Alte Version
Da es in Python keine integrierte Möglichkeit gibt, Ints in einen base36-String umzuwandeln, habe ich die Implementierung von Numpy übernommen und sie heruntergespielt. Die Erholung ist ziemlich unkompliziert, ich werde nach der Arbeit noch mehr Golf spielen. Vorschläge immer in der Zwischenzeit geschätzt!
quelle
Pyhton 2,
336329 Bytesaktualisieren
fest und kürzer dank webwarrior
Original
DenkerAffes Version mit einigen Mods: korrektes Handling des "foo / bar? Baz" Schemas, plus, keine Notwendigkeit für negative Groß- und Kleinschreibung in der base36-Konvertierungsfunktion.
quelle
r+=chr((range(48,58)+range(65,91))[a%36])