Code Golf: Phân tích kết quả google


16

Khi bạn tìm kiếm thứ gì đó trên google, trong trang kết quả, người dùng có thể thấy các liên kết màu xanh lá cây, cho trang kết quả đầu tiên.

Ở dạng ngắn nhất có thể, tính bằng byte, sử dụng bất kỳ ngôn ngữ nào, sẽ hiển thị các liên kết đó thành thiết bị xuất chuẩn dưới dạng danh sách. Dưới đây là một ví dụ, cho các kết quả đầu tiên của truy vấn trao đổi ngăn xếp:

Chụp màn hình

Đầu vào :

bạn chọn: URL ( www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8) hoặc chỉstackexchange

Đầu ra:

french.stackexchange.com/, stackoverflow.com/, fr.wikipedia.org/wiki/Stack_Exchange_Network, en.wikipedia.org/wiki/Stack_Exchange,...

Quy tắc :

  • Bạn có thể sử dụng các công cụ rút ngắn URL hoặc các công cụ tìm kiếm / API khác miễn là kết quả sẽ giống như tìm kiếm https://www.google.com .

  • Sẽ ổn nếu chương trình của bạn có tác dụng phụ như mở trình duyệt web để các trang Google html / js khó hiểu có thể được đọc khi chúng được hiển thị.

  • Bạn có thể sử dụng plugin trình duyệt, mô tả người dùng ...

  • Nếu bạn không thể sử dụng thiết bị xuất chuẩn, hãy in nó ra màn hình, vd. một cảnh báo bật lên hoặc javascript!

  • Bạn không cần kết thúc / hoặc http (s) bắt đầu: //

  • Bạn không nên hiển thị bất kỳ liên kết khác

  • Mã ngắn nhất sẽ thắng!

  • Chúc may mắn !

EDIT: Golf này kết thúc vào 07/08/15.


Vì bạn đang sử dụng google.fr, chúng tôi có phải sử dụng nó không?
Beta Decay

Bạn có thể sử dụng bất kỳ google nào bạn muốn. Tôi là người Pháp, vì vậy tôi đã sử dụng .fr, nhưng bạn có thể sử dụng .com hoặc
Mọi thứ

Và rút ngắn các URL như vậy gogle.delà tốt?
Beta Decay

Bạn có thể sử dụng các công cụ rút ngắn URL hoặc các công cụ tìm kiếm / API khác miễn là kết quả sẽ giống như tìm kiếm google.com , vì vậy, có
WayToDoor

6
Trong trường hợp bạn bị cám dỗ: hãy nhớ rằng bạn không thể phân tích HTML bằng regex
Luis Mendo

Câu trả lời:


17

Bash + grep + lynx, 38

Vì chúng tôi có thể mở trình duyệt web, sau đó tôi sẽ sử dụng lynx:

lynx -dump $1|grep -Po '(?<=d:)[^&]+'

(Cảm ơn @manatwork đã grepsử dụng thay vì sed)

Chúng tôi chuyển toàn bộ URL dưới dạng tham số:

$ ./gr.sh "www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8"
http://stackexchange.com/
https://en.wikipedia.org/wiki/Stack_Exchange
https://twitter.com/stackexchange
https://play.google.com/store/apps/details?id=com.stackexchange.marvin
https://github.com/StackExchange/StackExchange.Redis
https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Basics.md
https://www.crunchbase.com/organization/stack-exchange
$ 

Cung cấp danh sách tương tự như:

nhập mô tả hình ảnh ở đây


Thật tiện dụng: D
Beta Decay

3
sedtốt sedDài. Hãy thử GNU grep:grep -Po '(?<=d:)[^&]+'
manatwork

@manatwork Vâng, tất nhiên - cảm ơn!
Chấn thương kỹ thuật số

1
Là tiêu đề câu trả lời sao chép? ;) Không có bash, lynxhoặcsed (và bây giờ grep) là một phần của coreutils.
manatwork

3
Tôi tin rằng bạn cũng có thể làm: lynx -dump $1|grep -Po 'd:\K[^&]+' (chưa được kiểm tra)
Jarmex

4

Ruby, 91 77 byte

require'open-uri';open(gets).read.scan(/ed:(.*?)\+/){|x|puts URI.decode x[0]}

Sẽ ngắn hơn nếu không có tất cả các requires. ARGH !!! EDIT : Vì vậy, hóa ra, tôi không cần yêu cầu thứ hai! Cảm ơn @manatwork đã chỉ ra điều đó.

Phiên bản cũ hơn (với vô dụng require):

require'open-uri';require 'uri';open(gets).read.scan(/ed:(.*?)\+/){|x|puts URI.decode x[0]}

Các quy tắc cho phép sử dụng các tùy chọn dòng lệnh miễn là bạn cũng đếm chúng: pastebin.com/PnpjnXji (Nếu bạn cảm thấy đây là kiểu không công bằng, vui lòng chỉ sử dụng thay đổi trong khối mã.)
manatwork

Bạn có chắc chắn cần phải rõ ràng require'uri'? Trong 2.1.2, tôi sử dụng URImô-đun trở nên khả dụng sau khi yêu cầu mở uri.
manatwork

@manatwork Cảm ơn bạn! Cập nhật.
kirbyfan64sos

Chỉ vì sự tò mò của tôi: bất kỳ lý do để không thay đổi khối mã như trong thay thế pastebin của tôi? (Tất nhiên, tôi tò mò về lý do kỹ thuật, không phải lý do cá nhân, nếu điều đó cản trở bạn.)
manatwork

@manatwork Tôi cần, nhưng tôi quá lười để tìm ra số byte vào lúc này. :)
kirbyfan64sos

4

Ngôn ngữ Wolfram (Mathicala), 135

StringJoin/@(Cases[URLExecute["www.google.com/search",{"q"->#},"XMLObject"],XMLElement["cite",_,l_]:>l,-1]/.XMLElement["b",_,{s_}]:>s)&

dễ đọc hơn:

StringJoin/@(Cases[
    URLExecute["www.google.com/search",{"q"->#},"XMLObject"], 
    XMLElement["cite",_,l_]:>l,-1] /. 
    XMLElement["b",_,{s_}]:>s)

Là không gian thực sự cần thiết? Không có chúng, tôi nhận được 136 byte .
kirbyfan64sos

không cần thiết chút nào ... tôi thực sự nên thắt chặt điều này ..
chuyển

Bạn có thể làm một cái gì đó như câu trả lời này để rút ngắn điều này?
Chấn thương kỹ thuật số

3

Python 3, 141 byte

Không ở đâu gần câu trả lời của Digital Trauma, nhưng thật vui khi tìm ra regex: D

import re
print('\n'.join(map(lambda x:x[3:],re.findall('te>http[s]?://\w+\.[a-z]+[](/a-z\.)?]+',__import__("requests").get(input()).text))))

Đối với đầu vào http://www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8chương trình đầu ra:

https://en.wikipedia.org/wiki/
https://twitter.com/
https://play.google.com/store/apps/details?id...
https://www.crunchbase.com/organization/
https://www.facebook.com/
https://github.com/

Thực hiện mẹo của grc


Bạn có thực sự cần sử dụng __import__?
ckjbgames

Ngoài ra, sử dụng một [x for x in spam]cấu trúc thay vì map. Điều đó sẽ giúp bạn tiết kiệm một số byte tốt.
ckjbgames

2

Yếu tố, 31 byte

Có một thư viện cho việc này.

[ google-search [ url>> ] map ]
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.