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ą)


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")

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 !


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.


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)).


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.


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.

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.


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.


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: /


Ł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.


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”.


2

PHP, 65 bajtów

echo substr_count(file_get_contents('http://enwp.org'),'Canada');
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.