График результатов поиска 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 либо из стандартного ввода, либо из командной строки. (Вы можете предположить, что они действительны, и это хорошо, если вам нужны кавычки или что-то вокруг поисковой фразы.)

В качестве рабочего примера предположим, что искомая фраза имеет значение a carH = 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значение. H все еще 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

Этот график - конечный результат вашей программы и единственное, что нужно для вывода. Это должно пойти в стандартный вывод.

счет

Это , так что самая короткая программа в байтах побеждает.

Ноты

  • Вы можете использовать сокращатели URL или другие инструменты поиска / API, если результаты будут такими же, как при поиске на https://www.google.com .
  • Я знаю, что двойные кавычки - не верный способ исключить перенаправления типа «ты имел в виду…». Добавление &nfpr=1к URL тоже не всегда работает . Не беспокойтесь об этих неточностях. Просто найдите About X results...сообщение независимо от того, что всплывает, или установите Results0, если его нет.
  • Пустой столбец над любым пробелом в поисковой фразе на графике.
  • График не должен быть шире или выше, чем нужно (например, с пробелами).
  • Это нормально, если у вашей программы есть побочные эффекты, такие как открытие веб-браузера, поэтому загадочные html / js-страницы Google можно читать по мере их отображения.

Я знаю, что это не типично, чтобы получить нулевой результат , но когда вы делаете, нет "О х результатов ...". Я предполагаю, что должно быть обнаружено и показано как 0 баров?
Geobits

@ 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. Затем я просто отправляю запрос для каждой подстроки, которая не заканчивается пробелом, нахожу результаты с помощью регулярного выражения (по умолчанию - 0если регулярное выражение не совпадает), а затем строю гистограмму с горизонтальными полосами. В конце я переворачиваю все линии и переставляю их для создания вертикальной гистограммы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.