Gdy szukasz czegoś w Google , wygodnie wyświetla wiadomość u góry strony, mówiąc coś w rodzaju About 53,000,000 results (0.22 seconds)
. (Liczby zmieniają się oczywiście w zależności od tego, czego szukano).
W tym wyzwaniu napiszesz program, który rysuje logarytmiczny wykres ASCII liczby wyników podanych przez Google podczas wyszukiwania wszystkich niepustych prefiksów danej frazy wyszukiwania.
Wyszukiwania Zwrot jest zdefiniowany jako jeden lub więcej ciągów małych znaków alfanumerycznych, oddzielone jedną spacją od siebie. W wyrażeniu regularnym wyszukiwane wyrażenie to (?:[a-z0-9]+ )*[a-z0-9]+
.
Tak im ok
, r
i 1a 2
to wszystkie zwroty wyszukiwania, ale I'm OK
, R
, 1a 2
, i nie są.
(Obowiązują ograniczenia dotyczące znaków, ponieważ Google rzadko bierze pod uwagę wielkość liter lub symbole specjalne. Ucieczka od znaków innych niż alfanumeryczne w adresach URL również stanowi problem).
Spec
Twój program musi pobrać frazę wyszukiwania i dodatnią liczbę zmiennoprzecinkową H z linii standardowej lub wiersza poleceń. (Możesz założyć, że są one poprawne i jest w porządku, jeśli potrzebujesz cudzysłowów lub czegoś wokół wyszukiwanego wyrażenia).
Jako działający przykład załóżmy, że szukana fraza to a car
i H = 0,75.
Krok 1:
Zbierz niepuste prefiksy wyszukiwanego wyrażenia i umieść je w podwójnych cudzysłowach . Cytaty zapewniają wyszukiwanie dokładnie tej frazy, unikając przekierowań typu „czy miałeś na myśli ...” .
Wyklucz wszystkie prefiksy kończące się spacją, np a[space]
.
Prefixes
"a"
"a c"
"a ca"
"a car"
Krok 2:
Wyszukaj każdy z tych terminów dokładnie tak, jak są wyświetlane za pomocą https://www.google.com , i zanotuj liczbę zwróconych wyników.
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
Jeśli wyszukiwane hasło nie pasuje do żadnego dokumentu , wpisz 0 w Results
kolumnie.
Krok 3:
Oblicz y = floor(H * log10(r + 1))
dla każdego wiersza, gdzie r jest Results
wartością. H wciąż tutaj wynosi 0,75.
Search Term Results y
"a" 6950000000 7
"a c" 861000000 6
"a ca" 2990000 4
"a car" 53900000 5
Krok 4:
Ułóż y
liczbę pionowych pasków ( |
) powyżej ostatniego znaku każdego niecytowanego wyszukiwanego terminu, używając spacji do wypełnienia pustych obszarów, na rodzaju wykresu słupkowego.
|
| |
| | |
| |||
| |||
| |||
| |||
a car
Ten wykres jest końcowym wynikiem twojego programu i jedyną rzeczą, którą musi wygenerować. Powinien przejść na standardowe wyjście.
Punktacja
To jest golf-golf, więc wygrywa najkrótszy program w bajtach .
Notatki
- Możesz używać skracaczy adresów URL lub innych narzędzi wyszukiwania / interfejsów API, o ile wyniki będą takie same jak w przypadku wyszukiwania na https://www.google.com .
- Wiem, że podwójne cudzysłowy nie są pewnym sposobem na wykluczenie przekierowań „miałeś na myśli ...”. Dodawanie
&nfpr=1
do adresu URL również nie zawsze działa . Nie martw się o te nieścisłości. PoszukajAbout X results...
wiadomości bez względu na wyskakujące okienko lub ustawResults
0, jeśli nie ma. - Pusta kolumna jest nad dowolną spacją w wyszukiwanym wyrażeniu na wykresie.
- Wykres nie powinien być szerszy ani wyższy niż powinien (np. Z białymi odstępami).
- Jest ok, jeśli Twój program ma skutki uboczne, takie jak otwarcie przeglądarki internetowej, dzięki czemu można odczytać tajemnicze strony HTML / JS podczas renderowania.
Odpowiedzi:
Rubin,
316295 bajtówNiestety żądania właśnie przestały działać na testerze internetowym, którego używałem, więc muszę zagrać w golfa jeszcze dziś wieczorem lub jutro.
Objaśnienie: Pobieram dane wejściowe za pośrednictwem ARGV. Następnie wysyłam żądanie dla każdego podłańcucha, który nie kończy się spacją, znajduję wyniki za pomocą wyrażenia regularnego (i domyślnie,
0
jeśli wyrażenie regularne nie pasuje), a następnie buduję histogram za pomocą poziomych pasków. Na koniec odwracam wszystkie linie i transponuję je, aby utworzyć pionowy histogram.źródło