구글 자동 완성 재미


16

귀하의 임무는 입력 문자열이 주어진 경우 해당 검색에 대한 첫 번째 Google 자동 완성 결과를 출력하는 프로그램을 만드는 것입니다. 입 / 출력 형식은 사용자에게 달려 있습니다.

규칙

  1. 프로그램은 1 개의 입력과 문자열을 가져 와서 Google 자동 완성 / 자동 완성 제안 결과를 출력해야합니다. 입 / 출력 형식은 사용자에게 달려 있습니다. I / O 형식이 무엇인지 언급하십시오.
  2. 분명히 인터넷에 액세스 할 수 있습니다.
  3. URL 단축기 (bit.ly, TinyURL 등)는 엄격히 허용되지 않습니다 . http://suggestqueries.google.com/complete/search?client=your_browser&q=your_query 또는 http://google.com/complete/search?client=your_browser&q=your_query URL에서 자동 완성 결과를 가져와야합니다 . 에 대한 브라우저 이름 (또는 해당 사항에 대한 문자열)을 가정 할 수 있습니다 client. 에서 내가 쓴 프로그램 , 나는 크롬을 가정합니다. 모든 브라우저 이름 또는 문자열이 작동해야합니다. http://suggestqueries.google.com/complete/search 변형을 사용하는 한 웹 페이지에 옵션을 전달할 수 있습니다 .
  4. 프로그램 작동 방식에 대한 설명을 제공해주십시오. 필수는 아니지만 강력히 권고합니다.
  5. 모든 표준 허점은 엄격히 금지되어 있습니다.

테스트 사례

이 내용은 지속적으로 변경되므로 최신 소식이 아닌 경우이 게시물을 수정하십시오.

'how to'
  => 'how to make slime'
'code golf'
  => 'code golf languages'
'you'
  => 'youtube'
'g'
  => 'google' (why would you google 'google'?)

이것은 이므로 가장 짧은 코드가 이기고 최고의 프로그래머가 번영 할 수 있습니다 ...


3
공정하게하기 위해 고객 이름을 표준화하겠습니다
Beta Decay

7
왜 엄격한 URL입니까? URL이 짧지 않고 suggestqueries.google.com을 사용하는 한 아무런 문제가 없습니다.
Dennis

특히를 사용할 수 있으면 output=toolbar클라이언트를 전혀 지정할 필요가 없습니다.
Dennis

2
@ mınxomaτ 그러나 왜 https -> http(1 바이트 저장), 제거 www.(4 바이트 저장), google.com -> google.us(1 바이트 저장) 또는 심지어 google.com -> g.cn6 바이트 저장; 왜 이것이 여전히 작동하는지 잘 모르겠지만 여전히 20170424에서 작동하는 것 같습니다)
tsh

3
사용자와 지역마다 다른 제안을 검색하지 않습니까? 표준 테스트 사례가 실제로 효과가 있다고 생각하지 않습니다.
MrZander

답변:


8

Zsh + coreutils + w3m, 88 71 68 바이트

echo `w3m "google.com/complete/search?client=gma&q=$*"|cut -d\" -f4`

Bash에서 Zsh로 전환하면 3 바이트가 절약되었습니다.

더 짧은 URL을위한 @FatalMerlin 덕분에 17 바이트를 절약했습니다!

샘플 런

$ zsh complete.sh how to
how to make slime
$ zsh complete.sh dont you
don't you forget about me
$ zsh complete.sh don\'t you
don't you worry child

3
무엇보다도 왜 "점액 만들기"가 첫 번째 제안입니까? 우리가 말할 때 얼마나 많은 사람들이 점액을 만들고 있습니까?
MildlyMilquetoast

27
실마리 없음. 그것은 재능있는 아이들 을 잠시 먹음으로써 당신의 iq를 높이는 방법 이었기 때문에 나는 이것을 개선이라고 생각할 것입니다.
Dennis

Dang, 나는 w3m을 좋아한다. 방해받지 않고 탐색 할 수 있으며 완전히 멋지다.
ckjbgames

1
@MistahFiggins 그 하나에 대한 비난 마인 크래프트.
JakeSteam

@MistahFiggins 어쩌면 그들은 모두 그냥 make(1) 슬라임 하고 싶어 .
Arminius

12

Vim 8 + unimpaired.vim , 93 89 85 70 73 71 바이트

  • tsh 덕분에 -4 바이트
  • Ian Emnace 덕분에 -2 바이트
  • FatalMerlin 덕분에 -2 바이트
  • tsh / ckjbgames 덕분에 -1 바이트
:s/ /+/g
D:e http://google.us/complete/search?client=gma&q="
d3f";D]yy

보너스로, 마지막 바이트는 그들이 당신을 윙크하는 것처럼 보입니다. ;D이것은 비 인쇄 문자를 포함하기 때문에 설명에는 대체가 포함됩니다 (그리고 URL의 사전 쿼리 문자열 부분 [url]을 간결하게하기 위해으로 대체했습니다 ).

:s/ /+/g<CR>D:e [url]?client=gma&q=<C-R>"<CR>d3f";D]yy
:s/ /+/g<CR>                                           " Replace spaces with +
            D                                          " Delete and yank result
             :e                                        " Type :e ('edit' command) and a space
                [url]?client=gma&q=                    " Type the url, except the query
                                   <C-R>"              " Paste from the default register
                                         <CR>          " Execute the command, which opens the response
                                                       "   in a new buffer
                                             d3f"      " Delete through the first three quotation marks
                                                       "   This deletes everything before the suggestion
                                                 ;     " Repeat motion; this jumps to the next \"
                                                  D    " Delete everything from there, leaving only the suggestion
                                                   ]yy " unimpaired.vim C string unescape to handle escaped '

script실행하는 vim -s script input.txt한, 적어도 macOS에서 이름이 지정된 파일로 저장 하고 실행 하면 정상적으로 작동합니다 . 를 추가하면 작동하지 않지만 -u NONE내가 .vimrc비어 있으면 제대로 작동합니다 . .vimrcURL에서 작동하도록 시스템에서 무언가를 사용한다고 가정합니다 . 그러나 V에서는 작동하지 않으므로 TIO 링크가 없습니다.

몇 가지 테스트 사례 :

'what' => 'whataburger'
'what ' => 'what time is it' (Seriously? People Google that?)

실제로 필요한 것은 공백이있는 URL을 여는 방법입니다. 로 교체 +첫번째 것은 너무 많은 바이트입니다!


1
공백은 더하기 부호로 대체해야 +합니까?
tsh

1
@tsh 당신이 맞아요! 이제 누군가 2 바이트를 절약하고 Dennis를 이길 수있는 방법을 알려주세요.
Brian McCutchon

netrw가 작동하려면filetype plugin on
tbodt

1
<Cr> "을 수행하여 삽입 / 명령 모드에서"레지스터 (기본값) "를 붙여 넣을 수 있습니다. :r [url]?client=opera&q=^R"대신에 몇 바이트를 제거 할 수 있습니다 q:ir [url]?client=opera&q=<esc>p. ^R^R함께가 아니라 <Cr>을 누를 때 전송되는 실제 바이트 이므로 1 바이트로만 계산됩니다.
Ian Emnace

1
내가하면 카운트는 바이트 내가 88이 또한 당신이 URL을 변경하여 바이트를 저장할 수 있습니다 얻을 http://google.com/complete/search?client=hp&q=your_query( client=gma=> 일반 JSON 짧은 텍스트입니다.).
FatalMerlin

7

파이썬 +는 요청 (121) (117) 103 바이트

from requests import*
lambda s:get("http://google.com/complete/search?client=gma&q="+s).json()[1][0][0]

5

자바 스크립트, 109 바이트

q=>fetch("//suggestqueries.google.com/complete/search?client=chrome&q="+q).then(r=>r.json()).then(r=>r[1][0])

Promise, 당신은 그것을 사랑해야하지만, 사람은 장황합니다! 이 답변은 fetch()최신 브라우저에있는 약속 기반 가져 오기 API 인을 사용합니다. 처음에는 콜백과 같은 비동기 작업에 대한 처리기를 설정하여 작동하지만 더 좋습니다. 는 .then()비동기 작업의 결과로 호출되는 함수를합니다. response 메소드를 .then(r=>r.json())사용하여 .json()텍스트 배열을 조작 가능한 변수로 변환하고 두 번째 .then()는 첫 번째 응답을 가져옵니다.

용법:

S = q=>fetch("//suggestqueries.google.com/complete/search?client=chrome&q="+q).then(r=>r.json()).then(r=>r[1][0])

S("node.js").then(console.log); // Prints the result to the debug console

2
.then(r=>r.json()).then(r=>r[1][0])-> .then(r=>r.json()[1][0])11 자 이하로 즐기십시오 ;-)
Stephan Bijzitter

Firefox 52 및 Chrome 57,이 페이지, Google 홈페이지 및 about : blank에서 시도했지만 CORS 오류가 계속 발생합니다. 성공적으로 작동하도록 했습니까?
ETHproductions

@ETHproductions 예, CORS 문제는 도메인에서 실행해야합니다, 거기에 suggestqueries.google.com
MayorMonty

@StephanBijzitter .json()는 약속을 반환합니다. 어떤 이유로 든 비동기입니다.
MayorMonty

실제로 그것은 작동합니다, 감사합니다!
ETHproductions

1

C #을 192 112 111 바이트

@TheLethalCoder 덕분에 80 바이트를 절약했습니다. 내 코드를 다시 포맷 해 주셔서 감사합니다. 주변 클래스 및 메소드 본문에서 벗어나는 것이 허용되지 않았습니다. :)

파싱에 중요하지 않으며 응답 본문 앞에 약간의 횡설수설이 있기 때문에로 대체 gma하여 다른 바이트를 저장 hp했습니다.

나는 litterally 찾기 위해 API를 짐승 - 강제 gmahp.

s=>new System.Net.WebClient().DownloadString("http://google.com/complete/search?client=hp&q="+s).Split('"')[3];

1

그루비, 122 바이트

{Eval.me(new URL("http://suggestqueries.google.com/complete/search?client=chrome&q="+it).text.split(",\\{")[0]+"]")[1][0]}

원래:

  1. 끝점에서 텍스트를 가져옵니다.

  2. 끝에 괄호가있는 부분을 제거하십시오. 이것은 유효한 구문이 아닙니다.

  3. 나머지 비트를 그루비 배열로 구문 분석하십시오.

  4. 결과 배열의 두 번째 요소를 가져옵니다.

enter image description here


1

PowerShell, 133115 바이트

([net.webclient]::new().downloadstring("http://google.com/complete/search?client=gma&q=$_")|convertfrom-json)[1][0]

샘플 런

Windows CMD 명령 행 :

powershell.exe -c "'code golf l'|%{([net.webclient]::new().downloadstring(""""http://google.com/complete/search?client=gma&q=$_"""")|convertfrom-json)[1][0]}"

PowerShell 콘솔 :

'code golf l'|%{([net.webclient]::new().downloadstring("http://google.com/complete/search?client=gma&q=$_")|convertfrom-json)[1][0]}

1

R, 111 바이트

내가 마지막으로 왔을 때부터 오랜 시간이 걸리지 만 그것을 쐈습니다.

jsonlite::fromJSON(readLines(url(paste0("http://google.com/complete/search?client=gma&q=",scan(,"")))))[[2]][1]

패키지 jsonlite를 사용하여 가져온 문자열을 readLines()목록 객체로 변환 합니다.

다음으로 두 번째 요소를 추출하십시오 (예 : 신경 쓸 필요가 없다는 경고를줍니다).

> jsonlite::fromJSON(readLines(url(paste0("http://google.com/complete/search?client=gma&q=",scan(,"")))))[[2]][1]
1: "how to"
2: 
    Read 1 item
[[1]]
[1] "how to make slime"

Warning message:
    In readLines(url(paste0("http://google.com/complete/search?client=gma&q=",  :
                                incomplete final line found on 'http://google.com/complete/search?client=gma&q=how to'

0

C #, 127 바이트

s=>new System.Net.WebClient().DownloadString("http://suggestqueries.google.com/complete/search?client=gma&q="+s).Split('"')[3];

완전한 형식의 버전 :

static void Main()
{
    System.Func<string, string> f = s =>
        new System.Net.WebClient()
                      .DownloadString("http://suggestqueries.google.com/complete/search?client=gma&q="+s)
                      .Split('"')[3];

    System.Console.WriteLine(f("you"));
    System.Console.ReadLine();
}

Method와 Class Body를 떠나는 것에 대한 힌트에 감사드립니다!
FatalMerlin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.