Quando você pesquisa algo no Google , ele fornece uma mensagem conveniente no topo da página dizendo algo como About 53,000,000 results (0.22 seconds)
. (Os números mudam dependendo do que foi pesquisado, é claro.)
Neste desafio, você escreverá um programa que desenha um gráfico ASCII logarítmico do número de resultados fornecidos pelo Google quando todos os prefixos não vazios de uma determinada frase de pesquisa são pesquisados.
Uma frase de pesquisa é definida como uma ou mais cadeias de caracteres alfanuméricos em minúsculas, separadas por um espaço uma da outra. No Regex, uma frase de pesquisa é (?:[a-z0-9]+ )*[a-z0-9]+
.
Assim im ok
, r
e 1a 2
são todos de busca frases, mas I'm OK
, R
, 1a 2
, e , não o são.
(As restrições de caracteres estão em vigor porque o Google raramente leva em conta maiúsculas ou símbolos especiais. Escapar caracteres não alfanuméricos em URLs também é um aborrecimento.)
Spec
Seu programa deve incluir uma frase de pesquisa e um número de ponto flutuante positivo H, do stdin ou da linha de comando. (Você pode assumir que eles são válidos e não há problema em precisar de aspas ou algo relacionado à frase de pesquisa.)
Como um exemplo prático, vamos supor que a frase de pesquisa seja a car
e H = 0,75.
Etapa 1:
reúna os prefixos não vazios da sua frase de pesquisa e coloque-os entre aspas duplas . As aspas garantem que a frase exata seja pesquisada, evitando redirecionamentos 'você quis dizer ...' .
Exclua todos os prefixos que terminam em um espaço como a[space]
.
Prefixes
"a"
"a c"
"a ca"
"a car"
Etapa 2:
pesquise cada um desses termos exatamente como eles aparecem usando https://www.google.com e observe o número de resultados retornados.
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
Se o termo de pesquisa não corresponder a nenhum documento , coloque um 0 na Results
coluna.
Etapa 3:
Calcule y = floor(H * log10(r + 1))
para cada linha, em que r é o Results
valor. H ainda é 0,75 aqui.
Search Term Results y
"a" 6950000000 7
"a c" 861000000 6
"a ca" 2990000 4
"a car" 53900000 5
Etapa 4:
organize o y
número de barras verticais ( |
) acima do último caractere de cada termo de pesquisa não citado, usando espaços para preencher áreas vazias, em uma espécie de gráfico de barras.
|
| |
| | |
| |||
| |||
| |||
| |||
a car
Este gráfico é o resultado final do seu programa e a única coisa que ele precisa para produzir. Deve ir para stdout.
Pontuação
Isso é código-golfe , então o programa mais curto em bytes vence.
Notas
- Você pode usar encurtadores de URL ou outras ferramentas / APIs de pesquisa, desde que os resultados sejam os mesmos da pesquisa em https://www.google.com .
- Eu sei que aspas duplas não são uma maneira infalível de excluir redirecionamentos "você quis dizer ...". Adicionar
&nfpr=1
à URL nem sempre funciona . Não se preocupe com essas imprecisões. Procure aAbout X results...
mensagem, não importa o que aparecer, ou definaResults
como 0 se não houver. - Há uma coluna vazia acima de qualquer espaço na frase de pesquisa no gráfico.
- O gráfico não deve ser mais largo ou mais alto do que o necessário (por exemplo, com espaço em branco).
- Tudo bem se o seu programa tiver efeitos colaterais, como abrir um navegador da Web, para que as páginas criptografadas html / js do Google possam ser lidas à medida que são renderizadas.
Respostas:
Ruby,
316295 bytesInfelizmente, as solicitações pararam de funcionar no testador on-line que eu estava usando, então preciso resolver isso ainda hoje ou amanhã.
Explicação: Estou recebendo a entrada via ARGV. Então, estou apenas enviando uma solicitação para cada substring que não termina em um espaço, localizo os resultados via regex (e o padrão é
0
se a regex não corresponder) e, em seguida, construa o histograma com barras horizontais. No final, estou revertendo todas as linhas e transpondo-as para criar o histograma vertical.fonte