Ihre Aufgabe ist es, ein Programm zu erstellen, das anhand einer Eingabezeichenfolge das erste Ergebnis der automatischen Vervollständigung von Google für diese Suche ausgibt. Das Format der Eingabe / Ausgabe liegt bei Ihnen.
Regeln
- Ihr Programm muss 1 Eingabe, eine Zeichenfolge und das beste Ergebnis für die automatische Vervollständigung / automatische Ausfüllung von Google-Vorschlägen ausgeben. Das Format der Eingabe / Ausgabe liegt bei Ihnen. Stellen Sie nur sicher, dass Sie das E / A-Format angeben.
- Der Zugriff auf das Internet ist selbstverständlich erlaubt.
- URL-Kürzungen (wie bit.ly, TinyURL usw.) sind strengstens untersagt . Sie sollten Ihre Ergebnisse für die automatische Vervollständigung über diese URL abrufen : http://suggestqueries.google.com/complete/search?client=your_browser&q=your_query oder http://google.com/complete/search?client=your_browser&q=your_query . Sie dürfen einen beliebigen Browsernamen (oder eine beliebige Zeichenfolge) für annehmen
client
. In dem Programm, das ich geschrieben habe, gehe ich von Chrome aus. Jeder Browsername oder String sollte funktionieren. Sie dürfen alle Optionen an die Webseite übergeben, solange Sie eine Variante von http://suggestqueries.google.com/complete/search verwenden . - Bitte erläutern Sie die Funktionsweise Ihres Programms. Es ist nicht obligatorisch, aber ich rate dringend dazu.
- Alle Standardlücken sind strengstens untersagt .
Testfälle
Diese ändern sich ständig. Bearbeiten Sie diesen Beitrag, wenn sie nicht mehr aktuell sind.
'how to'
=> 'how to make slime'
'code golf'
=> 'code golf languages'
'you'
=> 'youtube'
'g'
=> 'google' (why would you google 'google'?)
Das ist Code-Golf , also kann der kürzeste Code gewinnen und der beste Programmierer gedeihen ...
output=toolbar
, müssen wir überhaupt keinen Client angeben.https -> http
(1 Byte speichern), entfernenwww.
(4 Byte speichern),google.com -> google.us
(1 Byte speichern) oder sogargoogle.com -> g.cn
(6 Byte speichern; ich bin mir nicht sicher, warum dies noch funktioniert, aber es scheint, dass es in 20170424 noch funktioniert)Antworten:
Zsh + Coreutils + W3M,
887168 BytesDas Umschalten von Bash auf Zsh sparte 3 Bytes.
Danke an @FatalMerlin für die kürzere URL, die 17 Bytes spart!
Probelauf
quelle
make(1)
schleimen .Vim 8 + unbeeinträchtigt. Vim ,
938985707371 BytesAls Bonus sehen die letzten Bytes so aus, als würden sie Ihnen
;D
zuzwinkern. Da dies nicht druckbare Zeichen enthält, enthält die Erklärung Ersetzungen (und ich habe der[url]
Kürze halber den vor der Abfrage erfolgenden Teil der URL durch ersetzt ):Was das Laufen betrifft, funktioniert es einwandfrei, wenn Sie es in einer Datei mit dem Namen speichern
script
undvim -s script input.txt
zumindest unter macOS ausführen . Es funktioniert nicht, wenn Sie hinzufügen-u NONE
, aber es funktioniert gut, wenn meine.vimrc
leer ist. Ich nehme an, es wird etwas vom System verwendet.vimrc
, um die URL-Inhalte zum Laufen zu bringen. Dies bedeutet jedoch, dass es in V nicht funktioniert, also keine TIO-Verbindung.Einige weitere Testfälle:
Was ich wirklich brauche, ist eine Möglichkeit, eine URL mit Leerzeichen darin zu öffnen. Das Ersetzen durch
+
first ist einfach zu viele Bytes!quelle
+
?filetype plugin on
:r [url]?client=opera&q=^R"
stattdessen ein paar Bytes abschneidenq:ir [url]?client=opera&q=<esc>p
.^R
Wird das tatsächliche Byte gesendet, wenn Sie <Cr> drücken, nicht die Tasten^
undR
zusammen, so zählt es nur als ein Byte.http://google.com/complete/search?client=hp&q=your_query
(client=gma
=> Plain JSON und kürzerer Text) ändern .Python + fordert
121117103 Bytes anquelle
JavaScript, 109 Bytes
Promise
Du musst es lieben, aber der Mensch ist es wortreich! Diese Antwort verwendetfetch()
eine versprechungsbasierte Abruf-API, die in modernen Browsern vorhanden ist. Versprechen funktionieren, indem zu Beginn Handler für asynchrone Aktionen eingerichtet werden, z. B. Rückrufe, aber besser. Das.then()
nimmt eine Funktion an, die mit dem Ergebnis der asynchronen Aktion aufgerufen wird..then(r=>r.json())
Verwendet die.json()
Antwortmethode, um das Textarray in eine manipulierbare Variable zu konvertieren. Die zweite Methode ruft.then()
nur die erste Antwort ab.Verwendung:
quelle
.then(r=>r.json()).then(r=>r[1][0])
->.then(r=>r.json()[1][0])
Genießen Sie 11 Zeichen weniger ;-).json()
gibt ein Versprechen zurück, es ist aus irgendeinem GrundC #,
192112111 Bytes80 Bytes dank @TheLethalCoder eingespart. Vielen Dank für die Neuformatierung meines Codes, ich wusste nicht, dass es erlaubt ist, den umgebenden Class and Method Body einfach wegzulassen :)
Sparte ein weiteres Byte durch Ersetzen
gma
durchhp
, da es für das Parsen keine Rolle spielt und es nur ein bisschen Kauderwelsch vor dem Antworttext gibt.Ich habe die API brachial gezwungen, zu finden
gma
undhp
.quelle
Groovy, 122 Bytes
Grundsätzlich:
Holen Sie sich den Text vom Endpunkt.
Entfernen Sie das Teil mit den Klammern am Ende. Dies ist keine gültige Syntax.
Analysieren Sie das verbleibende Bit als grooviges Array.
Greifen Sie nach dem zweiten Element des Ergebnisfelds.
quelle
PowerShell,
133115 ByteProbelauf
Windows CMD-Befehlszeile:
PowerShell-Konsole:
quelle
R, 111 Bytes
Es ist lange her, dass ich das letzte Mal hier war, aber ich habe es versucht:
Verwenden des Pakets
jsonlite
zum Konvertieren der Zeichenfolge, aus der ein Listenobjekt abgerufen wurdereadLines()
.Extrahieren Sie anschließend das zweite Element, z. B. (gibt eine Warnung aus, um die wir uns nicht kümmern müssen):
quelle
C #, 127 Bytes
Vollständige und formatierte Version:
quelle