Grafik Hasil Pencarian Google

9

Ketika Anda mencari sesuatu di Google , itu dengan mudah memberikan pesan di dekat bagian atas halaman mengatakan sesuatu seperti About 53,000,000 results (0.22 seconds). (Angka-angka berubah tergantung pada apa yang dicari tentu saja.)

Dalam tantangan ini, Anda akan menulis sebuah program yang menggambar grafik ASCII logaritmik dari jumlah hasil yang diberikan oleh Google ketika semua awalan yang tidak kosong dari frasa pencarian tertentu dicari.

Sebuah pencarian frase didefinisikan sebagai satu atau lebih string karakter alfanumerik huruf kecil, dipisahkan oleh satu spasi dari satu sama lain. Di Regex, frase pencarian adalah (?:[a-z0-9]+ )*[a-z0-9]+.

Jadi im ok, r, dan 1a 2semua pencarian frase, tapi I'm OK, R, 1a 2, dan , tidak.

(Pembatasan karakter diterapkan karena Google jarang mempertimbangkan huruf besar atau simbol khusus. Melarikan karakter non-alfanumerik di URL juga merepotkan.)

Spec

Program Anda harus menggunakan frasa pencarian dan angka floating point positif H baik dari stdin atau baris perintah. (Anda dapat menganggapnya valid dan sah-sah saja jika Anda memerlukan tanda kutip atau sesuatu di sekitar frasa pencarian.)

Sebagai contoh yang berfungsi mari kita asumsikan frasa pencariannya adalah a cardan H = 0,75.

Langkah 1:
Kumpulkan awalan yang tidak kosong dari frase pencarian Anda, dan letakkan dalam tanda kutip ganda . Kutipan memastikan bahwa frasa yang tepat akan dicari, menghindari pengalihan 'apakah maksud Anda ...' .

Kecualikan semua awalan yang berakhir dalam ruang seperti a[space].

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

Langkah 2:
Cari setiap istilah ini persis seperti yang muncul menggunakan https://www.google.com , dan perhatikan jumlah hasil yang dikembalikan.

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

Jika istilah pencarian tidak cocok dengan dokumen apa pun , masukkan 0 di Resultskolom.

Langkah 3:
Hitung y = floor(H * log10(r + 1))untuk setiap baris, di mana r adalah Resultsnilainya. H masih 0,75 di sini.

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

Langkah 4:
Atur yjumlah bilah vertikal ( |) di atas karakter terakhir dari setiap istilah pencarian yang tidak dikutip, menggunakan spasi untuk mengisi area kosong, dalam semacam grafik batang.

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

Grafik ini adalah hasil akhir dari program Anda dan satu-satunya hal yang perlu dihasilkan. Itu harus pergi ke stdout.

Mencetak gol

Ini adalah , jadi program terpendek dalam byte menang.

Catatan

  • Anda dapat menggunakan penyingkat URL atau alat pencarian / API lainnya asalkan hasilnya akan sama dengan pencarian https://www.google.com .
  • Saya tahu bahwa tanda kutip ganda bukanlah cara yang pasti untuk mengecualikan pengalihan "maksud Anda ...". Menambahkan &nfpr=1ke URL juga tidak selalu berhasil . Jangan khawatir tentang ketidakakuratan ini. Carilah About X results...pesan apa pun yang muncul, atau atur Resultske 0 jika tidak ada.
  • Ada kolom kosong di atas spasi apa pun dalam frasa pencarian dalam grafik.
  • Grafik tidak boleh lebih lebar atau lebih tinggi dari yang seharusnya (misalnya dengan spasi putih).
  • Tidak apa-apa jika program Anda memiliki efek samping seperti membuka peramban web sehingga laman html / js Google yang samar dapat dibaca saat dirender.
Hobi Calvin
sumber
Saya tahu itu tidak biasa untuk mendapatkan hasil nol , tetapi ketika Anda melakukannya tidak ada "Tentang hasil x ...". Saya berasumsi bahwa harus terdeteksi dan ditampilkan sebagai 0 bar?
Geobits
@ Getobits Ya, anggap 0 hasil.
Hobi Calvin
1
Asal tahu saja - jangan palu google - itu akan merespon dengan captcha jika Anda
menekannya

Jawaban:

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

Sayangnya, permintaan hanya berhenti bekerja pada tester online yang saya gunakan, jadi saya perlu golf ini lebih lanjut malam ini atau besok.

Penjelasan: Saya mengambil input melalui ARGV. Lalu, saya hanya mengirim permintaan untuk setiap substring yang tidak berakhir di spasi, cari hasilnya melalui regex (dan default 0jika regex tidak cocok), lalu buat histogram dengan bilah horizontal. Pada akhirnya, saya membalik semua garis dan memindahkannya untuk membuat histogram vertikal.

Martin Ender
sumber