È stato davvero il giorno del Canada?


22

Il 1 ° luglio è il giorno del Canada (yay Canada)! O è? Sembra che la pagina di Wikipedia di oggi abbia molti contenuti correlati al Canada, ma c'è un altro giorno che è più canadese?

Il tuo compito è quello di scrivere un programma o una funzione che accetta una data (mese e giorno) come input e restituisce o genera il numero di menzioni di "Canada" sulla pagina di Wikipedia per la data inserita. Alcune regole:

  • Le date possono essere inserite in qualsiasi formato ragionevole di vostra scelta
  • L'invio deve estrarre i dati dall'URL en.wikipedia.org/wiki/Month_Day.
  • È "Canada"necessario cercare e contare solo le sottostringhe incluse e solo nel caso del titolo. "Canadian"non conta, tuttavia "Canada's"conta. Finché il testo esatto e sensibile al maiuscolo / minuscolo "Canada"esiste all'interno di una stringa, è una corrispondenza
  • I contenuti della pagina sono considerati qualsiasi cosa all'interno del .htmlfile corrispondente (ovvero ciò che viene visualizzato se scarichi come pagina come .htmle lo apri in Blocco note)
  • Il risultato può essere inviato a STDOUT, restituito o visualizzato in qualsiasi altro modo ragionevole

Casi test:

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

Questo è il golf del codice, quindi vince l'invio più breve

(Come bonus non ricompensato, sono interessato a vedere qual è il giorno con il conteggio più alto)


L'API di Wikipedia può essere utilizzata?
LegionMammal978,

Non ne so molto, quindi esito a dire di sì nel caso in cui vi sia una funzione banale. Usa il tuo miglior giudizio e se lo rende troppo facile, ti preghiamo di astenermi
wnnmaw,

9
Quindi riferimenti a Canadaville , Canadair , Canadarm , Canadaga , Canadarago , Canaday , Canadaspis , et al. contare?
msh210,

@ msh210, Sì, che lo fanno
wnnmaw,

1
Il 1 luglio è il giorno con il maggior numero di conteggi! Ha scritto un programma rapido per questo, sebbene non sia golfato.
Andrew,

Risposte:


4

Pyth, 31 byte

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

Non funziona sull'implementazione online, il server disabilita l'accesso a Internet. Volevo usare http://wki.pe/July_1 ma purtroppo è un reindirizzamento sul lato client quindi recupera la pagina sbagliata. Il formato di input è July_1.

Il codice è sostanzialmente solo:

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

24

Bash, 43 42 40 byte

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

Usi curl, grepe wcper contare le occorrenze di "Canada" nella pagina web specificata. Come le altre risposte, l'input è dato nel formato July_1. Questa è la mia prima pubblicazione su Code Golf SE e non conosco bene tutte le regole. Qualsiasi feedback sarebbe il benvenuto.

Non ho capito che l'output di STDERR viene tradizionalmente ignorato. Grazie per i 3 byte, Dennis !


Ma non sarebbe curl -sLancora più breve di wget -qO-?
Nick Matteo

1
L'output su STDERR è ignorato per impostazione predefinita , quindi è possibile utilizzarlo curlsenza -s(o wgetsenza -q).
Dennis,

@Dennis Grazie! Non sapevo che STDERRfosse ignorato. Molto apprezzato.
Sriram,

@kundor Questo è un buon punto. Per qualche ragione, combinare le due bandiere non mi è mai venuto in mente. Tuttavia, poiché l'output a STDERRviene ignorato per impostazione predefinita, sarebbe più breve omettere del -stutto.
Sriram,

15

Perl 5, 39 byte

38 byte, più 1 per -peanziché-e

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

Accetta input come July_1.

Grazie a busukxuan per avermi salvato sette byte.


1
Non ho familiarità con l'arricciatura, ma è possibile salvare i sei byte di "http: //"?
busukxuan,

1
@busukxuan, sì, molte grazie.
msh210,

7

Python 3.5, 117 111 98 90 byte

( -8 byte ( 98 -> 90) grazie ad alexwlchan )

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

Utilizza semplicemente la libreria "urllib" integrata di Python per recuperare i dati HTML e quindi conta le occorrenze della parola "Canada" in tali dati. Proverò a giocare a golf più nel tempo dove e quando posso. Chiamalo rinominando la lambdafunzione in qualsiasi cosa e quindi chiamando quel nome come una normale funzione racchiusa print(). Ad esempio, se la funzione fosse denominata H, la chiameresti come print(H(Month_Day)).


4
Penso che puoi salvare otto caratteri sostituendoli .decode().count("Canada")con .count(b"Canada").
alexwlchan,

@alexwlchan Sì, hai ragione. Grazie! :)
R. Kap

Sicuramente questo sarebbe più breve in Python 2, poiché la urllib.urlopenfunzione non è in un subpackage ( from urllib import*contro from urllib.request import*), e b"Canada"potrebbe essere sostituita "Canada"dal momento che le stringhe di Python 2 sono byte per impostazione predefinita. Conto 81 byte in Python 2 e funziona secondo i miei test.
Mego,

5

Mathematica, 60 byte

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

Funzione anonima. Analogamente alla soluzione Perl 5, accetta input come July_1.


Solo per chiudere il ciclo, questo uso dell'API è assolutamente perfetto
wnnmaw,

5

PowerShell, 52 byte

((iwr enwp.org/$($args[0]))-csplit"Canada").length-1
  • Inserisci come July_1.
  • iwrè l'abbreviazione di Invoke-WebRequest.
  • $($args[0])è il primo argomento della riga di comando. Inizia lo script come OhCanada.ps1 July_1.
  • -csplit è la divisione tra maiuscole e minuscole.

5

C #, 85 byte

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

Accetta input dcome July_1.

Ed July_1 è veramente il Canada Day, con il maggior numero di riferimenti. Con February_1e April_23condividendo il 2 ° posto con 18 "Canada"s ciascuno.

Trova "Canada"giorno (in parallelo), 207 byte:

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'anno 8 è l'anno bisestile con la rappresentazione più breve). Potenzialmente inefficiente, in quanto OrderByprobabilmente genera> 366 chiamate Web, ma va solo più breve e sembra completarsi in non molto più tempo.


4

R, 99 96 byte

x = function (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

Questo prende l'input d nel modulo "July_1" e restituisce il conteggio di Canadas. Conta le parole contando il numero di caratteri sulla pagina, quindi rimuove la parola Canada dalla pagina e conta nuovamente i caratteri. Il numero di volte in cui il Canada si presenta è la differenza in questi conteggi divisa per il numero di lettere in Canada, 6.

modifica: apprezzo il suggerimento che segue per sostituire la mia funzione con la scansione.


Penso che tu possa eliminare x=function(d){e sostituire con d=scan(,'')il farlo programmare invece di funzione e salvare alcuni byte.
pajonk,

Grazie! Ciò ha salvato tre byte. Non ho mai usato la scansione prima.
Austin,

4

ES6, 89 byte

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

Sfortunatamente scartare tutte le promesse penalizza la dimensione: /


Bella risposta, benvenuta nel sito!
DJMcMayhem

1
Commenti di coppia. È possibile applicare lo stesso July_1trucco "input is in the format " come il resto delle domande per salvare alcuni byte. Hai anche un errore durante l'utilizzo split().length(), che ti darà una risposta maggiore dell'obiettivo.
IvanSanchez,

Concordo con @IvanSanchez sul formato di input e che necessita di un -1dopo il .length, ma è possibile salvare alcuni byte omettendo la https:parte dell'URL e utilizzare split'Canada'(ma con i backtick!) Invece di split('Canada')salvare un altro paio!
Dom Hastings,

Wow non aveva idea dei bastoncini! Ho apportato le modifiche menzionate.
YardGlassOfCode

Firefox ti consente di eliminare il //dopo http.
user2428118

3

Rubino + arricciatura, 44 byte

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

ruby -n+ 43 byte. Accetta input come July_1.


2

Clojure, 71 byte

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

Sì, sarebbe bello da usare http://enwp.orgma immagino slurpche non gestisca i reindirizzamenti (?). Funzione anonima che richiede giorno nel formato "July_1".


2

PHP, 65 byte

echo substr_count(file_get_contents('http://enwp.org'),'Canada');
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.