Google लिंक को अनशॉर्ट करें


10

चुनौती

एक मान्य goo.glशॉर्ट लिंक को देखते हुए , मूल URL का उत्पादन करें।

उदाहरण

goo.gl/qIwi3Nकुछ देना होगा https://codegolf.stackexchange.com/। इनपुट के लिए, आप https?://शुरुआत में ही चुनाव कर सकते हैं, आप www.से पहले के लिए चुन सकते हैं goo.gl, और goo.glयदि आप केवल URL के अंत चाहते हैं तो आप छुटकारा पाने के लिए भी चुन सकते हैं । इनपुट और आउटपुट के लिए अंत में एक स्लैश वैकल्पिक है। तो, आपका इनपुट regex से मेल खाएगा (https?://)?(www\.)?(goo\.gl/)?[A-Za-z0-9]+/?। आउटपुट के लिए, आप यह चुन सकते हैं कि आउटपुट https?://करना है या नहीं, आउटपुट करना है या नहीं www.और ट्रेलिंग स्लैश का उत्पादन करना है या नहीं। हालाँकि, आपको अपने I / O स्वरूपण के अनुरूप होना चाहिए

मैं कहूंगा कि आपको आउटपुट के लिए httpsबनाम http(लेकिन आप इनपुट के अनुरूप होना चाहिए) के अनुरूप नहीं होना चाहिए, जब तक आप पूरे https?://भाग को शामिल करते हैं या नहीं ।

परीक्षण के मामलों

ये इनपुट में नहीं https://, नहीं www., कोई अनुगामी स्लैश के साथ लिखे गए हैं ; हाँ https://, नहीं www., और हाँ अनुरेखण स्लैश आउटपुट में।

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

मान्यताओं

  • आप मान सकते हैं कि छोटा किया गया लिंक किसी अन्य छोटे लिंक की ओर इशारा नहीं करेगा और यह कि गंतव्य साइट 2xxया 4xx(कोई पुनर्निर्देशन) की स्थिति कोड वापस कर देगी ।

आप यहाँ जा सकते हैं और इसका उलटा संचालन लागू करने के लिए एक URL दर्ज कर सकते हैं: https://goo.gl/


@ हेलकाहोम्बा तय
पावेल

3
एक प्रमुख उत्पादन के लिए मौसम या नॉट www.फर्क पड़ता है। यह ज्यादातर मामलों में एक ही सर्वर है जिसे यह संदर्भित करता है। उदाहरण के लिए प्रयास करें http://pks.mpg.deऔर http://www.pks.mpg.de। पहले को हल नहीं किया जा सकता है, जबकि बाद वाला कर सकता है।
गोलेर रामबलर १३'१

@StephenS किया, सुझाव के लिए धन्यवाद।
हाइपरएन्यूट्रीनो

जवाबों:


11

CJam , 7 बाइट्स

lg'"/5=

परीक्षण चालन

$ alias cjam
alias cjam='java -jar ~/.local/share/cjam-0.6.5.jar'
$ cjam unshorten.cjam <<< goo.gl/HaE8Au; echo
https://codegolf.stackexchange.com/
$ cjam unshorten.cjam <<< goo.gl/IfZMwe; echo
https://stackoverflow.com/
$ cjam unshorten.cjam <<< goo.gl/JUdmxL; echo
https://chat.stackexchange.com/rooms/240/the-nineteenth-byte

यह काम किस प्रकार करता है

lgएसटीडीआईएन से एक पंक्ति पढ़ता है और उस URL पर GET अनुरोध करता है। छोटा URL 301 रीडायरेक्ट जारी करता है, जिसका CJam अनुसरण नहीं करता है। पहले परीक्षण मामले के लिए, यह धक्का देता है

<HTML>
<HEAD>
<TITLE>Moved Permanently</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Moved Permanently</H1>
The document has moved <A HREF="https://codegolf.stackexchange.com/">here</A>.
</BODY>
</HTML>

ढेर पर। अंत में, '"/दोहरे उद्धरण चिह्नों में विभाजित होता है, और 5=छठा हिस्सा मिलता है। आउटपुट निहित है।


1
मैंने 05AB1E और पायथ की कोशिश की है, वे दोनों 301 का अनुसरण करते हैं :(
आउटगॉल्फ

3

पायथन 2 + अनुरोध, 44 बाइट्स

from requests import*
print get(input()).url

requests.get(URL)निर्दिष्ट URL के लिए GET अनुरोध जारी करता है। प्रतिक्रिया ऑब्जेक्ट के urlफ़ील्ड में अंतिम URL होता है, किसी भी पुनर्निर्देश के बाद। http://इनपुट के लिए एक प्रोटोकॉल (जैसे ) आवश्यक है, और इनपुट उद्धरणों में होने की उम्मीद है।


1
requestsबिल्ट-इन नहीं है, इसलिए इसे भाषा हेडर में जोड़ना होगा।
नंबरमैन

1
एक का प्रयोग करें lambda-3 बाइट्स के लिए अभिव्यक्ति
OVS

1
@numbermaniac Whoops, आप सही कह रहे हैं, मुझे अनुरोधों की इतनी आदत है कि मैं यह भूल जाता हूं कि यह थर्ड पार्टी लिब है।
मेगो

2

बैश , 28 24 बाइट्स

curl -I $1|grep -oehtt.*

आउटपुट एक विंडोज-स्टाइल न्यूलाइन के साथ समाप्त होता है, जो मुझे लगता है कि स्वीकार्य है।

परीक्षण चालन

$ bash unshorten.sh 2>&- goo.gl/HaE8Au
https://codegolf.stackexchange.com/
$ bash unshorten.sh 2>&- goo.gl/IfZMwe
https://stackoverflow.com/
$ bash unshorten.sh 2>&- goo.gl/JUdmxL
https://chat.stackexchange.com/rooms/240/the-nineteenth-byte

यह काम किस प्रकार करता है

curl -Iएक HEAD अनुरोध भेजता है, इसलिए यह निर्दिष्ट URL के केवल HTTP हेडर प्राप्त करता है। पहले परीक्षण मामले के लिए, यह प्रिंट करता है

HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Date: Sat, 13 May 2017 05:51:48 GMT
Location: https://codegolf.stackexchange.com/
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Transfer-Encoding: chunked
Accept-Ranges: none
Vary: Accept-Encoding

या इसी के समान। उत्पादन के लिए पहुंचाया जाता है grep -oehtt.*, जो दिखाता है केवल भागों है कि निर्दिष्ट रेगुलर एक्सप्रेशन से मेल, यानी, स्ट्रिंग HTT लाइन के अंत तक पात्रों में से किसी भी राशि के द्वारा पीछा किया।


यह कैसे काम करता है?
अर्जुन

मैंने एक स्पष्टीकरण जोड़ा है।
डेनिस

हे, अच्छी तरह से समझाया! इस तरह मैं जल्द ही बैश सीख

यह वाइल्डकार्ड का विस्तार करता है htt.*इसलिए यह माना जाता है कि वर्तमान निर्देशिका में मौजूद कोई भी फाइल मेल नहीं खाती है। अधिकांश रेगेक्स के लिए, मैं इस साइट पर सहमत होना चाहता हूं कि किसी फ़ाइल के मिलान की संभावना काफी छोटी है कि यह ठीक है, लेकिन इस मामले में, मुझे ऐसा नहीं लगता, मैं स्वयं। लिनक्स कर्नेल स्रोत कोड में उदाहरण के लिए नाम htt.cऔर htt.h, फाइलें शामिल हैं । इसे बदलने grep -oehtt.*से बाइट की गिनती नहीं बढ़ती है, लेकिन इससे समस्याएँ पैदा होने की संभावना काफी कम हो जाती है।
HVD

@hvd मैं आमतौर पर मानता हूं कि कार्यक्रम अन्यथा खाली निर्देशिका में चलाया जाता है, लेकिन -oehtt.*इसे और अधिक विश्वसनीय बनाने का एक अच्छा तरीका है।
डेनिस

2

PHP, 36 बाइट्स

के साथ इनपुट करें https://

<?=substr(get_headers($argn)[7],10);

get_headers

25 बाइट्स अगर Location: शुरुआत में नहीं हटाया जाना चाहिए

<?=get_headers($argn)[7];

यदि Google HTTP हैडर को बदलता है तो यह एक सुरक्षित संस्करण है

preg_match("#Location: \K.*#",join("\n",get_headers($argn)),$t);echo$t[0];

1

अजगर २ , 43 बाइट्स

कोई निर्भरता नहीं है और वर्तमान में अन्य पायथन उत्तर की तुलना में कम है। श्रग इनपुट से मेल खाना चाहिएhttps?://goo\.gl/.*?/?

lambda s:urlopen(s).url
from urllib import*

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.