1 lipca to dzień Kanady (yay Canada)! Albo to jest? Wygląda na to, że strona Wikipedii na ten dzień zawiera wiele treści związanych z Kanadą, ale czy jest inny dzień, który jest bardziej kanadyjski?
Twoim zadaniem jest napisanie programu lub funkcji, która przyjmuje datę (miesiąc i dzień) jako dane wejściowe i zwraca lub wyświetla liczbę wzmianek o „Kanadzie” na stronie Wikipedii dla wprowadzonej daty. Niektóre zasady:
- Daty mogą być wprowadzane w dowolnym rozsądnym wybranym formacie
- Twoje zgłoszenie musi pobrać dane z adresu URL
en.wikipedia.org/wiki/Month_Day
. "Canada"
Należy tylko wyszukiwać i liczyć uwzględnione podciągi i tylko w przypadku tytułu."Canadian"
się nie liczy, ale"Canada's"
się liczy. Dopóki w"Canada"
ciągu istnieje dokładny, rozróżniający wielkość liter tekst , jest on zgodny- Zawartość strony jest uważana za wszystko w odpowiednim
.html
pliku (tj. Co pojawia się, jeśli pobierzesz jako stronę jako.html
i otworzysz ją w Notatniku) - Wynik może zostać przesłany do STDOUT, zwrócony lub wyświetlony w inny rozsądny sposób
Przypadki testowe:
July 1 => 34
May 14 => 1
Oct 31 => 2
July 4 => 2
To jest golf golfowy, więc wygrywa najkrótszy czas
(Jako niezapłaconą premię jestem zainteresowany, aby zobaczyć, jaki jest dzień z największą liczbą)
Odpowiedzi:
Pyth, 31 bajtów
Nie działa na implementacji online, serwer wyłącza dostęp do Internetu. Chciałem użyć http://wki.pe/July_1, ale niestety jest to przekierowanie po stronie klienta, więc pobiera niewłaściwą stronę. Format wejściowy to
July_1
.Kod jest w zasadzie tylko:
źródło
Bash,
434240 bajtówUżywa
curl
,grep
iwc
do zliczania wystąpień „Kanady” na określonej stronie internetowej. Podobnie jak inne odpowiedzi, dane wejściowe są podawane w formacieJuly_1
. To mój pierwszy post na Code Golf SE i nie jestem do końca zaznajomiony z wszystkimi zasadami. Wszelkie opinie będą mile widziane.Nie zdawałem sobie sprawy, że wyjście do
STDERR
jest tradycyjnie ignorowane. Dzięki za 3 bajty, Dennis !źródło
curl -sL
nadal nie byłby krótszy niżwget -qO-
?curl
bez-s
(lubwget
bez-q
).STDERR
to jest ignorowane. Bardzo mile widziane.STDERR
jest domyślnie ignorowane, krótsze byłoby-s
całkowite pominięcie .Perl 5, 39 bajtów
38 bajtów plus 1 za
-pe
zamiast-e
Przyjmuje dane wejściowe jak
July_1
.Dzięki busukxuan za uratowanie mnie siedmiu bajtów.
źródło
Python 3.5,
1171119890 bajtów( -8 bajtów (
98 -> 90
) dzięki alexwlchan )Po prostu używa wbudowanej biblioteki „urllib” Pythona do pobierania danych HTML, a następnie zlicza wystąpienie słowa „Kanada” w tych danych. Z czasem spróbuję grać w golfa, gdzie i kiedy będę mógł. Wywołaj go, zmieniając nazwę
lambda
funkcji na dowolną, a następnie wywołując tę nazwę, jak normalna funkcja opakowanaprint()
. Na przykład, gdyby funkcja została nazwanaH
, wywołałbyś ją takprint(H(Month_Day))
.źródło
.decode().count("Canada")
je.count(b"Canada")
.urllib.urlopen
funkcja nie znajduje się w podpakiecie (wfrom urllib import*
przeciwieństwie dofrom urllib.request import*
), ib"Canada"
można je zastąpić,"Canada"
ponieważ ciągi Python 2 są domyślnie bajtami. Liczę 81 bajtów w Pythonie 2 i działa zgodnie z moimi testami.Mathematica, 60 bajtów
Funkcja anonimowa. Podobnie jak w przypadku rozwiązania Perl 5, pobiera dane wejściowe podobne
July_1
.źródło
PowerShell, 52 bajty
July_1
.iwr
jest skrótem odInvoke-WebRequest
.$($args[0])
jest argumentem pierwszego wiersza poleceń. Uruchom skrypt jakoOhCanada.ps1 July_1
.-csplit
rozróżnia małe i wielkie litery.źródło
C #, 85 bajtów
Przyjmuje dane wejściowe
d
jakJuly_1
.I
July_1
to naprawdę Dzień Kanady, mając najwięcej referencji. ZFebruary_1
iApril_23
dzielenie się drugim miejscem po 18"Canada"
sekund.Znajdź
"Canada"
dzień (równolegle), 207 bajtów:(Rok 8 jest rokiem przestępnym o najkrótszej reprezentacji). Potencjalnie nieefektywny, ponieważ
OrderBy
prawdopodobnie generuje> 366 połączeń internetowych, ale po prostu idzie krócej i wydaje się, że kończy się w niewiele więcej czasu.źródło
R
99 99bajtówx = funkcja (d) {p = readLines (paste0 (" http://enwp.org/ ”, d)); suma (nchar (p) -nchar (gsub („Kanada”, „”, p))) / 6}Pobiera dane wejściowe d w postaci „Lipiec_1” i zwraca liczbę Kanad. Liczy słowa, licząc liczbę znaków na stronie, a następnie usuwa słowo Kanada ze strony i ponownie liczy znaki. Liczba wyświetleń Kanady to różnica w tych liczbach podzielona przez liczbę liter w Kanadzie, 6.
edycja: Doceniam podpowiedź poniżej dotyczącą zamiany mojej funkcji na skanowanie.
źródło
x=function(d){
i zastąpićd=scan(,'')
go programowaniem zamiast funkcji i oszczędzaniem niektórych bajtów.ES6, 89 bajtów
Niestety rozpakowanie wszystkich obietnic ma wpływ na rozmiar: /
źródło
July_1
sztuczkę „wejście jest w formacie ”, jak w pozostałych pytaniach, aby zapisać kilka bajtów. Masz również błąd przy użyciusplit().length()
, który da ci odpowiedź większą niż cel.-1
po nim.length
, ale możesz zapisać niektóre bajty, pomijająchttps:
część adresu URL, i użyjsplit'Canada'
(ale z backticks!) Zamiastsplit('Canada')
zaoszczędzić kilka więcej!//
pohttp
.Ruby + curl, 44 bajty
ruby -n
+ 43 bajty. Przyjmuje dane wejściowe jakJuly_1
.źródło
Clojure, 71 bajtów
Tak, byłoby miło używać,
http://enwp.org
ale chybaslurp
nie obsługuje przekierowań (?). Anonimowa funkcja, która zajmuje dzień w formacie „July_1”.źródło
PHP, 65 bajtów
źródło