Vẽ biểu đồ kết quả tìm kiếm của Google


9

Khi bạn tìm kiếm một cái gì đó trên Google , nó sẽ thuận tiện đưa ra một thông báo ở gần đầu trang nói điều gì đó như thế nào About 53,000,000 results (0.22 seconds). (Các con số thay đổi tùy thuộc vào những gì đã được tìm kiếm tất nhiên.)

Trong thử thách này, bạn sẽ viết một chương trình vẽ biểu đồ ASCII logarit về số lượng kết quả do Google đưa ra khi tất cả các tiền tố không trống của cụm từ tìm kiếm đã cho được tìm kiếm.

Một tìm kiếm cụm từ được định nghĩa là một hoặc nhiều chuỗi ký tự chữ và chữ thường, cách nhau bằng một không gian lẫn nhau. Trong Regex một cụm từ tìm kiếm là (?:[a-z0-9]+ )*[a-z0-9]+.

Vì vậy im ok, r1a 2tất cả đều tìm kiếm cụm từ, nhưng I'm OK, R, 1a 2, và , thì không.

(Các hạn chế về ký tự được đặt ra vì Google hiếm khi đưa trường hợp hoặc ký hiệu đặc biệt vào tài khoản. Thoát các ký tự không phải là chữ và số trong URL cũng là một rắc rối.)

Thông số kỹ thuật

Chương trình của bạn phải sử dụng cụm từ tìm kiếm và số dấu phẩy động dương từ stdin hoặc dòng lệnh. (Bạn có thể cho rằng chúng hợp lệ và sẽ ổn nếu bạn cần trích dẫn hoặc nội dung nào đó xung quanh cụm từ tìm kiếm.)

Như một ví dụ hoạt động, giả sử cụm từ tìm kiếm là a carvà H = 0,75.

Bước 1:
Tập hợp các tiền tố không trống của cụm từ tìm kiếm của bạn và đặt chúng trong dấu ngoặc kép . Các trích dẫn đảm bảo rằng cụm từ chính xác sẽ được tìm kiếm, tránh mọi chuyển hướng 'ý bạn là ...' .

Loại trừ tất cả các tiền tố kết thúc trong một không gian như a[space].

Prefixes
"a"
"a c"
"a ca"
"a car"

Bước 2:
Tìm kiếm từng thuật ngữ chính xác như chúng xuất hiện bằng https://www.google.com và lưu ý số lượng kết quả trả về.

Search Term    Message                                       Results
"a"            About 6,950,000,000 results (0.27 seconds)    6950000000
"a c"          About 861,000,000 results (0.27 seconds)      861000000 
"a ca"         About 2,990,000 results (0.30 seconds)        2990000
"a car"        About 53,900,000 results (0.39 seconds)       53900000

Nếu thuật ngữ tìm kiếm không khớp với bất kỳ tài liệu nào , hãy đặt 0 vào Resultscột.

Bước 3:
Tính toán y = floor(H * log10(r + 1))cho mỗi hàng, trong đó r là Resultsgiá trị. H vẫn còn 0,75 ở đây.

Search Term    Results       y
"a"            6950000000    7
"a c"          861000000     6
"a ca"         2990000       4
"a car"        53900000      5

Bước 4:
Sắp xếp ysố lượng thanh dọc ( |) phía trên ký tự cuối cùng của mỗi cụm từ tìm kiếm không được trích dẫn, sử dụng khoảng trắng để điền vào các vùng trống, trong một loại biểu đồ thanh.

|
| |
| | |
| |||
| |||
| |||
| |||
a car

Biểu đồ này là kết quả cuối cùng của chương trình của bạn và là thứ duy nhất nó cần để xuất ra. Nó nên đi đến stdout.

Chấm điểm

Đây là , vì vậy chương trình ngắn nhất tính bằng byte sẽ thắng.

Ghi chú

  • 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 .
  • Tôi biết rằng trích dẫn kép không phải là một cách chắc chắn để loại trừ các chuyển hướng "ý bạn là ...". Thêm &nfpr=1vào URL không phải lúc nào cũng hoạt động . Đừng lo lắng về những điểm không chính xác này. Chỉ cần tìm About X results...tin nhắn bất kể cái gì bật lên, hoặc đặt Resultsthành 0 nếu không có.
  • Có một cột trống phía trên bất kỳ khoảng trắng nào trong cụm từ tìm kiếm trong biểu đồ.
  • Biểu đồ không được rộng hơn hoặc cao hơn mức cần thiết (ví dụ với khoảng trắng).
  • 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ị.

Tôi biết đó không phải là điển hình để có kết quả bằng 0 , nhưng khi bạn thực hiện thì không có "Giới thiệu về kết quả x ...". Tôi giả sử rằng nên được phát hiện và hiển thị là 0 thanh?
Geobits

@Geobits Có, giả sử 0 kết quả.
Sở thích của Calvin

1
Chỉ để bạn biết - đừng ham google - nó sẽ phản hồi bằng captcha nếu bạn nhấn quá mạnh / quá thường xuyên, điều này có thể phá vỡ chương trình của bạn
SeanC

Câu trả lời:


4

Ruby, 316 295 byte

require 'open-uri'
s,h=*$*
r=[]
s.size.times{|i|r<<(s[i]==' '?'':?|*(h.to_f*Math.log10((URI.parse("http://google.com/search?q=#{URI::encode ?"+s[0..i]+?"}").read[/About [\d,]+ results/]||?0).gsub(/\D/,'').to_i+1)).floor)+s[i]}
puts r.map{|l|l.rjust(r.map(&:size).max).chars}.transpose.map &:join

Thật không may, các yêu cầu chỉ dừng hoạt động trên trình kiểm tra trực tuyến mà tôi đang sử dụng, vì vậy tôi cần phải đánh golf này xuống tối nay hoặc ngày mai.

Giải thích: Tôi đang lấy đầu vào qua ARGV. Sau đó, tôi chỉ gửi yêu cầu cho mỗi chuỗi con không kết thúc trong một khoảng trắng, tìm kết quả qua regex (và mặc định 0nếu regex không khớp), sau đó xây dựng biểu đồ với các thanh ngang. Cuối cùng, tôi đảo ngược tất cả các dòng và hoán vị chúng để tạo ra biểu đồ dọc.

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.