¿Fue realmente el día de Canadá?


22

¡El 1 de julio es el día de Canadá (yay Canadá)! ¿O es eso? Parece que la página de Wikipedia para este día tiene mucho contenido relacionado con Canadá, pero ¿hay otro día que sea más canadiense?

Su tarea es escribir un programa o función que tome una fecha (mes y día) como entrada y devuelva o envíe el número de menciones de "Canadá" en la página de Wikipedia para la fecha de entrada. Algunas reglas:

  • Las fechas se pueden ingresar en cualquier formato razonable de su elección
  • Su envío debe extraer datos de la url en.wikipedia.org/wiki/Month_Day.
  • Solo "Canada"deben buscarse y contarse las subcadenas incluidas, y solo en el caso del título. "Canadian"no cuenta, sin "Canada's"embargo cuenta. Mientras exista el texto exacto, sensible a mayúsculas y minúsculas "Canada"dentro de una cadena, es una coincidencia
  • El contenido de la página se considera cualquier cosa dentro del .htmlarchivo correspondiente (es decir, lo que aparece si descarga como página .htmly la abre en el Bloc de notas)
  • El resultado puede enviarse a STDOUT, devolverse o mostrarse de cualquier otra manera razonable

Casos de prueba:

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

Este es el código de golf, por lo que gana la presentación más corta

(Como un bono sin recompensa, estoy interesado en ver cuál es el día con el conteo más alto)


¿Se puede usar la API de Wikipedia?
LegionMammal978

No sé mucho al respecto, así que dudo en decir que sí en caso de que haya una función trivial. Use su mejor criterio y si lo hace demasiado fácil, por favor abstenerse
wnnmaw 05 de

99
Entonces, las referencias a Canadaville , Canadair , Canadarm , Canadaga , Canadarago , Canaday , Canadaspis , et al. ¿contar?
msh210

@ msh210, sí, que lo hacen
wnnmaw

1
¡El 1 de julio es el día con el conteo más alto! Escribió un programa rápido para ello, aunque no es golf.
Andrew

Respuestas:


4

Pyth, 31 bytes

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

No funciona en la implementación en línea, el servidor deshabilita el acceso a Internet. Quería usar http://wki.pe/July_1 pero lamentablemente es una redirección del lado del cliente, por lo que busca la página incorrecta. El formato de entrada es July_1.

El código es básicamente solo:

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

24

Bash, 43 42 40 bytes

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

Usos curl, grepy wcpara contar las ocurrencias de "Canadá" en la página web especificada. Al igual que las otras respuestas, la entrada se da en el formato July_1. Esta es la primera vez que publico en Code Golf SE y no estoy muy familiarizado con todas las reglas. Cualquier comentario sería muy bienvenido.

No me di cuenta de que la salida a STDERR se ignora tradicionalmente. ¡Gracias por los 3 bytes, Dennis !


Pero curl -sLaún no sería más corto que wget -qO-?
Nick Matteo

1
La salida a STDERR se ignora de manera predeterminada , por lo que puede usarla curlsin -s(o wgetsin -q).
Dennis

@ Dennis Gracias! No sabía que STDERRse ignora. Muy apreciado.
Sriram

@kundor Ese es un buen punto. Por alguna razón, combinar las dos banderas nunca se me ocurrió. Aún así, dado que la salida a STDERRse ignora por defecto, sería más corto omitirla por -scompleto.
Sriram

15

Perl 5, 39 bytes

38 bytes, más 1 para en -pelugar de-e

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

Toma entrada como July_1.

Gracias a busukxuan por salvarme siete bytes.


1
No estoy familiarizado con curl, pero ¿es posible guardar los seis bytes de "http: //"?
busukxuan

1
@busukxuan, sí, muchas gracias.
msh210

7

Python 3.5, 117 111 98 90 bytes

( -8 bytes ( 98 -> 90) gracias a alexwlchan )

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

Simplemente usa la biblioteca "urllib" incorporada de Python para buscar datos HTML y luego cuenta las apariciones de la palabra "Canadá" en esos datos. Intentaré jugar más golf con el tiempo donde y cuando pueda. Llámelo renombrando la lambdafunción a cualquier cosa y luego llamando ese nombre como una función normal envuelta print(). Por ejemplo, si se nombrara la función H, entonces la llamaría así print(H(Month_Day)).


44
Creo que puedes guardar ocho caracteres reemplazándolos .decode().count("Canada")con .count(b"Canada").
alexwlchan

@alexwlchan Sí, tienes razón. ¡Gracias! :)
R. Kap

Seguramente esto sería más corto en Python 2, ya que la urllib.urlopenfunción no está en un subpaquete ( from urllib import*versus from urllib.request import*), y b"Canada"podría reemplazarse "Canada"ya que las cadenas de Python 2 son bytes por defecto. Cuento 81 bytes en Python 2, y funciona de acuerdo con mis pruebas.
Mego

5

Mathematica, 60 bytes

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

Función anónima. De manera similar a la solución Perl 5, toma entradas como July_1.


Solo para cerrar el ciclo, este uso de la API está totalmente bien
wnnmaw 05 de

5

PowerShell, 52 bytes

((iwr enwp.org/$($args[0]))-csplit"Canada").length-1
  • Ingresar como July_1.
  • iwres la abreviatura de Invoke-WebRequest.
  • $($args[0])es el primer argumento de línea de comando. Iniciar script como OhCanada.ps1 July_1.
  • -csplit es una división sensible a mayúsculas y minúsculas.

5

C #, 85 bytes

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

Toma entrada dcomo July_1.

Y July_1 es verdaderamente el Día de Canadá, que tiene la mayor cantidad de referencias. Con February_1y April_23compartiendo 2do lugar con 18 "Canada"s cada uno.

Buscar "Canada"día (en paralelo), 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();

(El año 8 es el año bisiesto con la representación más corta). Potencialmente ineficiente, ya que OrderByprobablemente genera> 366 llamadas web, pero solo se acorta y parece completarse en no mucho más tiempo.


4

R, 99 96 bytes

x = función (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

Esto toma la entrada d en el formulario "Julio_1" y devuelve el recuento de Canadas. Cuenta las palabras contando el número de caracteres en la página, luego elimina la palabra Canadá de la página y vuelve a contar los caracteres. La cantidad de veces que aparece Canadá es la diferencia en estos recuentos dividida por la cantidad de letras en Canadá, 6.

editar: agradezco el siguiente consejo sobre reemplazar mi función con escaneo.


Creo que puede soltar x=function(d){y reemplazar con d=scan(,'')hacerlo programa en lugar de función y guardar algunos bytes.
pajonk

¡Gracias! Eso ahorró tres bytes. No he usado escaneo antes.
Austin

4

ES6, 89 bytes

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

Lamentablemente, desenvolver todas las promesas penaliza el tamaño: /


Buena respuesta, bienvenido al sitio!
DJMcMayhem

1
Un par de comentarios. Puede aplicar el mismo July_1truco "la entrada está en el formato " como el resto de las preguntas para guardar algunos bytes. También tiene un error al usar split().length(), que le dará una respuesta mayor que la meta.
IvanSanchez

De acuerdo con @IvanSanchez en el formato de entrada y necesita un -1después .length, pero puede guardar algunos bytes al omitir la https:parte de la URL, y usar split'Canada'(¡pero con backticks!) En lugar de split('Canada')guardar un par más!
Dom Hastings

¡Wow no tenía idea de los backticks! He hecho los cambios mencionados.
YardGlassOfCode

Firefox te permite soltar el // after http.
user2428118

3

Ruby + rizo, 44 ​​bytes

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

ruby -n+ 43 bytes. Toma entrada como July_1.


2

Clojure, 71 bytes

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

Sí, sería agradable de usar, http://enwp.orgpero supongo slurpque no maneja las redirecciones (?). Función anónima que toma día en el formato "Julio_1".


2

PHP, 65 bytes

echo substr_count(file_get_contents('http://enwp.org'),'Canada');
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.