Cuando buscas algo en Google , aparece convenientemente un mensaje cerca de la parte superior de la página que dice algo así About 53,000,000 results (0.22 seconds)
. (Los números cambian dependiendo de lo que se buscó, por supuesto).
En este desafío, escribirá un programa que dibuje un gráfico ASCII logarítmico del número de resultados dados por Google cuando se buscan todos los prefijos no vacíos de una frase de búsqueda dada .
Una frase de búsqueda se define como una o más cadenas de caracteres alfanuméricos en minúsculas, separadas por un espacio entre sí. En Regex, una frase de búsqueda es (?:[a-z0-9]+ )*[a-z0-9]+
.
Por lo tanto im ok
, r
y 1a 2
son todas las frases de búsqueda, pero I'm OK
, R
, 1a 2
, y , no lo son.
(Las restricciones de caracteres están establecidas porque Google rara vez tiene en cuenta mayúsculas o minúsculas o símbolos especiales. Escapar de caracteres no alfanuméricos en las URL también es una molestia).
Especificaciones
Su programa debe tomar una frase de búsqueda y un número positivo de coma flotante H desde stdin o desde la línea de comando. (Puede suponer que son válidos y está bien si necesita comillas o algo alrededor de la frase de búsqueda).
Como ejemplo de trabajo, supongamos que la frase de búsqueda es a car
y H = 0.75.
Paso 1:
Reúna los prefijos no vacíos de su frase de búsqueda y póngalos entre comillas dobles . Las citas aseguran que se buscará la frase exacta, evitando cualquier redireccionamiento de 'quiso decir ...' .
Excluya todos los prefijos que terminan en un espacio como a[space]
.
Prefixes
"a"
"a c"
"a ca"
"a car"
Paso 2:
busque cada uno de estos términos exactamente como aparecen con https://www.google.com y anote la cantidad de resultados devueltos.
Search Term Message Results
"a" About 6,950,000,000 results (0.27 seconds) 6950000000
"a c" About 861,000,000 results (0.27 seconds) 861000000
"a ca" About 2,990,000 results (0.30 seconds) 2990000
"a car" About 53,900,000 results (0.39 seconds) 53900000
Si el término de búsqueda no coincide con ningún documento , ponga un 0 en la Results
columna.
Paso 3:
Calcule y = floor(H * log10(r + 1))
para cada fila, donde r es el Results
valor. H sigue siendo 0,75 aquí.
Search Term Results y
"a" 6950000000 7
"a c" 861000000 6
"a ca" 2990000 4
"a car" 53900000 5
Paso 4:
Organice el y
número de barras verticales ( |
) sobre el último carácter de cada término de búsqueda sin comillas, usando espacios para llenar áreas vacías, en una especie de gráfico de barras.
|
| |
| | |
| |||
| |||
| |||
| |||
a car
Este gráfico es el resultado final de su programa y lo único que necesita para generar. Debería ir a stdout.
Puntuación
Este es el código de golf , por lo que gana el programa más corto en bytes .
Notas
- Puede usar acortadores de URL u otras herramientas de búsqueda / API siempre que los resultados sean los mismos que buscando https://www.google.com .
- Sé que las comillas dobles no son una forma segura de excluir las redirecciones "quiso decir ...". Agregar
&nfpr=1
a la URL no siempre funciona tampoco . No te preocupes por estas inexactitudes. Simplemente busque elAbout X results...
mensaje sin importar lo que aparezca, o configúreloResults
en 0 si no hay ninguno. - Hay una columna vacía sobre cualquier espacio en la frase de búsqueda en el gráfico.
- El gráfico no debe ser más ancho o más alto de lo necesario (por ejemplo, con espacios en blanco).
- Está bien si su programa tiene efectos secundarios como abrir un navegador web para que las páginas crípticas html / js de Google se puedan leer a medida que se procesan.
Respuestas:
Ruby,
316295 bytesDesafortunadamente, las solicitudes simplemente dejaron de funcionar en el probador en línea que estaba usando, por lo que necesito jugar más esta noche o mañana.
Explicación: Estoy tomando la entrada a través de ARGV. Luego, solo estoy enviando una solicitud para cada subcadena que no termina en un espacio, encuentro los resultados a través de expresiones regulares (y por defecto
0
si la expresión regular no coincide), y luego construyo el histograma con barras horizontales. Al final, invierto todas las líneas y las transpongo para crear el histograma vertical.fuente