Su tarea es crear un programa que, dada una cadena de entrada, generará el primer resultado de autocompletado de Google para esa búsqueda. El formato de entrada / salida depende de usted.
Reglas
- Su programa debe tomar 1 entrada, una cadena y generar el resultado principal de sugerencias de autocompletado / autocompletado de Google. El formato de entrada / salida depende de usted. Solo asegúrese de mencionar cuál es su formato de E / S.
- Obviamente, el acceso a Internet está permitido.
- Los acortadores de URL (como bit.ly, TinyURL, etc.) están estrictamente prohibidos . Debe obtener sus resultados de autocompletar de esta URL: http://suggestqueries.google.com/complete/search?client=your_browser&q=your_query o http://google.com/complete/search?client=your_browser&q=your_query . Se le permite asumir cualquier nombre de navegador (o cadena, para el caso) para
client
. En el programa que escribí , supongo que Chrome. Cualquier nombre o cadena del navegador debería funcionar. Puede pasar cualquier opción a la página web siempre que utilice alguna variante de http://suggestqueries.google.com/complete/search . - Proporcione una explicación de cómo funciona su programa. No es obligatorio, pero lo recomiendo encarecidamente.
- Todas las lagunas estándar están estrictamente prohibidas .
Casos de prueba
Estos están cambiando constantemente, así que edite esta publicación si no están actualizados.
'how to'
=> 'how to make slime'
'code golf'
=> 'code golf languages'
'you'
=> 'youtube'
'g'
=> 'google' (why would you google 'google'?)
Este es el código de golf , por lo que puede ganar el código más corto y prosperar el mejor programador ...
output=toolbar
, no tenemos que especificar un cliente en absoluto.https -> http
(guardar 1 byte), eliminarwww.
(guardar 4 bytes),google.com -> google.us
(guardar 1 byte) o inclusogoogle.com -> g.cn
(guardar 6 bytes; no estoy seguro de por qué esto todavía funciona, pero parece que todavía funciona en 20170424)Respuestas:
Zsh + coreutils + w3m,
887168 bytesCambiar de Bash a Zsh ahorró 3 bytes.
¡Gracias a @FatalMerlin por la URL más corta, ahorrando 17 bytes!
Ejecución de la muestra
fuente
make(1)
limo .Vim 8 + unimpaired.vim ,
938985707371 bytesComo beneficio adicional, los últimos bytes parecen que le están guiñando el ojo.
;D
Dado que esto contiene caracteres que no se imprimen, la explicación contiene sustituciones (y he reemplazado la parte de la url previa a la consulta con[url]
, por brevedad):En cuanto a la ejecución, funciona bien si la guarda en un archivo llamado
script
y se ejecuta convim -s script input.txt
macOS, al menos. No funciona si agrega-u NONE
, pero funciona bien si mi.vimrc
está vacío. Supongo que está usando algo del sistema.vimrc
para hacer que las URL funcionen. Esto significa, sin embargo, que no funciona en V, por lo que no hay enlace TIO.Algunos casos de prueba más:
Lo que realmente necesito es una forma de abrir una URL con espacios en ella. ¡Reemplazarlos por
+
primero es demasiados bytes!fuente
+
?filetype plugin on
:r [url]?client=opera&q=^R"
lugar deq:ir [url]?client=opera&q=<esc>p
.^R
es el byte real enviado cuando presiona <Cr>, no las teclas^
yR
juntas, por lo que solo cuenta como un byte.http://google.com/complete/search?client=hp&q=your_query
(client=gma
=> JSON simple y texto más corto).Python + solicitudes
121117103 bytesfuente
JavaScript, 109 bytes
Promise
, tienes que amarlo, pero hombre, ¡es detallado! Esta respuesta utilizafetch()
, una API de recuperación basada en promesas presente en los navegadores modernos. Las promesas funcionan al establecer controladores para acciones asíncronas al principio, como devoluciones de llamada, pero mejor. La.then()
toma una función que será llamada con el resultado de la acción asíncrona..then(r=>r.json())
utiliza el.json()
método de respuesta para convertir la matriz de texto en una variable manipulable, el segundo.then()
simplemente extrae la primera respuesta.Uso:
fuente
.then(r=>r.json()).then(r=>r[1][0])
->.then(r=>r.json()[1][0])
Disfruta de 11 caracteres menos ;-).json()
devuelve una promesa, es asíncrono, por alguna razónC #,
192112111 BytesAhorró 80 bytes gracias a @TheLethalCoder. Gracias por volver a formatear mi código, no sabía que estaba permitido dejar de lado el cuerpo de clase y método circundante :)
Se guardó otro byte al reemplazar
gma
porhp
, ya que no importa para el análisis y solo hay algunas tonterías ante el cuerpo de respuesta.Literalmente forcé brutalmente a la API a encontrar
gma
yhp
.fuente
Groovy, 122 bytes
Básicamente:
Obtenga el texto desde el punto final.
Elimine la parte con los corchetes al final, esta no es una sintaxis válida.
Analiza el bit restante como una matriz maravillosa.
Agarra el segundo elemento de la matriz de resultados.
fuente
PowerShell,
133115bytesEjecución de la muestra
Línea de comando CMD de Windows:
Consola PowerShell:
fuente
R, 111 bytes
Mucho tiempo desde la última vez que vine aquí, pero intentándolo:
Usar el paquete
jsonlite
para convertir la cadena obtenidareadLines()
en un objeto de lista.Posteriormente extraiga el segundo elemento, por ejemplo (da una advertencia de que no tenemos que preocuparnos):
fuente
C #, 127 bytes
Versión completa y formateada:
fuente