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


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

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 !


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.


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


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.


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.

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.


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.


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


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.


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


2

PHP, 65 octets

echo substr_count(file_get_contents('http://enwp.org'),'Canada');
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.