War es wirklich Kanada-Tag?

22

Der 1. Juli ist Kanada-Tag (yay Kanada)! Oder ist es? Es scheint, dass die Wikipedia- Seite für diesen Tag viele kanadische Inhalte enthält, aber gibt es einen anderen Tag, der kanadischer ist?

Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die ein Datum (Monat und Tag) als Eingabe verwendet und die Anzahl der Erwähnungen von "Kanada" auf der Wikipedia-Seite für das eingegebene Datum zurückgibt oder ausgibt. Einige Regeln:

  • Termine können in jedem vernünftigen Format Ihrer Wahl eingegeben werden
  • Ihr Beitrag muss Daten aus der URL entnehmen en.wikipedia.org/wiki/Month_Day.
  • Es "Canada"muss nur nach eingeschlossenen Teilzeichenfolgen gesucht und diese gezählt werden, und dies nur in der Groß- und Kleinschreibung. "Canadian"zählt nicht, zählt aber "Canada's". Solange der genaue, case-senstitive Text "Canada"in einem String existiert, ist es eine Übereinstimmung
  • Der Inhalt der Seite wird als Bestandteil der entsprechenden .htmlDatei betrachtet (dh was wird angezeigt, wenn Sie die Seite als herunterladen .htmlund im Editor öffnen).
  • Das Ergebnis kann an STDOUT ausgegeben, zurückgegeben oder auf andere angemessene Weise angezeigt werden

Testfälle:

July 1 => 34
May 14 => 1
Oct 31 => 2
July 4 => 2

Dies ist Codegolf, also gewinnt die kürzeste Einreichung

(Als nicht belohnter Bonus bin ich daran interessiert zu sehen, was der Tag mit der höchsten Anzahl ist.)

wnnmaw
quelle
Kann die Wikipedia-API verwendet werden?
LegionMammal978
Ich weiß nicht viel darüber, also zögere ich, Ja zu sagen, falls es eine triviale Funktion gibt. Verwenden Sie Ihr bestes Urteilsvermögen und wenn es zu einfach macht, enthalten Sie sich bitte
wnnmaw
9
So Verweise auf Canadaville , Canadair , Canadarm , Canadaga , Canadarago , Canaday , Canadaspis , et al. Anzahl?
msh210
@ msh210, Ja, das tun sie
wnnmaw
1
Der 1. Juli ist der Tag mit der höchsten Zählung! Schrieb ein schnelles Programm dafür, obwohl es nicht golfen ist.
Andrew

Antworten:

4

Pyth, 31 Bytes

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

Funktioniert nicht in der Online-Implementierung, der Server deaktiviert den Internetzugang. Ich wollte http://wki.pe/July_1 verwenden, aber leider handelt es sich um eine clientseitige Weiterleitung, sodass die falsche Seite abgerufen wird. Das Eingabeformat ist July_1.

Der Code ist im Grunde nur:

"".join(open("http://enwp.org/"+input())).count("Canada")
busukxuan
quelle
24

Bash, 43 42 40 Bytes

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

Verwendet,, curlund grep, wcum Vorkommen von "Kanada" auf einer bestimmten Webseite zu zählen. Wie bei den anderen Antworten erfolgt die Eingabe im Format July_1. Dies ist mein erster Beitrag im Code Golf SE und ich kenne mich nicht mit allen Regeln aus. Jede Rückmeldung wäre sehr willkommen.

Wusste nicht, dass die Ausgabe an STDERR traditionell ignoriert wird. Danke für die 3 Bytes, Dennis !

Sriram
quelle
Wäre aber nicht curl -sLnoch kürzer als wget -qO-?
Nick Matteo
1
Die Ausgabe an STDERR wird standardmäßig ignoriert , sodass Sie curlohne -s(oder wgetohne -q) verwenden können.
Dennis
@ Tennis Danke! Ich wusste nicht, dass STDERRdas ignoriert wird. Sehr geschätzt.
Sriram
@kundor Das ist ein guter Punkt. Aus irgendeinem Grund ist mir das Kombinieren der beiden Flags nie in den Sinn gekommen. Da die Ausgabe in STDERRstandardmäßig ignoriert wird, ist es immer noch kürzer, das Ganze wegzulassen -s.
Sriram
15

Perl 5, 39 Bytes

38 Bytes plus 1 für -pestatt-e

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

Nimmt Eingaben wie July_1.

Vielen Dank an busukxuan , der mir sieben Bytes gespart hat.

msh210
quelle
1
Ich bin nicht vertraut mit Locken, aber ist es möglich, die sechs Bytes von "http: //" zu speichern?
Busukxuan
1
@ Busukxuan, yep, vielen Dank.
msh210
7

Python 3.5, 117 111 98 90 Bytes

( -8 bytes ( 98 -> 90) dank alexwlchan )

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

Verwendet einfach die in Python integrierte "urllib" -Bibliothek, um HTML-Daten abzurufen, und zählt dann die Vorkommen des Wortes "Kanada" in diesen Daten. Ich werde versuchen, im Laufe der Zeit mehr Golf zu spielen, wo und wann ich kann. Rufen Sie es auf, indem Sie die lambdaFunktion in einen beliebigen Namen umbenennen und diesen Namen dann wie eine normale Funktion aufrufen print(). Wenn die Funktion beispielsweise benannt wäre H, würden Sie sie wie folgt aufrufen print(H(Month_Day)).

R. Kap
quelle
4
Ich glaube , Sie acht Zeichen speichern kann durch den Austausch .decode().count("Canada")mit .count(b"Canada").
Alexwlchan
@alexwlchan Ja, du hast recht. Vielen Dank! :)
R. Kap
Sicherlich wäre dies in Python 2 kürzer, da die urllib.urlopenFunktion nicht in einem Unterpaket ( from urllib import*versus from urllib.request import*) enthalten ist und b"Canada"durch ersetzt werden könnte, "Canada"da die Zeichenfolgen von Python 2 standardmäßig Bytes sind. Ich zähle 81 Bytes in Python 2 und es funktioniert nach meinen Tests.
Mego
5

Mathematica, 60 Bytes

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

Anonyme Funktion. Ähnlich wie bei der Perl 5-Lösung, erfolgt die Eingabe wie bei July_1.

LegionMammal978
quelle
Nur um die Schleife zu schließen, ist diese Verwendung der API völlig in Ordnung
wnnmaw
5

PowerShell, 52 Byte

((iwr enwp.org/$($args[0]))-csplit"Canada").length-1
  • Eingabe als July_1.
  • iwrist eine Abkürzung für Invoke-WebRequest.
  • $($args[0])ist das erste Kommandozeilenargument. Skript starten als OhCanada.ps1 July_1.
  • -csplit ist case sensitive split.
Kobi
quelle
5

85 Bytes

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

Nimmt Eingaben dwie July_1.

Und es July_1 ist wahrlich Canada Day mit den meisten Referenzen. Mit February_1und April_23teilen sich den 2. Platz mit jeweils 18 "Canada"s.

Findetag "Canada"(parallel), 207 Bytes:

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();

(Jahr 8 ist das Schaltjahr mit der kürzesten Darstellung). Potenziell ineffizient, da das OrderBywahrscheinlich> 366 Webanrufe erzeugt, aber nur kürzer wird und in nicht viel mehr Zeit fertig zu sein scheint.

Weston
quelle
4

R 99 96 Bytes

x = Funktion (d) {p = readLines (paste0 (" http://enwp.org/ ", d)); Summe (nchar (p) -nchar (gsub ("Canada", "", p)) / 6}

d=scan(,"");p=readLines(paste0("http://enwp.org/",d));sum(nchar(p)-nchar(gsub("Canada","",p)))/6

Dies übernimmt die Eingabe d in der Form "Juli_1" und gibt die Anzahl der Kanadier zurück. Es zählt die Wörter, indem es die Anzahl der Zeichen auf der Seite zählt, entfernt dann das Wort Kanada von der Seite und zählt die Zeichen erneut. Die Häufigkeit, mit der Kanada auftaucht, ist die Differenz zwischen diesen Zählungen geteilt durch die Anzahl der Buchstaben in Kanada, 6.

Bearbeiten: Ich schätze den folgenden Tipp zum Ersetzen meiner Funktion durch Scannen.

Austin
quelle
Ich denke, Sie können das löschen x=function(d){und ersetzen, d=scan(,'')indem Sie es programmieren, anstatt zu funktionieren und einige Bytes zu sparen.
Pajonk
Vielen Dank! Das hat drei Bytes gespart. Ich habe noch nie einen Scan durchgeführt.
Austin
4

ES6, 89 Bytes

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

Leider bestraft das Auspacken aller Versprechen die Größe: /

YardGlassOfCode
quelle
Schöne Antwort, willkommen auf der Seite!
DJMcMayhem
1
Paar Kommentare. Sie können denselben July_1Trick "Eingabe erfolgt im Format " anwenden wie bei den restlichen Fragen, um einige Bytes zu sparen. Sie haben auch einen Fehler bei der Verwendung split().length(), wodurch Sie eine Antwort erhalten, die über dem Ziel liegt.
IvanSanchez
Stimmen Sie mit @IvanSanchez über das Eingabeformat überein und benötigen Sie ein -1nach dem .length, aber Sie können einige Bytes sparen, indem Sie den https:Teil der URL weglassen , und verwenden split'Canada'(aber mit Backticks!), Anstatt split('Canada')ein paar mehr zu speichern!
Dom Hastings
Wow hatte keine Ahnung von Backticks! Ich habe die genannten Änderungen vorgenommen.
YardGlassOfCode
Mit Firefox können Sie das //After löschen http.
user2428118
3

Ruby + Curl, 44 Bytes

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

ruby -n+ 43 Bytes. Nimmt Eingaben wie July_1.

Lynn
quelle
2

Clojure, 71 Bytes

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

Ja, es wäre schön zu benutzen, http://enwp.orgaber ich denke, slurpes werden keine Weiterleitungen verarbeitet (?). Anonyme Funktion, die einen Tag im Format "Juli_1" benötigt.

Cliffroot
quelle
2

PHP, 65 Bytes

echo substr_count(file_get_contents('http://enwp.org'),'Canada');
MonkeyZeus
quelle