Czy to był naprawdę dzień Kanady?

22

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 .htmlpliku (tj. Co pojawia się, jeśli pobierzesz jako stronę jako .htmli 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ą)

wnnmaw
źródło
Czy można używać interfejsu API Wikipedii?
LegionMammal978
Nie wiem zbyt wiele na ten temat, więc waham się powiedzieć tak, na wypadek gdyby była to trywialna funkcja. Skorzystaj z najlepszej oceny, a jeśli będzie to zbyt łatwe, wstrzymaj się od głosu
wnnmaw
9
Odniesienia do Canadaville , Canadair , Canadarm , Canadaga , Canadarago , Canaday , Canadaspis i in. liczyć?
msh210
@ msh210, Tak, że robią
wnnmaw
1
1 lipca to dzień o największej liczbie! Napisałem dla niego szybki program, choć nie jest golfem.
Andrew

Odpowiedzi:

4

Pyth, 31 bajtów

/jk'+"http://enwp.org/"z"Canada

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:

"".join(open("http://enwp.org/"+input())).count("Canada")
busukxuan
źródło
24

Bash, 43 42 40 bajtów

curl -L enwp.org/$@|grep -o Canada|wc -l

Używa curl, grepi wcdo 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 !

Sriram
źródło
Ale czy curl -sLnadal nie byłby krótszy niż wget -qO-?
Nick Matteo
1
Dane wyjściowe do STDERR są domyślnie ignorowane , więc możesz używać curlbez -s(lub wgetbez -q).
Dennis
@Dennis Thanks! Nie wiedziałem, że STDERRto jest ignorowane. Bardzo mile widziane.
Sriram
@kundor To dobra uwaga. Z jakiegoś powodu połączenie dwóch flag nigdy nie przyszło mi do głowy. Ponieważ jednak wyjście do STDERRjest domyślnie ignorowane, krótsze byłoby -scałkowite pominięcie .
Sriram
15

Perl 5, 39 bajtów

38 bajtów plus 1 za -pezamiast-e

$_=()=`curl -L enwp.org/$_`=~/Canada/g

Przyjmuje dane wejściowe jak July_1.

Dzięki busukxuan za uratowanie mnie siedmiu bajtów.

msh210
źródło
1
Nie znam curl, ale czy można zapisać sześć bajtów „http: //”?
busukxuan
1
@busukxuan, tak, wielkie dzięki.
msh210
7

Python 3.5, 117 111 98 90 bajtów

( -8 bajtów ( 98 -> 90) dzięki alexwlchan )

from urllib.request import*
lambda i:urlopen('http://enwp.org/'+i).read().count(b"Canada")

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ę lambdafunkcji na dowolną, a następnie wywołując tę ​​nazwę, jak normalna funkcja opakowana print(). Na przykład, gdyby funkcja została nazwana H, wywołałbyś ją tak print(H(Month_Day)).

R. Kap
źródło
4
Myślę, że możesz uratować osiem postaci, zastępując .decode().count("Canada")je .count(b"Canada").
alexwlchan
@alexwlchan Tak, masz rację. Dzięki! :)
R. Kap
Z pewnością byłoby to krótsze w Pythonie 2, ponieważ urllib.urlopenfunkcja nie znajduje się w podpakiecie (w from urllib import*przeciwieństwie do from urllib.request import*), i b"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.
Mego
5

Mathematica, 60 bajtów

Import["http://enwp.org/"<>#,"Source"]~StringCount~"Canada"&

Funkcja anonimowa. Podobnie jak w przypadku rozwiązania Perl 5, pobiera dane wejściowe podobne July_1.

LegionMammal978
źródło
Aby zamknąć pętlę, to użycie interfejsu API jest całkowicie w porządku
wnnmaw
5

PowerShell, 52 bajty

((iwr enwp.org/$($args[0]))-csplit"Canada").length-1
  • Wprowadź jako July_1.
  • iwrjest skrótem od Invoke-WebRequest.
  • $($args[0])jest argumentem pierwszego wiersza poleceń. Uruchom skrypt jako OhCanada.ps1 July_1.
  • -csplit rozróżnia małe i wielkie litery.
Kobi
źródło
5

C #, 85 bajtów

return Regex.Matches(new WebClient().DownloadString("http://enwp.org/"+d),"Canada").Count;

Przyjmuje dane wejściowe djak July_1.

I July_1 to naprawdę Dzień Kanady, mając najwięcej referencji. Z February_1i April_23dzielenie się drugim miejscem po 18 "Canada"sekund.

Znajdź "Canada"dzień (równolegle), 207 bajtów:

return Enumerable.Range(0,366).Select(i=>new DateTime(8,1,1).AddDays(i).ToString("MMMM_d")).AsParallel().OrderBy(d=>Regex.Matches(new WebClient().DownloadString("http://enwp.org/"+d),"Canada").Count).Last();

(Rok 8 jest rokiem przestępnym o najkrótszej reprezentacji). Potencjalnie nieefektywny, ponieważ OrderByprawdopodobnie generuje> 366 połączeń internetowych, ale po prostu idzie krócej i wydaje się, że kończy się w niewiele więcej czasu.

weston
źródło
4

R 99 99 bajtów

x = funkcja (d) {p = readLines (paste0 (" http://enwp.org/ ”, d)); suma (nchar (p) -nchar (gsub („Kanada”, „”, p))) / 6}

d=scan(,"");p=readLines(paste0("http://enwp.org/",d));sum(nchar(p)-nchar(gsub("Canada","",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.

Austin
źródło
Myślę, że możesz upuścić x=function(d){i zastąpić d=scan(,'')go programowaniem zamiast funkcji i oszczędzaniem niektórych bajtów.
pajonk
Dzięki! To zaoszczędziło trzy bajty. Nie korzystałem wcześniej ze skanowania.
Austin,
4

ES6, 89 bajtów

d=>fetch('http://enwp.org/'+d).then(r=>r.text().then(t=>alert(t.split`Canada`.length-1)))

Niestety rozpakowanie wszystkich obietnic ma wpływ na rozmiar: /

YardGlassOfCode
źródło
Ładna odpowiedź, witamy na stronie!
DJMcMayhem
1
Kilka komentarzy. Możesz zastosować tę samą July_1sztuczkę „wejście jest w formacie ”, jak w pozostałych pytaniach, aby zapisać kilka bajtów. Masz również błąd przy użyciu split().length(), który da ci odpowiedź większą niż cel.
IvanSanchez
Zgadzam się z @IvanSanchez w sprawie formatu wejściowego i potrzebuję -1po nim .length, ale możesz zapisać niektóre bajty, pomijając https:część adresu URL, i użyj split'Canada'(ale z backticks!) Zamiast split('Canada')zaoszczędzić kilka więcej!
Dom Hastings,
Wow nie miał pojęcia o backticksach! Dokonałem wspomnianych zmian.
YardGlassOfCode
Firefox pozwala na spadek //po http.
user2428118,
3

Ruby + curl, 44 bajty

p`curl -L enwp.org/#$_`.scan(/Canada/).size

ruby -n+ 43 bajty. Przyjmuje dane wejściowe jak July_1.

Lynn
źródło
2

Clojure, 71 bajtów

#(count(re-seq #"Canada"(slurp(str"https://en.wikipedia.org/wiki/"%))))

Tak, byłoby miło używać, http://enwp.orgale chyba slurpnie obsługuje przekierowań (?). Anonimowa funkcja, która zajmuje dzień w formacie „July_1”.

Cliffroot
źródło
2

PHP, 65 bajtów

echo substr_count(file_get_contents('http://enwp.org'),'Canada');
MonkeyZeus
źródło