Liên kết Google không liên kết


10

Thử thách

Đưa ra một goo.glliên kết rút gọn hợp lệ , xuất URL ban đầu.

Thí dụ

goo.gl/qIwi3Nsẽ cho một cái gì đó như /codegolf//. Đối với đầu vào, bạn có thể chọn có https?://từ đầu, bạn có thể chọn có www.trước goo.glvà bạn cũng có thể chọn thoát khỏi goo.glnếu bạn chỉ muốn kết thúc URL. Một dấu gạch chéo ở cuối là tùy chọn cho đầu vào và đầu ra. Vì vậy, đầu vào của bạn sẽ kết thúc phù hợp với regex (https?://)?(www\.)?(goo\.gl/)?[A-Za-z0-9]+/?. Đối với đầu ra, bạn có thể chọn đầu ra https?://hay không, có đầu ra hay không www.và có đầu ra dấu gạch chéo hay không. Tuy nhiên, bạn phải phù hợp với định dạng I / O của bạn .

Tôi sẽ nói rằng bạn không nhất quán với httpsso httpvới đầu ra (nhưng bạn phải nhất quán với đầu vào), miễn là bạn phù hợp với việc bạn có bao gồm toàn bộ https?://phần hay không .

Các trường hợp thử nghiệm

Chúng được viết không https://, không www., không dấu gạch chéo trong đầu vào; có https://, không www., và có dấu gạch chéo trong đầu ra.

input -> output
goo.gl/HaE8Au -> /codegolf//
goo.gl/IfZMwe -> /programming//
goo.gl/JUdmxL -> https://chat.stackexchange.com/rooms/240/the-nineteenth-byte

Giả định

  • Bạn có thể cho rằng liên kết rút gọn sẽ không trỏ đến một liên kết rút gọn khác và trang đích sẽ trả về mã trạng thái 2xxhoặc 4xx(không chuyển hướng).

Bạn có thể vào đây và nhập URL để áp dụng thao tác nghịch đảo này: https://goo.gl/


@HelkaHomba đã sửa
Pavel

3
Thời tiết hoặc notr để đầu ra hàng đầu www.làm cho một sự khác biệt. Nó chỉ là trong hầu hết các trường hợp cùng một máy chủ mà nó đề cập đến. Hãy thử ví dụ http://pks.mpg.dehttp://www.pks.mpg.de. Cái đầu tiên không thể được giải quyết, trong khi cái sau có thể.
Gole Ramblar

@StephenS Xong, cảm ơn vì lời đề nghị.
HyperNeutrino

Câu trả lời:


11

CJam , 7 byte

lg'"/5=

Chạy thử nghiệm

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

Làm thế nào nó hoạt động

lgđọc một dòng từ STDIN và thực hiện một yêu cầu GET cho URL đó. URL rút ngắn phát hành chuyển hướng 301, mà CJam không tuân theo. Đối với trường hợp thử nghiệm đầu tiên, điều này đẩy

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

trên ngăn xếp. Cuối cùng, '"/tách ra ở dấu ngoặc kép và 5=nhận được đoạn thứ sáu. Đầu ra là ẩn.


1
Tôi đã thử 05AB1E và Pyth, cả hai đều theo 301 :(
Erik the Outgolfer

3

Yêu cầu Python 2 +, 44 byte

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

requests.get(URL)đưa ra yêu cầu NHẬN vào URL được chỉ định. Trường của đối tượng phản hồi urlchứa URL cuối cùng, sau bất kỳ chuyển hướng nào. Một giao thức (ví dụ http://) là bắt buộc cho đầu vào, và đầu vào dự kiến ​​sẽ được trích dẫn.


1
requestskhông được tích hợp sẵn, do đó cần phải được thêm vào tiêu đề ngôn ngữ.
numbermaniac

1
Sử dụng lambdabiểu thức cho -3 byte
ovs

1
@numbermaniac Rất tiếc, bạn nói đúng, tôi đã quá quen với những yêu cầu mà tôi quên đó là lib của bên thứ ba.
Mego

2

Bash , 28 24 byte

curl -I $1|grep -oehtt.*

Đầu ra kết thúc với một dòng mới theo kiểu Windows, mà tôi cho là có thể chấp nhận được.

Chạy thử nghiệm

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

Làm thế nào nó hoạt động

curl -Igửi một yêu cầu CHÍNH, vì vậy nó chỉ tìm nạp các tiêu đề HTTP của URL được chỉ định. Đối với trường hợp thử nghiệm đầu tiên, nó in

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: /codegolf//
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

hoặc tương tự. Đầu ra được dẫn tới grep -oehtt.*, chỉ hiển thị các phần khớp với biểu thức chính quy định, nghĩa là chuỗi ome theo sau bởi bất kỳ số lượng ký tự nào cho đến cuối dòng.


Cái này hoạt động ra sao?
Arjun

Tôi đã thêm một lời giải thích.
Dennis

Hehe, giải thích tốt! Theo cách đó tôi sẽ học bash sớm :-D

Điều này thực hiện mở rộng ký tự đại diện trên htt.*vì vậy giả sử không có tệp nào khớp với nó tồn tại trong thư mục hiện tại. Đối với hầu hết các regex, tôi đồng ý trên trang web này rằng khả năng tệp được khớp là đủ nhỏ để ổn, nhưng trong trường hợp này, tôi không nghĩ vậy, bản thân tôi cũng vậy. Mã nguồn nhân Linux bao gồm các tệp có tên htt.chtt.h, ví dụ. Thay đổi nó thành grep -oehtt.*không làm tăng số byte, nhưng làm cho nó ít có khả năng gây ra vấn đề hơn.
hvd

@hvd Tôi thường cho rằng chương trình được chạy trong một thư mục trống, nhưng -oehtt.*là một cách hay để làm cho nó đáng tin cậy hơn.
Dennis

2

PHP, 36 byte

Nhập liệu với https://

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

get_headers

25 byte nếu Location: lúc đầu không được xóa

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

nếu Google thay đổi Tiêu đề HTTP thì đây là phiên bản an toàn hơn

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

1

Python 2 , 43 byte

Không có phụ thuộc và hiện ngắn hơn câu trả lời Python khác. đầu vào nhún phải khớphttps?://goo\.gl/.*?/?

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

0

NodeJS, 60 byte

u=>require("http").get(u,r=>console.log(r.headers.location))

Đầu vào là ở định dạng http://goo.gl/<id>.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.