Google 검색 결과 그래프


9

Google 에서 무언가를 검색 하면 페이지 상단에 다음과 같은 메시지가 편리하게 표시 About 53,000,000 results (0.22 seconds)됩니다. (물론 검색 한 내용에 따라 숫자가 변경됩니다.)

이 과제에서는 주어진 검색 구문 의 비어 있지 않은 접두사 를 모두 검색 할 때 Google이 제공 한 결과 수의 로그 ASCII 그래프 를 그리는 프로그램을 작성합니다 .

검색 구문은 서로 하나 개의 공간으로 구분 소문자의 영숫자 하나 개 이상의 스트링으로 정의한다. 정규식에서 검색어는 (?:[a-z0-9]+ )*[a-z0-9]+입니다.

그래서 im ok, r1a 2모든 검색 문구가 있지만 I'm OK, R, 1a 2,과 , 수 없습니다.

(Google에서 대소 문자 나 특수 기호를 거의 사용하지 않기 때문에 문자 제한이 적용됩니다. URL에서 영숫자가 아닌 문자를 피하는 것도 번거 롭습니다.)

투기

프로그램은 stdin 또는 명령 행에서 검색 구와 양의 부동 소수점 숫자 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

검색어 가 문서와 일치하지 않으면Results 열에 0을 입력하십시오 .

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

이 그래프는 프로그램의 최종 결과이며 출력해야하는 유일한 것입니다. stdout에 가야합니다.

채점

이것은 바이트 단위 의 가장 짧은 프로그램 승리합니다.

노트

  • 결과가 https://www.google.com 을 검색하는 것과 동일한 경우 URL 단축기 또는 기타 검색 도구 / API를 사용할 수 있습니다 .
  • 큰 따옴표는 "직접 ..."리디렉션을 배제 하는 확실한 방법아닙니다 . &nfpr=1URL에 추가 해도 항상 작동하지는 않습니다 . 이러한 부정확성에 대해 걱정하지 마십시오. About X results...팝업 메시지에 관계없이 메시지를 찾 거나 Results없는 경우 0으로 설정하십시오 .
  • 그래프의 검색 구에서 공백 위에 빈 열이 있습니다.
  • 그래프는 필요 이상으로 넓거나 크지 않아야합니다 (예 : 공백).
  • 프로그램에 웹 브라우저를 여는 것과 같은 부작용이있어 암호화 된 Google html / js 페이지를 렌더링 할 때 읽을 수 있습니다.

제로 결과 를 얻는 것이 일반적이지 않다는 것을 알고 있지만 "X 결과 ..."가 없습니다. 감지되고 0 막대로 표시되어야한다고 가정합니까?
Geobits

@Geobits 예, 0 개의 결과를 가정합니다.
Calvin 's Hobbies

답변:


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다음 정규 표현식이 일치하지 않는 경우 기본값을 찾은 다음 가로 막대로 히스토그램을 작성합니다. 결국, 나는 모든 선을 뒤집어 세로 막대 그래프를 만들기 위해 바꿉니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.