Wenn Sie bei Google nach etwas suchen, wird am oberen Rand der Seite eine Meldung angezeigt, die etwa Folgendes enthält About 53,000,000 results (0.22 seconds)
. (Die Zahlen ändern sich natürlich je nachdem, wonach gesucht wurde.)
In dieser Herausforderung schreiben Sie ein Programm, das ein logarithmisches ASCII-Diagramm der Anzahl der von Google angegebenen Ergebnisse zeichnet, wenn alle nicht leeren Präfixe eines bestimmten Suchbegriffs durchsucht werden.
Ein Suchbegriff ist definiert als eine oder mehrere Zeichenfolgen von alphanumerischen Kleinbuchstaben, die durch ein Leerzeichen voneinander getrennt sind. In Regex ist ein Suchbegriff (?:[a-z0-9]+ )*[a-z0-9]+
.
So im ok
, r
und 1a 2
sind alle Such-Sätze, sondern I'm OK
, R
, 1a 2
, und , ist es nicht.
(Die Zeichenbeschränkungen sind vorhanden, da Google Groß- und Kleinschreibung oder spezielle Symbole nur selten berücksichtigt. Das Ausweichen von nicht alphanumerischen Zeichen in URLs ist ebenfalls problematisch.)
Spec
Ihr Programm muss einen Suchbegriff und eine positive Gleitkommazahl H entweder von stdin oder von der Befehlszeile aufnehmen. (Sie können davon ausgehen, dass sie gültig sind, und es ist in Ordnung, wenn Sie Anführungszeichen oder etwas um den Suchbegriff herum benötigen.)
Als Arbeitsbeispiel nehmen wir an, dass der Suchbegriff a car
H = 0,75 ist.
Schritt 1:
Sammeln Sie die nicht leeren Präfixe Ihres Suchbegriffs und setzen Sie sie in doppelte Anführungszeichen . Die Anführungszeichen stellen sicher, dass nach der genauen Phrase gesucht wird, und vermeiden Umleitungen , die Sie gemeint haben .
Schließen Sie alle Präfixe aus, die in einem Leerzeichen wie z a[space]
.
Prefixes
"a"
"a c"
"a ca"
"a car"
Schritt 2:
Suchen Sie jeden dieser Begriffe mithilfe von https://www.google.com genau so, wie er angezeigt wird , und notieren Sie die Anzahl der zurückgegebenen Ergebnisse.
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
Wenn der Suchbegriff nicht mit Dokumenten übereinstimmt , geben Sie eine 0 in die Results
Spalte ein.
Schritt 3:
Berechnen Sie y = floor(H * log10(r + 1))
für jede Zeile, wobei r der Results
Wert ist. H ist hier immer noch 0,75.
Search Term Results y
"a" 6950000000 7
"a c" 861000000 6
"a ca" 2990000 4
"a car" 53900000 5
Schritt 4:
Ordnen Sie die y
Anzahl der vertikalen Balken ( |
) über dem letzten Zeichen jedes nicht zitierten Suchbegriffs an, und verwenden Sie Leerzeichen, um leere Bereiche in einer Art Balkendiagramm zu füllen.
|
| |
| | |
| |||
| |||
| |||
| |||
a car
Dieses Diagramm ist das Endergebnis Ihres Programms und das einzige, was es ausgeben muss. Es sollte zu stdout gehen.
Wertung
Dies ist Code-Golf , also gewinnt das kürzeste Programm in Bytes .
Anmerkungen
- Sie können URL-Shortener oder andere Suchwerkzeuge / APIs verwenden, sofern die Ergebnisse mit denen der Suche unter https://www.google.com übereinstimmen .
- Ich weiß, dass doppelte Anführungszeichen kein todsicherer Weg sind , um Weiterleitungen von "Meinten Sie ..." auszuschließen. Das Hinzufügen
&nfpr=1
zur URL funktioniert auch nicht immer . Mach dir keine Sorgen über diese Ungenauigkeiten. Suchen Sie einfach nach derAbout X results...
Nachricht, egal was auftaucht, oder setzen Sie sieResults
auf 0, wenn keine vorhanden ist. - Über jedem Leerzeichen in der Suchphrase im Diagramm befindet sich eine leere Spalte.
- Das Diagramm sollte nicht breiter oder höher sein als es sein muss (z. B. mit Leerzeichen).
- Es ist in Ordnung, wenn Ihr Programm Nebenwirkungen wie das Öffnen eines Webbrowsers hat, damit die kryptischen Google HTML / JS-Seiten beim Rendern gelesen werden können.
Antworten:
Ruby,
316295 BytesLeider funktionierten die Anfragen bei dem von mir verwendeten Online-Tester nicht mehr, sodass ich heute Abend oder morgen noch weiter Golf spielen muss.
Erläuterung: Ich nehme die Eingabe über ARGV. Dann sende ich einfach eine Anfrage für jeden Teilstring, der nicht in einem Leerzeichen endet, finde die Ergebnisse über Regex (und standardmäßig,
0
wenn der Regex nicht übereinstimmt) und erstelle dann das Histogramm mit horizontalen Balken. Am Ende kehre ich alle Linien um und transponiere sie, um das vertikale Histogramm zu erstellen.quelle