Votre tâche consiste à créer un programme qui, étant donné une chaîne d'entrée, produira le premier résultat de saisie semi-automatique de Google pour cette recherche. Le format des entrées / sorties dépend de vous.
Règles
- Votre programme doit prendre 1 entrée, une chaîne et produire le résultat principal des suggestions de saisie semi-automatique / de remplissage automatique de Google. Le format des entrées / sorties dépend de vous. N'oubliez pas de mentionner votre format d'E / S.
- De toute évidence, l'accès à Internet est autorisé.
- Les raccourcisseurs d'URL (comme bit.ly, TinyURL, etc.) sont strictement interdits . Vous devez récupérer vos résultats de saisie semi-automatique à partir de cette URL: http://suggestqueries.google.com/complete/search?client=your_browser&q=your_query ou http://google.com/complete/search?client=your_browser&q=your_query . Vous êtes autorisé à assumer n'importe quel nom de navigateur (ou chaîne, d'ailleurs) pour
client
. Dans le programme que j'ai écrit , je suppose que Chrome. Tout nom ou chaîne de navigateur devrait fonctionner. Vous êtes autorisé à transmettre toutes les options à la page Web tant que vous utilisez une variante de http://suggestqueries.google.com/complete/search . - Veuillez expliquer le fonctionnement de votre programme. Ce n'est pas obligatoire, mais je le conseille vivement.
- Toutes les failles standard sont strictement interdites .
Cas de test
Celles-ci changent constamment, alors modifiez ce message si elles deviennent obsolètes.
'how to'
=> 'how to make slime'
'code golf'
=> 'code golf languages'
'you'
=> 'youtube'
'g'
=> 'google' (why would you google 'google'?)
C'est du code-golf , alors que le code le plus court gagne et que le meilleur programmeur prospère ...
output=toolbar
, nous n'avons pas du tout besoin de spécifier un client.https -> http
(enregistrer 1 octet), supprimerwww.
(enregistrer 4 octets),google.com -> google.us
(enregistrer 1 octet) ou mêmegoogle.com -> g.cn
(enregistrer 6 octets; je ne sais pas pourquoi cela fonctionne toujours, mais il semble que cela fonctionne toujours en 20170424)Réponses:
Zsh + coreutils + w3m,
887168 octetsLe passage de Bash à Zsh a permis d'économiser 3 octets.
Merci à @FatalMerlin pour l'URL plus courte, économisant 17 octets!
Exemple d'exécution
la source
make(1)
slime .Vim 8 + unimpaired.vim ,
938985707371 octetsEn prime, les derniers octets semblent vous faire un clin d'
;D
œil.Comme cela contient des caractères non imprimables, l'explication contient des substitutions (et j'ai remplacé la partie pré-requête de l'url par[url]
, pour plus de brièveté):En ce qui concerne l'exécution, cela fonctionne très bien si vous l'enregistrez dans un fichier nommé
script
et exécuté avecvim -s script input.txt
au moins sur macOS. Cela ne fonctionne pas si vous ajoutez-u NONE
, mais cela fonctionne très bien si my.vimrc
est vide. Je suppose qu'il utilise quelque chose du système.vimrc
pour faire fonctionner les trucs URL. Cela signifie cependant que cela ne fonctionne pas en V, donc pas de lien TIO.Quelques cas de test supplémentaires:
Ce dont j'ai vraiment besoin, c'est d'un moyen d'ouvrir une URL avec des espaces. Les remplacer par le
+
premier est tout simplement trop d'octets!la source
+
?filetype plugin on
:r [url]?client=opera&q=^R"
au lieu deq:ir [url]?client=opera&q=<esc>p
.^R
est l'octet réel envoyé lorsque vous appuyez sur <Cr>, pas sur les touches^
etR
ensemble, il ne compte donc que pour un octet.http://google.com/complete/search?client=hp&q=your_query
(client=gma
=> JSON ordinaire et texte plus court.).Python + demande
121117103 octetsla source
JavaScript, 109 octets
Promise
, tu dois l'aimer, mais l'homme est-il verbeux! Cette réponse utilisefetch()
une API de récupération basée sur les promesses présente dans les navigateurs modernes. Les promesses fonctionnent en établissant des gestionnaires pour les actions asynchrones au début, comme les rappels, mais en mieux. La.then()
prend une fonction qui sera appelée avec le résultat de l'action async..then(r=>r.json())
utilise la.json()
méthode de réponse pour convertir le tableau de texte en une variable manipulable, la seconde.then()
extrait simplement la première réponse.Usage:
la source
.then(r=>r.json()).then(r=>r[1][0])
->.then(r=>r.json()[1][0])
Profitez de 11 caractères de moins ;-).json()
retourne une promesse, c'est asynchrone, pour une raison quelconqueC #,
192112111 Octets80 octets enregistrés grâce à @TheLethalCoder. Merci d'avoir reformaté mon code, je ne savais pas qu'il était autorisé de laisser de côté le corps de classe et de méthode environnant :)
Enregistré un autre octet en le remplaçant
gma
parhp
, car cela n'a pas d'importance pour l'analyse et il y a juste du charabia devant le corps de la réponse.J'ai littéralement contraint brutalement l'API à trouver
gma
ethp
.la source
Groovy, 122 octets
Fondamentalement:
Obtenez le texte du point final.
Supprimez la partie avec les crochets à la fin, ce n'est pas une syntaxe valide.
Analyser le bit restant comme un tableau groovy.
Saisissez le deuxième élément du tableau de résultats.
la source
PowerShell,
133115 octetsExemple d'exécution
Ligne de commande Windows CMD:
Console PowerShell:
la source
R, 111 octets
Cela fait longtemps que je ne suis pas venu ici pour la dernière fois, mais j'ai essayé:
Utilisation du package
jsonlite
pour convertir la chaîne récupéréereadLines()
en un objet liste.Extraire ensuite le deuxième élément, par exemple (donne un avertissement dont nous n'avons pas à nous soucier):
la source
C #, 127 octets
Version complète et formatée:
la source