Herausforderung
Geben Sie bei einem gültigen goo.gl
verkürzten Link die ursprüngliche URL aus.
Beispiel
goo.gl/qIwi3N
würde so etwas geben /codegolf//
. Für die Eingabe können Sie wählen , die haben https?://
am Anfang, können Sie haben , www.
bevor das goo.gl
, und Sie können auch wählen , um von der loszuwerden , goo.gl
wenn Sie das Ende der URL mögen. Ein Schrägstrich am Ende ist für die Ein- und Ausgabe optional. Ihre Eingabe stimmt also mit dem regulären Ausdruck überein (https?://)?(www\.)?(goo\.gl/)?[A-Za-z0-9]+/?
. Für die Ausgabe können Sie auswählen, ob ausgegeben werden soll https?://
, ob ausgegeben werden soll oder nicht www.
und ob ein abschließender Schrägstrich ausgegeben werden soll oder nicht. Allerdings müssen Sie mit Ihrem E / A - Formatierung konsistent sein .
Ich werde sagen, dass Sie nicht konsistent mit https
vs. http
für die Ausgabe sein müssen (aber Sie müssen konsistent für die Eingabe sein), solange Sie konsistent sind, ob Sie den gesamten https?://
Teil einschließen oder nicht .
Testfälle
Diese werden mit keinem https://
, keinem www.
, keinem abschließenden Schrägstrich in der Eingabe geschrieben. Ja https://
, Nein www.
und Ja, abschließender Schrägstrich in der Ausgabe.
input -> output
goo.gl/HaE8Au -> /codegolf//
goo.gl/IfZMwe -> /programming//
goo.gl/JUdmxL -> https://chat.stackexchange.com/rooms/240/the-nineteenth-byte
Annahmen
- Sie können davon ausgehen, dass der verkürzte Link nicht auf einen anderen verkürzten Link verweist und dass die Zielwebsite einen Statuscode von
2xx
oder4xx
(keine Weiterleitungen) zurückgibt.
Sie können hier eine URL eingeben, um die umgekehrte Operation anzuwenden: https://goo.gl/
www.
macht einen Unterschied. Es ist nur in den meisten Fällen derselbe Server, auf den es sich bezieht. Versuchen Sie zum Beispielhttp://pks.mpg.de
undhttp://www.pks.mpg.de
. Das erste kann nicht gelöst werden, während das letztere kann.Antworten:
CJam , 7 Bytes
Testlauf
Wie es funktioniert
lg
liest eine Zeile von STDIN und sendet eine GET-Anfrage an diese URL. Die verkürzte URL gibt eine 301-Weiterleitung aus, der CJam nicht folgt. Für den ersten Testfall drückt diesauf dem Stapel. Schließlich wird
'"/
in doppelte Anführungszeichen aufgeteilt und5=
erhält den sechsten Block. Die Ausgabe ist implizit.quelle
Python 2 + Anfragen, 44 Bytes
requests.get(URL)
gibt eine GET-Anforderung an die angegebene URL aus. Dasurl
Feld des Antwortobjekts enthält nach Weiterleitungen die endgültige URL. Fürhttp://
die Eingabe ist ein Protokoll (z. B. ) erforderlich, und es wird erwartet, dass die Eingabe in Anführungszeichen steht.quelle
requests
ist nicht integriert, daher muss dies dem Sprachheader hinzugefügt werden.lambda
Ausdruck für -3 BytesBash ,
2824 BytesDie Ausgabe endet mit einer Newline im Windows-Stil, die meiner Meinung nach akzeptabel ist.
Testlauf
Wie es funktioniert
curl -I
sendet eine HEAD-Anfrage, sodass nur die HTTP-Header der angegebenen URL abgerufen werden. Für den ersten Testfall wird gedrucktoder ähnliches. Die Ausgabe wird an weitergeleitet
grep -oehtt.*
, wobei nur Teile angezeigt werden, die dem angegebenen regulären Ausdruck entsprechen , dh die Zeichenfolge htt, gefolgt von einer beliebigen Anzahl von Zeichen bis zum Ende der Zeile.quelle
htt.*
sodass davon ausgegangen wird, dass im aktuellen Verzeichnis keine übereinstimmenden Dateien vorhanden sind. Für die meisten regulären Ausdrücke würde ich auf dieser Website zustimmen, dass die Möglichkeit, dass eine Datei übereinstimmt, klein genug ist, dass es in Ordnung ist, aber in diesem Fall denke ich selbst nicht. Der Linux-Kernel-Quellcode enthält beispielsweise Dateien mit dem Namenhtt.c
undhtt.h
. Durch Ändern ingrep -oehtt.*
wird die Anzahl der Bytes nicht erhöht, die Wahrscheinlichkeit von Problemen wird jedoch erheblich verringert.-oehtt.*
ist eine gute Möglichkeit, es zuverlässiger zu machen.PHP, 36 Bytes
Eingabe mit
https://
get_headers
25 Bytes, wenn
Location:
am Anfang nicht entfernt werden darfWenn Google den HTTP-Header ändert, ist dies eine sicherere Version
quelle
Python 2 , 43 Bytes
Hat keine Abhängigkeiten und ist derzeit kürzer als die andere Python-Antwort. Achselzucken Eingabe muss übereinstimmen
https?://goo\.gl/.*?/?
quelle
NodeJS, 60 Bytes
Die Eingabe erfolgt im Format
http://goo.gl/<id>
.quelle