Google स्वतः पूर्ण मज़ा


16

आपका कार्य एक प्रोग्राम बनाना है, जो इनपुट स्ट्रिंग को देखते हुए, उस खोज के लिए पहले Google स्वत: पूर्ण परिणाम का उत्पादन करेगा। इनपुट / आउटपुट का प्रारूप आपके ऊपर है।

नियम

  1. आपके कार्यक्रम में 1 इनपुट, एक स्ट्रिंग लेनी चाहिए, और Google के शीर्ष स्वत: पूर्ण / स्वतः-भरण सुझाव परिणाम का उत्पादन करना चाहिए। इनपुट / आउटपुट का प्रारूप आपके ऊपर है। बस यह उल्लेख करना सुनिश्चित करें कि आपका I / O प्रारूप क्या है।
  2. जाहिर है, इंटरनेट तक पहुंच की अनुमति है।
  3. URL शॉर्टर्स (जैसे bit.ly, TinyURL, आदि) सख्ती से अस्वीकृत हैं । आपको इस URL से अपने स्वत: पूर्ण परिणाम प्राप्त करने चाहिए: http://suggestqueries.google.com/complete/search?client=your_browser&q=your_query या http://google.com/complete/search?client/your_browser&q=your_query । आपको किसी भी ब्राउज़र का नाम (या स्ट्रिंग, उस मामले के लिए) मानने की अनुमति है 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
मैं एक ग्राहक नाम को मानकीकृत करूँगा, इसे उचित बनाने के लिए
बीटा डिके

7
सख्त URL क्यों? जब तक किसी भी URL शॉर्टकट के बिना, tryqueries.google.com का उपयोग किया जाता है, मुझे कोई समस्या नहीं दिखती है।
डेनिस

विशेष रूप से, यदि हम उपयोग कर सकते हैं output=toolbar, तो हमें एक ग्राहक को निर्दिष्ट करने की आवश्यकता नहीं है।
डेनिस

2
@ mınxomaτ लेकिन क्यों नहीं https -> http(1 बाइट बचाएं), www.(4 बाइट्स बचाएं), google.com -> google.us(1 बाइट बचाएं) या यहां तक ​​कि google.com -> g.cn(6 बाइट्स बचाएं; मुझे यकीन नहीं है कि यह अभी भी क्यों काम करता है, लेकिन ऐसा लगता है कि यह अभी भी 20170424 में काम कर रहा है)
टीश

3
विभिन्न उपयोगकर्ताओं और क्षेत्रों के लिए अलग-अलग सुझावों की खोज नहीं कर रहे हैं? मुझे नहीं लगता कि मानक परीक्षण के मामले वास्तव में इसके लिए काम करते हैं।
श्रीजैंडर

जवाबों:


8

Zsh + coreutils + w3m, 88 71 68 बाइट्स

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

बैश से 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
कोई सुराग नहीं। यह था कि कुछ समय के लिए गिफ्ट किए हुए बच्चों को खाकर आप अपना आईक्यू कैसे बढ़ा सकते हैं , इसलिए मैं इसे बेहतर बनाना चाहूंगा।
डेनिस

डांग, मैं w3m प्यार करता हूँ। यह मुझे विचलित किए बिना ब्राउज़ करने देता है और यह पूरी तरह से बहुत अच्छा है।
ckjbgames

1
@MistahFiggins उस एक के लिए Minecraft को दोषी ठहराता है।
जेकस्टेम

@ मिस्ताहिफ़गिंस शायद वे सभी बस make(1) कीचड़ उछालना चाहते हैं ।
आर्मिनियस

12

Vim 8 + unimpaired.vim , 93 89 85 70 73 71 बाइट्स

  • -4 बाइट्स tsh के लिए धन्यवाद
  • -2 बाइट्स इयान एमनेश को धन्यवाद
  • -2 बाइट्स FatalMerlin के लिए धन्यवाद
  • -1 बाइट tsh / ckjbgames के लिए धन्यवाद
:s/ /+/g
D:e http://google.us/complete/search?client=gma&q="
d3f";D]yy

एक बोनस के रूप में, अंतिम बाइट्स ऐसे दिखते हैं जैसे वे आप पर झपकी ले रहे हैं ;Dक्योंकि इसमें गैर-मुद्रण वर्ण शामिल हैं, स्पष्टीकरण में प्रतिस्थापन होते हैं (और मैंने यूआरएल के प्री-क्वेरिस्ट्रिंग भाग को [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मैकओएस पर चलाते हैं , तो कम से कम। यदि आप जोड़ते हैं तो यह काम नहीं करता है -u NONE, लेकिन यह ठीक है अगर मेरा .vimrcखाली है। मुझे लगता है कि यह .vimrcURL सामग्री को काम करने के लिए सिस्टम से कुछ का उपयोग कर रहा है । हालांकि, इसका मतलब यह है कि यह V में काम नहीं करता है, इसलिए कोई TIO लिंक नहीं है।

कुछ और परीक्षण मामले:

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

मुझे वास्तव में एक जगह खोलने की जरूरत है जिसमें रिक्त स्थान हो। +पहले के साथ उन्हें बदलना अभी बहुत सारे बाइट्स हैं!


1
क्या अंतरिक्ष को प्लस चिन्ह द्वारा प्रतिस्थापित किया जाना चाहिए +?
tsh

1
@tsh तुम सही हो! अब कोई मुझे बताए कि मैं 2 बाइट कैसे बचा सकता हूं और डेनिस को हरा सकता हूं :)
ब्रायन मैककचॉन

netrw काम करने के लिए आपको जरूरत हैfiletype plugin on
tbodt

1
आप <Cr> कर के इन्सर्ट / कमांड मोड में "रजिस्टर (डिफॉल्ट) पेस्ट कर सकते हैं।" आप के :r [url]?client=opera&q=^R"बजाय कुछ बाइट्स दाढ़ी कर सकते हैं q:ir [url]?client=opera&q=<esc>p^Rजब आप <Cr> दबाते हैं तो वास्तविक बाइट भेजा जाता है, न कि चाबियों ^और Rएक साथ, इसलिए यह केवल एक बाइट के रूप में गिना जाता है।
इयान एमनेस

1
जब मैं बाइट्स गिनता हूं तो मुझे 88 मिलते हैं। इसके अलावा आप यूआरएल को http://google.com/complete/search?client=hp&q=your_query( client=gma=> प्लेन जे और छोटे टेक्स्ट) में बदलकर बाइट्स बचा सकते हैं ।)
फेटल मर्लिन

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()आधुनिक ब्राउज़रों में मौजूद एक वादा-आधारित भ्रूण एपीआई का उपयोग करता है। कॉलबैक की तरह, शुरुआत में async क्रियाओं के लिए हैंडलर स्थापित करके काम का वादा करता है, लेकिन बेहतर है। .then()एक समारोह जो async कार्रवाई के परिणाम के साथ बुलाया जाएगा लेता है। पाठ सरणी को जोड़-तोड़ चर में बदलने के लिए प्रतिक्रिया विधि .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 वर्णों का कम आनंद लें ;-)
स्टीफ़न बिज़िटर

मैंने इस पृष्ठ पर, Google के होमपेज पर, और के बारे में: फ़ायरफ़ॉक्स ५२ और क्रोम ५, में कोशिश की है, और रिक्त है: और मैं बस कोर्स त्रुटि प्राप्त कर रहा हूं। क्या आपने इसे सफलतापूर्वक काम करने के लिए पा लिया है?
ETHproductions

@ETHproductions हाँ, वहाँ CORS समस्याएं हैं, आपको डोमेन पर निष्पादित करना होगा tryqueries.google.com
MayorMonty

@StephanBijzitter .json()एक वादा करता है, यह किसी कारण के लिए async है
मेयरमोनी

वास्तव में यह वहाँ काम करता है, धन्यवाद!
ETHproductions

1

सी #, 192 112 111 बाइट्स

सहेजे गए 80 बाइट्स @TheLethalCoder की बदौलत। मेरे कोड को सुधारने के लिए धन्यवाद, मुझे नहीं पता था कि इसे आसपास के क्लास और मेथड बॉडी को छोड़ने की अनुमति थी :)

के द्वारा प्रतिस्थापित gmaकरके एक और बाइट को बचाया hp, क्योंकि यह पार्सिंग के लिए कोई फर्क नहीं पड़ता है और प्रतिक्रिया शरीर से पहले बस कुछ अस्पष्ट है।

मैंने एपीआई को खोजने gmaऔर करने के लिए मजबूर किया hp

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. परिणाम सरणी के दूसरे तत्व को पकड़ो।

यहाँ छवि विवरण दर्ज करें


1

पॉवरशेल, 133 115 बाइट्स

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

नमूना चला

विंडोज सीएमडी कमांड लाइन:

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

आर, 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

सी #, 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();
}

विधि और क्लास बॉडी छोड़ने के बारे में संकेत के लिए धन्यवाद!
फटलमर्लिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.