Lorsque vous recherchez quelque chose sur Google , il donne un message pratique en haut de la page disant quelque chose comme About 53,000,000 results (0.22 seconds)
. (Les chiffres changent en fonction de ce qui a été recherché bien sûr.)
Dans ce défi, vous écrirez un programme qui dessine un graphique ASCII logarithmique du nombre de résultats fournis par Google lorsque tous les préfixes non vides d'une expression de recherche donnée sont recherchés.
Une expression de recherche est définie comme une ou plusieurs chaînes de caractères alphanumériques en minuscules, séparées par un espace les unes des autres. Dans Regex, une expression de recherche est (?:[a-z0-9]+ )*[a-z0-9]+
.
Alors im ok
, r
et 1a 2
sont toutes les phrases de recherche, mais I'm OK
, R
, 1a 2
et , ne sont pas.
(Les restrictions de caractères sont en place, car Google prend rarement en compte la casse ou les symboles spéciaux. L'échappement de caractères non alphanumériques dans les URL est également un problème.)
Spec
Votre programme doit accepter une expression de recherche et un nombre à virgule flottante positif H à partir de stdin ou de la ligne de commande. (Vous pouvez supposer qu'ils sont valides et que ça va si vous avez besoin de guillemets ou de quelque chose autour de l'expression de recherche.)
Comme exemple de travail, supposons que la phrase de recherche est a car
et H = 0,75.
Étape 1:
rassemblez les préfixes non vides de votre expression de recherche et mettez-les entre guillemets . Les guillemets garantissent que la phrase exacte sera recherchée, en évitant toute redirection "vouliez-vous dire ..." .
Exclure tous les préfixes se terminant par un espace tel que a[space]
.
Prefixes
"a"
"a c"
"a ca"
"a car"
Étape 2:
Recherchez chacun de ces termes exactement tels qu'ils apparaissent à l'aide de https://www.google.com et notez le nombre de résultats renvoyés.
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 le terme de recherche ne correspond à aucun document , mettez un 0 dans la Results
colonne.
Étape 3:
Calculez y = floor(H * log10(r + 1))
pour chaque ligne, où r est la Results
valeur. H est toujours de 0,75 ici.
Search Term Results y
"a" 6950000000 7
"a c" 861000000 6
"a ca" 2990000 4
"a car" 53900000 5
Étape 4:
Disposez le y
nombre de barres verticales ( |
) au-dessus du dernier caractère de chaque terme de recherche sans guillemets, en utilisant des espaces pour remplir les zones vides, dans une sorte de graphique à barres.
|
| |
| | |
| |||
| |||
| |||
| |||
a car
Ce graphique est le résultat final de votre programme et la seule chose dont il a besoin pour sortir. Il devrait aller à la sortie standard.
Notation
Il s'agit de code-golf , donc le programme le plus court en octets l' emporte.
Remarques
- Vous pouvez utiliser des raccourcisseurs d'URL ou d'autres outils de recherche / API à condition que les résultats soient les mêmes que pour la recherche sur https://www.google.com .
- Je sais que les guillemets doubles ne sont pas un moyen infaillible d'exclure les redirections "vouliez-vous dire ...". L'ajout
&nfpr=1
à l'URL ne fonctionne pas toujours non plus . Ne vous inquiétez pas de ces inexactitudes. Recherchez simplement leAbout X results...
message, peu importe ce qui apparaît, ou définissez-leResults
sur 0 s'il n'y en a pas. - Il y a une colonne vide au-dessus de n'importe quel espace dans l'expression de recherche dans le graphique.
- Le graphique ne doit pas être plus large ou plus haut qu'il ne devrait l'être (par exemple avec des espaces).
- Ce n'est pas grave si votre programme a des effets secondaires comme l'ouverture d'un navigateur Web afin que les pages cryptées Google html / js puissent être lues au fur et à mesure qu'elles sont rendues.
Réponses:
Rubis,
316295 octetsMalheureusement, les demandes ont juste cessé de fonctionner sur le testeur en ligne que j'utilisais, donc je dois continuer à jouer ce soir ou demain.
Explication: je prends l'entrée via ARGV. Ensuite, j'envoie simplement une demande pour chaque sous-chaîne qui ne se termine pas dans un espace, trouve les résultats via l'expression régulière (et par défaut
0
si l'expression régulière ne correspond pas), puis crée l'histogramme avec des barres horizontales. À la fin, j'inverse toutes les lignes et les transpose pour créer l'histogramme vertical.la source