Realmente foi o dia do Canadá?

22

1 de julho é o dia do Canadá (yay Canadá)! Ou é? Parece que a página da Wikipedia para este dia tem muito conteúdo relacionado ao Canadá, mas há outro dia mais canadense?

Sua tarefa é escrever um programa ou função que receba uma data (mês e dia) como entrada e retorne ou produza o número de menções de "Canadá" na página da Wikipedia para a data inserida. Algumas regras:

  • As datas podem ser inseridas em qualquer formato razoável de sua escolha
  • Seu envio deve extrair dados do URL en.wikipedia.org/wiki/Month_Day.
  • Somente "Canada"devem ser pesquisadas e contadas as substrings incluídas e apenas no título. "Canadian"não conta, no entanto "Canada's"conta. Desde que o texto exato, com distinção entre maiúsculas e minúsculas, "Canada"exista dentro de uma sequência, é uma correspondência
  • O conteúdo da página é considerado qualquer coisa no .htmlarquivo correspondente (ou seja, o que aparece se você fizer o download da página como a .htmle abrir no bloco de notas)
  • O resultado pode ser enviado para STDOUT, retornado ou exibido de qualquer outra maneira razoável

Casos de teste:

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

Esse é o código de golfe, portanto, a submissão mais curta vence

(Como um bônus não recompensado, estou interessado em ver qual é o dia com a contagem mais alta)

wnnmaw
fonte
A API da Wikipedia pode ser usada?
LegionMammal978
Não sei muito sobre isso, por isso hesito em dizer sim, caso haja uma função trivial. Use o bom senso e se torna muito fácil agradar a abster-se
wnnmaw
9
Assim, referências a Canadaville , Canadair , Canadarm , Canadaga , Canadarago , Canaday , Canadaspis , et al. contagem?
Msh210
@ msh210, Yep, que eles fazem
wnnmaw
11
1 de julho é o dia com a contagem mais alta! Escreveu um programa rápido para ele, embora não seja um jogo de golfe.
Andrew

Respostas:

4

Pitão, 31 bytes

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

Não funciona na implementação online, o servidor desabilita o acesso à Internet. Eu queria usar http://wki.pe/July_1, mas, infelizmente, é um redirecionamento do lado do cliente, para buscar a página errada. O formato de entrada é July_1.

O código é basicamente apenas:

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

Bash, 43 42 40 bytes

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

Usos curl, grepe wcpara contar as ocorrências de "Canadá" no webpage especificado. Como as outras respostas, a entrada é fornecida no formato July_1. Esta é minha primeira vez publicando no Code Golf SE e não estou familiarizado com todas as regras. Qualquer feedback seria bem-vindo.

Não percebeu que a saída para STDERR é tradicionalmente ignorada. Obrigado pelos 3 bytes, Dennis !

Sriram
fonte
Mas curl -sLainda não seria mais curto do que wget -qO-?
24516 Nick Matteo
11
A saída para STDERR é ignorada por padrão , para que você possa usar curlsem -s(ou wgetsem -q).
217 Dennis
@Dennis Thanks! Eu não sabia que isso STDERRé ignorado. Muito apreciado.
Sriram
@ Kundor Esse é um bom ponto. Por alguma razão, a combinação das duas bandeiras nunca me ocorreu. Ainda assim, como a saída para STDERRé ignorada por padrão, seria mais curto omitir -scompletamente.
Sriram 07/07
15

Perl 5, 39 bytes

38 bytes, mais 1 para em -pevez de-e

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

Toma entrada como July_1.

Obrigado ao busukxuan por me salvar sete bytes.

msh210
fonte
11
Eu não estou familiarizado com curl, mas é possível salvar os seis bytes de "http: //"?
busukxuan
11
@busukxuan, sim, muito obrigado.
Msh210
7

Python 3.5, 117 111 98 90 bytes

( -8 bytes ( 98 -> 90) graças a alexwlchan )

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

Simplesmente usa a biblioteca "urllib" interna do Python para buscar dados HTML e conta as ocorrências da palavra "Canadá" nesses dados. Tentarei jogar golfe com o tempo, onde e quando puder. Chame-o renomeando a lambdafunção para qualquer coisa e, em seguida, chamando esse nome como uma função normal envolvida print(). Por exemplo, se a função fosse nomeada H, você a chamaria assim print(H(Month_Day)).

R. Kap
fonte
4
Eu acho que você pode salvar oito caracteres substituindo .decode().count("Canada")por .count(b"Canada").
Alexwlchan
@alexwlchan Sim, você está certo. Obrigado! :)
R. Kap
Certamente isso seria mais curto no Python 2, já que a urllib.urlopenfunção não está em um subpacote ( from urllib import*versus from urllib.request import*) e b"Canada"poderia ser substituída por, "Canada"uma vez que as strings do Python 2 são bytes por padrão. Conto 81 bytes em Python 2 e funciona de acordo com meus testes.
Mego
5

Mathematica, 60 bytes

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

Função anônima. Da mesma forma para a solução Perl 5, leva entrada como July_1.

LegionMammal978
fonte
Só para fechar o ciclo, este uso da API é totalmente bem
wnnmaw
5

PowerShell, 52 bytes

((iwr enwp.org/$($args[0]))-csplit"Canada").length-1
  • Entrada como July_1.
  • iwré a abreviação de Invoke-WebRequest.
  • $($args[0])é o primeiro argumento da linha de comandos. Inicie o script como OhCanada.ps1 July_1.
  • -csplit é uma distinção entre maiúsculas e minúsculas.
Kobi
fonte
5

C #, 85 bytes

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

Toma entrada dcomo July_1.

E July_1 é realmente o Dia do Canadá, com mais referências. Com February_1e April_23compartilhando o 2º lugar com 18 "Canada"s cada.

Encontre o "Canada"dia (em 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();

(O ano 8 é o ano bissexto com a menor representação). Potencialmente ineficiente, na medida em que OrderByprovavelmente gera mais de 366 chamadas pela web, mas apenas diminui o tempo e parece concluir em pouco tempo.

Weston
fonte
4

R, 99 bytes 96

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

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

Isso recebe a entrada d no formato "July_1" e retorna a contagem de Canadas. Ele conta as palavras contando o número de caracteres na página, remove a palavra Canadá da página e conta os caracteres novamente. O número de vezes que o Canadá aparece é a diferença nessas contagens dividida pelo número de letras no Canadá, 6.

edit: Agradeço a dica abaixo sobre como substituir minha função pelo scan.

Austin
fonte
Eu acho que você pode soltar o x=function(d){e substituir por d=scan(,'')torná-lo programa em vez de função e salvar alguns bytes.
Pajonk
Obrigado! Isso economizou três bytes. Eu não usei a digitalização antes.
187 Austin
4

ES6, 89 bytes

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

Infelizmente, desembrulhar todas as promessas penaliza o tamanho: /

YardGlassOfCode
fonte
Boa resposta, bem-vindo ao site!
DJMcMayhem
11
Comentários de alguns. Você pode aplicar o mesmo July_1truque "a entrada está no formato " que o restante das perguntas para salvar alguns bytes. Você também tem um erro ao usar split().length(), o que fornecerá uma resposta maior que a meta.
IvanSanchez
Concorde com @IvanSanchez no formato de entrada e precise de um -1após o .length, mas você pode salvar alguns bytes, omitindo a https:parte da URL, e use split'Canada'(mas com backticks!) Em vez de split('Canada')economizar mais alguns!
Dom Hastings
Uau não tinha idéia sobre backticks! Eu fiz as alterações mencionadas.
YardGlassOfCode 07/07
O Firefox permite que você largue o //depois http.
precisa saber é o seguinte
3

Ruby + ondulação, 44 ​​bytes

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

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

Lynn
fonte
2

Clojure, 71 bytes

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

Sim, seria bom usar, http://enwp.orgmas acho slurpque não lida com redirecionamentos (?). Função anônima que leva dia no formato "July_1".

cliffroot
fonte
2

PHP, 65 bytes

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