Графік результатів пошуку Google


9

Коли ви шукаєте щось у Google , він зручно надсилає повідомлення у верхній частині сторінки, в якому йдеться про щось подібне About 53,000,000 results (0.22 seconds). (Цифри змінюються залежно від того, що шукали, звичайно.)

У цьому виклику ви напишете програму, яка малює логарифмічний графік ASCII кількості результатів, наданих Google, коли шукаються всі непусті префікси даної пошукової фрази .

Пошук фраза визначається як одна або більше рядків малих буквено - цифрових символів, відокремлених одним пропуском один від одного. У Regex пошукова фраза є (?:[a-z0-9]+ )*[a-z0-9]+.

Таким чином im ok, rі 1a 2все пошукові фрази, але I'm OK, R, 1a 2і , не є.

(Обмеження щодо символів існують, оскільки Google рідко враховує регістри чи спеціальні символи. Уникнення нелітерно-цифрових символів у URL-адресах також є клопотом.)

Спец

Ваша програма повинна містити фразу пошуку та позитивне число H з плаваючою точкою або з stdin, або з командного рядка. (Ви можете припустити, що вони дійсні, і це добре, якщо вам потрібні цитати чи щось навколо пошукової фрази.)

В якості робочого прикладу припустимо, що пошукова фраза є a carі H = 0,75.

Крок 1.
Зберіть не порожні префікси пошукової фрази та поставте їх у подвійні лапки . Цитати гарантують, що буде шукано точну фразу, уникаючи перенаправлень "ви мали на увазі ..." .

Виключіть усі префікси, які закінчуються в просторі, такому як a[space].

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

Крок 2:
Шукайте кожен із цих термінів точно так, як вони відображаються, використовуючи https://www.google.com , і зазначте кількість результатів, що повертаються.

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

Якщо пошуковий термін не відповідає жодним документам , введіть 0 у Resultsстовпчик.

Крок 3:
Обчисліть y = floor(H * log10(r + 1))для кожного рядка, де r - Resultsзначення. Тут все ще 0,75.

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

Крок 4:
Впорядкуйте yкількість вертикальних смуг ( |) над останнім символом кожного котируваного пошукового терміну, використовуючи пробіли для заповнення порожніх областей, у вигляді своєрідної гістограми.

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

Цей графік є кінцевим результатом вашої програми і єдиним, що потрібно для виведення. Він повинен перейти до stdout.

Оцінка балів

Це є , тому виграє найкоротша програма в байтах .

Примітки

  • Ви можете використовувати скорочувачі URL-адрес або інші інструменти пошуку / API, якщо результати будуть такими ж, як пошук на https://www.google.com .
  • Я знаю, що подвійні лапки не є надійним способом виключити "ви мали на увазі ..." переадресації. Додавання &nfpr=1до URL-адреси також не завжди працює . Не турбуйтеся про ці неточності. Просто шукайте About X results...повідомлення незалежно від того, що з'являється, або встановіть Resultsзначення 0, якщо такого немає.
  • У пошуковій фразі на графіку є порожній стовпчик над будь-яким пробілом.
  • Графік не повинен бути ширшим або вищим, ніж потрібно (наприклад, з пробілом).
  • Це нормально, якщо у вашій програмі є такі побічні ефекти, як відкриття веб-браузера, щоб криптовані html / js сторінки Google можна було прочитати під час їх відображення.

Я знаю, що не типово отримувати нульові результати , але коли ви це робите, немає "Про х результати ...". Я припускаю, що його слід виявити і відобразити як 0 барів?
Геобіт

@Geobits Так, припустимо 0 результатів.
Захоплення Кальвіна

1
Просто ви знаєте - не забивайте google - він відповість капчу, якщо ви натиснете його занадто сильно / занадто часто, що може порушити вашу програму
SeanC

Відповіді:


4

Рубі, 316 295 байт

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

На жаль, запити просто перестали працювати над онлайн-тестером, який я використовував, тому мені потрібно ще сьогодні ввечері чи завтра пограти в цей гольф.

Пояснення: Я беру вхід через ARGV. Тоді я просто надсилаю запит на кожну підрядку, яка не закінчується в пробілі, знаходжу результати за допомогою regex (і за замовчуванням, 0якщо регулярний вираз не збігається), а потім будую гістограму з горизонтальними смугами. Наприкінці я перевертаю всі рядки і переміщую їх для створення вертикальної гістограми.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.