Était-ce vraiment la fête du Canada?

22

Le 1er juillet est la fête du Canada (yay Canada)! Ou est-ce? Il semble que la page Wikipedia de ce jour ait beaucoup de contenu lié au Canada, mais y a-t-il un autre jour qui est plus canadien?

Votre tâche consiste à écrire un programme ou une fonction qui prend une date (mois et jour) en entrée et renvoie ou affiche le nombre de mentions de «Canada» sur la page Wikipédia pour la date entrée. Certaines règles:

  • Les dates peuvent être saisies dans tout format raisonnable de votre choix
  • Votre soumission doit extraire les données de l'URL en.wikipedia.org/wiki/Month_Day.
  • Seules "Canada"doivent être recherchées et comptées les sous-chaînes incluses, et uniquement dans la casse du titre. "Canadian"ne compte pas, mais "Canada's"compte. Tant que le texte exact, sensible à la casse "Canada"existe dans une chaîne, c'est une correspondance
  • Le contenu de la page est considéré comme n'importe quoi dans le .htmlfichier correspondant (c'est-à-dire ce qui apparaît si vous téléchargez en tant que page en tant que .htmlet l'ouvrez dans le Bloc-notes)
  • Le résultat peut être sorti vers STDOUT, retourné ou affiché de toute autre manière raisonnable

Cas de test:

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

C'est le golf de code, donc la soumission la plus courte gagne

(En tant que bonus non récompensé, je suis intéressé de voir quel est le jour avec le plus grand nombre)

wnnmaw
la source
L'API Wikipedia peut-elle être utilisée?
LegionMammal978
Je n'en sais pas grand-chose, donc j'hésite à dire oui au cas où il y aurait une fonction triviale. Utilisez votre meilleur jugement et si cela vous facilite la tâche, veuillez vous abstenir
wnnmaw
9
Les références à Canadaville , Canadair , Canadarm , Canadaga , Canadarago , Canaday , Canadaspis , et al. compter?
msh210
@ msh210, oui, ce qu'ils font
wnnmaw
1
Le 1er juillet est le jour avec le plus grand nombre! A écrit un programme rapide pour cela, bien qu'il ne soit pas joué au golf.
Andrew

Réponses:

4

Pyth, 31 octets

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

Ne fonctionne pas sur l'implémentation en ligne, le serveur désactive l'accès à Internet. Je voulais utiliser http://wki.pe/July_1 mais malheureusement, c'est une redirection côté client, donc elle récupère la mauvaise page. Le format d'entrée est July_1.

Le code est fondamentalement juste:

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

Bash, 43 42 40 octets

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

Utilise curl, grepet wcpour compter les occurrences de «Canada» dans la page Web spécifiée. Comme les autres réponses, l'entrée est donnée dans le format July_1. C'est ma première publication sur le Code Golf SE et je ne connais pas bien toutes les règles. Toute rétroaction serait la bienvenue.

Je ne savais pas que la sortie vers STDERR était traditionnellement ignorée. Merci pour les 3 octets, Dennis !

Sriram
la source
Mais ne serait-il pas curl -sLencore plus court que wget -qO-?
Nick Matteo
1
La sortie vers STDERR est ignorée par défaut , vous pouvez donc l'utiliser curlsans -s(ou wgetsans -q).
Dennis
@Dennis Merci! Je ne savais pas que STDERRc'était ignoré. Très appréciée.
Sriram
@kundor C'est un bon point. Pour une raison quelconque, la combinaison des deux drapeaux ne m'est jamais venue à l'esprit. Pourtant, comme la sortie de STDERRest ignorée par défaut, il serait plus court d'omettre -sentièrement le.
Sriram
15

Perl 5, 39 octets

38 octets, plus 1 pour -peau lieu de-e

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

Prend l'entrée comme July_1.

Merci à busukxuan de m'avoir sauvé sept octets.

msh210
la source
1
Je ne suis pas familier avec curl, mais est-il possible d'enregistrer les six octets de "http: //"?
busukxuan
1
@busukxuan, oui, merci beaucoup.
msh210
7

Python 3.5, 117 111 98 90 octets

( -8 octets ( 98 -> 90) grâce à alexwlchan )

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

Utilise simplement la bibliothèque intégrée "urllib" de Python pour récupérer les données HTML, puis compte les occurrences du mot "Canada" dans ces données. Je vais essayer de jouer au golf au fil du temps où et quand je le pourrai. Appelez-la en renommant la lambdafonction en n'importe quoi, puis en appelant ce nom comme une fonction normale enveloppée print(). Par exemple, si la fonction était nommée H, vous l'appelleriez ainsi print(H(Month_Day)).

R. Kap
la source
4
Je pense que vous pouvez enregistrer huit caractères en les remplaçant .decode().count("Canada")par .count(b"Canada").
alexwlchan
@alexwlchan Oui, vous avez raison. Merci! :)
R. Kap
Cela serait sûrement plus court en Python 2, car la urllib.urlopenfonction n'est pas dans un sous-package ( from urllib import*par rapport à from urllib.request import*), et b"Canada"pourrait être remplacé par "Canada"puisque les chaînes de Python 2 sont des octets par défaut. Je compte 81 octets en Python 2, et cela fonctionne selon mes tests.
Mego
5

Mathematica, 60 octets

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

Fonction anonyme. De manière similaire à la solution Perl 5, prend des entrées comme July_1.

LegionMammal978
la source
Juste pour fermer la boucle, cette utilisation de l'API est tout à fait
correcte
5

PowerShell, 52 octets

((iwr enwp.org/$($args[0]))-csplit"Canada").length-1
  • Saisissez comme July_1.
  • iwrest l'abréviation de Invoke-WebRequest.
  • $($args[0])est le premier argument de la ligne de commande. Lancer le script en tant que OhCanada.ps1 July_1.
  • -csplit est une division sensible à la casse.
Kobi
la source
5

C #, 85 octets

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

Prend l'entrée dcomme July_1.

Et July_1 c'est vraiment la fête du Canada, ayant le plus de références. Avec February_1et April_23partage la 2e place avec 18 "Canada"s chacun.

Trouver le "Canada"jour (en parallèle), 207 octets:

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

(L'année 8 est l'année bissextile avec la représentation la plus courte). Potentiellement inefficace, dans la mesure où OrderByil génère probablement> 366 appels Web, mais va plus court et semble se terminer en moins de temps.

Weston
la source
4

R, 99 96 octets

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

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

Cela prend l'entrée d sous la forme "July_1" et renvoie le nombre de Canadas. Il compte les mots en comptant le nombre de caractères sur la page, puis supprime le mot Canada de la page et compte à nouveau les caractères. Le nombre de fois où le Canada se présente est la différence entre ces chiffres divisée par le nombre de lettres au Canada, 6.

edit: j'apprécie le conseil ci-dessous pour remplacer ma fonction par scan.

Austin
la source
Je pense que vous pouvez supprimer le x=function(d){et le remplacer en le d=scan(,'')faisant programme au lieu de fonction et en économisant quelques octets.
pajonk
Merci! Cela a permis d'économiser trois octets. Je n'ai jamais utilisé de scan auparavant.
Austin
4

ES6, 89 octets

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

Malheureusement, déballer toutes les promesses pénalise la taille: /

YardGlassOfCode
la source
Belle réponse, bienvenue sur le site!
DJMcMayhem
1
Quelques commentaires. Vous pouvez appliquer la même July_1astuce «l'entrée est au format » que le reste des questions pour économiser quelques octets. Vous avez également une erreur d'utilisation split().length(), qui vous donnera une réponse supérieure à l'objectif.
IvanSanchez
D'accord avec @IvanSanchez sur le format d'entrée et ayant besoin d'un -1après le .length, mais vous pouvez économiser quelques octets en omettant la https:partie de l'URL et utiliser split'Canada'(mais avec des astuces!) Au lieu d' split('Canada')en enregistrer quelques autres!
Dom Hastings
Wow n'avait aucune idée des backticks! J'ai effectué les changements mentionnés.
YardGlassOfCode
Firefox vous permet de supprimer l' //after http.
user2428118
3

Ruby + curl, 44 octets

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

ruby -n+ 43 octets. Prend l'entrée comme July_1.

Lynn
la source
2

Clojure, 71 octets

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

Ouais, ce serait bien d'utiliser http://enwp.orgmais je suppose slurpqu'il ne gère pas les redirections (?). Fonction anonyme qui prend jour au format "juillet_1".

cliffroot
la source
2

PHP, 65 octets

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