Google Otomatik Tamamlama Eğlencesi


16

Göreviniz, bir giriş dizesi verildiğinde, söz konusu arama için ilk Google otomatik tamamlama sonucunu çıkaracak bir program oluşturmaktır. Giriş / çıkış formatı size kalmış.

kurallar

  1. Programınız 1 giriş, bir dize almalı ve en iyi Google otomatik tamamlama / otomatik doldurma önerileri sonucunu çıkarmalıdır. Giriş / çıkış formatı size kalmış. Sadece G / Ç formatınızın ne olduğundan emin olun.
  2. Açıkçası, internete erişime izin verilir.
  3. URL kısaltıcılarına (bit.ly, TinyURL vb.) Kesinlikle izin verilmez . Otomatik tamamlama sonuçlarınızı şu URL'den getirmelisiniz: http://suggestqueries.google.com/complete/search?client=your_browser&q=your_query veya http://google.com/complete/search?client=your_browser&q=your_query . İçin herhangi bir tarayıcı adı (veya dize) kabul edebilirsiniz client. Yazdığım programda Chrome'u varsayıyorum. Herhangi bir tarayıcı adı veya dizesi çalışmalıdır. Http://suggestqueries.google.com/complete/search değişkenini kullandığınız sürece web sayfasına herhangi bir seçenek iletmenize izin verilir .
  4. Lütfen programınızın nasıl çalıştığına dair bir açıklama yapın. Zorunlu değil, ama kesinlikle tavsiye ediyorum.
  5. Tüm standart boşluklar kesinlikle yasaktır .

Test Durumları

Bunlar sürekli değişiyor, bu nedenle güncelliğini yitirirse bu yayını düzenleyin.

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

Bu , bu yüzden en kısa kod kazanmak ve en iyi programcı başarılı olabilir ...


3
Bir müşteri ismini standart hale getirmek için standart hale getirirdim
Beta Decay

7
Neden katı URL? Suggestqueries.google.com kullanıldığı sürece, URL kısaltıcıları olmadan herhangi bir sorun görmüyorum.
Dennis

Özellikle, eğer kullanabilirsek output=toolbar, hiç müşteri belirtmek zorunda değiliz.
Dennis

2
@ mınxomaτ ama neden https -> http(1 bayt kaydet), kaldır www.(4 bayt kaydet), google.com -> google.us(1 bayt kaydet) veya hatta google.com -> g.cn(6 bayt kaydet; neden hala çalıştığından emin değilim, ancak hala 20170424'te çalışıyor gibi görünüyor)
tsh

3
Arama önerileri farklı kullanıcılar ve bölgeler için farklı değil mi? Standart test senaryolarına sahip olmanın gerçekten işe yaradığını sanmıyorum.
MrZander

Yanıtlar:


8

Zsh + coreutils + w3m, 88 71 68 bayt

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

Bash'ten Zsh'a geçiş 3 bayt kurtardı.

Daha kısa URL için @FatalMerlin'e teşekkürler, 17 bayt tasarruf!

Örnek çalışma

$ 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
Her şeyden ötürü, neden "balçık yap" ilk öneri? Dışarıda kaç kişi konuşurken balçık yapıyor?
MildlyMilquetoast

27
İpucu yok. Bir süre üstün zekalı çocuklar yiyerek iq'nizi nasıl yükselteceğiniz oldu , bu yüzden bunu bir gelişme olarak değerlendiririm.
Dennis

Dang, w3m'yi seviyorum. Dikkat dağıtıcı olmadan göz atmamı sağlıyor ve tamamen güzel.
ckjbgames

1
@MistahFiggins Bunun için Minecraft'ı suçlayın.
JakeSteam

@MistahFiggins Belki hepsi sadece istediğiniz make(1) sümük .
Arminius

12

Vim 8 + unimpaired.vim , 93 89 85 70 73 71 bayt

  • Tsh sayesinde -4 bayt
  • Ian Emnace sayesinde -2 bayt
  • FatalMerlin sayesinde -2 bayt
  • Tsh / ckjbgames sayesinde -1 bayt
:s/ /+/g
D:e http://google.us/complete/search?client=gma&q="
d3f";D]yy

Bir bonus olarak, son baytlar size göz kırpıyor gibi görünüyor ;DBu, yazdırılmayan karakterler içerdiğinden, açıklama ikameler içeriyor (ve URL'nin ön sorgu dizesi kısmını [url]kısaca değiştirdim):

: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 '

Bildiğim kadarıyla çalışan giderse, o adında bir dosyaya kaydedin eğer cezası çalışır scriptve çalıştırmak vim -s script input.txten azından MacOS üzerinde. Eklerseniz işe yaramaz -u NONE, ancak boşumda işe yarar .vimrc. .vimrcURL işlerini yapmak için sistemden bir şey kullandığını varsayıyorum . Ancak bu, V'de çalışmadığı, dolayısıyla TIO bağlantısı olmadığı anlamına gelir.

Bazı test örnekleri:

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

Gerçekten ihtiyacım olan boşluk içeren bir URL açmak için bir yoludur. Bunları +önce değiştirmek çok fazla bayttır!


1
boşluk artı işareti ile değiştirilmeli +mi?
tsh

1
@tsh Haklısın! Şimdi biri bana nasıl 2 bayt kurtarabileceğimi ve Dennis'i yenebileceğimi söyledi :)
Brian McCutchon

netrw çalışmak için ihtiyacınızfiletype plugin on
tbodt

1
"Kayıt (varsayılan) <Cr> yaparak ekleme / komut moduna yapıştırabilirsiniz." Bunun :r [url]?client=opera&q=^R"yerine yaparak birkaç bayt tıraş edebilirsiniz q:ir [url]?client=opera&q=<esc>p. ^REğer <Cr> değil, anahtarlar basın fiili bayt gönderilir ^ve Rbir byte olarak birlikte, bunun yüzden sadece sayar.
Ian Emnace

1
Ben ne zaman saymak bayt ben 88. Ayrıca URL'yi değiştirerek bayt kaydedebilirsiniz olsun http://google.com/complete/search?client=hp&q=your_query( client=gma=> Düz JSON ve daha kısa metin.).
FatalMerlin

7

Python + istekleri 121 117 103 bayt

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

5

JavaScript, 109 Bayt

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

Promise, onu sevmelisin, ama adam çok ayrıntılı! Bu yanıt fetch(), modern tarayıcılarda vaat edilen bir getirme API'sini kullanır . Başlangıçta geri çağırma gibi, ancak daha iyi olan zaman uyumsuz eylemler için işleyiciler kurarak çalışma sözü verir. Zaman .then()uyumsuz eylemin sonucu ile çağrılacak bir işlevi alır. metin dizisini işlenebilir bir değişkene dönüştürmek .then(r=>r.json())için .json()yanıt yöntemini kullanır, ikincisi .then()sadece ilk yanıtı çeker.

Kullanımı:

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 karakter daha az tadını çıkarın ;-)
Stephan Bijzitter

Firefox 52 ve Chrome 57'de denedim, bu sayfada, Google'ın ana sayfası ve hakkında: boş ve sadece CORS hataları almaya devam ediyorum. Başarıyla çalışmayı başardın mı?
ETHproductions

@ETHproductions Evet, CORS sorunları var, suggestqueries.google.com
MayorMonty

@StephanBijzitter .json()bir Vaat döndürüyor, bu nedense, bir nedenden dolayı
MayorMonty

Gerçekten orada çalışıyor, teşekkürler!
ETHproductions

1

C # 192 112 111 bayt

@TheLethalCoder sayesinde 80 bayt kurtardı. Kodumu yeniden biçimlendirdiğiniz için teşekkürler, sadece çevredeki Sınıf ve Yöntem Gövdesini bırakmasına izin verildiğini bilmiyordum :)

Değiştirerek başka Byte Kaydedilen gmatarafından hpo ayrıştırma için önemli değil ve yanıt gövdesinden önce sadece bazı anlamsız olduğu gibi.

Litterally bulmak için API kaba zorlanan gmave hp.

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

1

Groovy, 122 bayt

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

Temelde:

  1. Metni bitiş noktasından alın.

  2. Sonunda köşeli ayraç bulunan parçayı çıkarın, bu geçerli bir sözdizimi değil.

  3. Kalan biti harika bir dizi olarak ayrıştırın.

  4. Sonuç dizisinin ikinci öğesini alın.

resim açıklamasını buraya girin


1

PowerShell, 133115 bayt

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

Örnek çalışma

Windows CMD komut satırı:

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

PowerShell konsolu:

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

1

R, 111 bayt

Buraya en son geldiğimden uzun zaman önce ama deniyorum:

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

jsonliteAlınan dizeyi readLines()bir liste nesnesine dönüştürmek için paketi kullanma .

Daha sonra ikinci elemanı çıkarın, örneğin (önemsememiz gerekmediğine dair bir uyarı verir):

> 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 bayt

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

Tam ve biçimlendirilmiş sürüm:

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();
}

Metot ve Sınıf Bedenini terk etme ipucu için teşekkürler!
FatalMerlin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.