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
.html
arquivo correspondente (ou seja, o que aparece se você fizer o download da página como a.html
e 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)
Respostas:
Pitão, 31 bytes
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:
fonte
Bash,
434240 bytesUsos
curl
,grep
ewc
para contar as ocorrências de "Canadá" no webpage especificado. Como as outras respostas, a entrada é fornecida no formatoJuly_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 !fonte
curl -sL
ainda não seria mais curto do quewget -qO-
?curl
sem-s
(ouwget
sem-q
).STDERR
é ignorado. Muito apreciado.STDERR
é ignorada por padrão, seria mais curto omitir-s
completamente.Perl 5, 39 bytes
38 bytes, mais 1 para em
-pe
vez de-e
Toma entrada como
July_1
.Obrigado ao busukxuan por me salvar sete bytes.
fonte
Python 3.5,
1171119890 bytes( -8 bytes (
98 -> 90
) graças a alexwlchan )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
lambda
função para qualquer coisa e, em seguida, chamando esse nome como uma função normal envolvidaprint()
. Por exemplo, se a função fosse nomeadaH
, você a chamaria assimprint(H(Month_Day))
.fonte
.decode().count("Canada")
por.count(b"Canada")
.urllib.urlopen
função não está em um subpacote (from urllib import*
versusfrom urllib.request import*
) eb"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.Mathematica, 60 bytes
Função anônima. Da mesma forma para a solução Perl 5, leva entrada como
July_1
.fonte
PowerShell, 52 bytes
July_1
.iwr
é a abreviação deInvoke-WebRequest
.$($args[0])
é o primeiro argumento da linha de comandos. Inicie o script comoOhCanada.ps1 July_1
.-csplit
é uma distinção entre maiúsculas e minúsculas.fonte
C #, 85 bytes
Toma entrada
d
comoJuly_1
.E
July_1
é realmente o Dia do Canadá, com mais referências. ComFebruary_1
eApril_23
compartilhando o 2º lugar com 18"Canada"
s cada.Encontre o
"Canada"
dia (em paralelo), 207 bytes:(O ano 8 é o ano bissexto com a menor representação). Potencialmente ineficiente, na medida em que
OrderBy
provavelmente gera mais de 366 chamadas pela web, mas apenas diminui o tempo e parece concluir em pouco tempo.fonte
R,
99bytes 96x = function (d) {p = readLines (paste0 (" http://enwp.org/ ", d)); sum (nchar (p) -nchar (gsub ("Canadá", "", 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.
fonte
x=function(d){
e substituir pord=scan(,'')
torná-lo programa em vez de função e salvar alguns bytes.ES6, 89 bytes
Infelizmente, desembrulhar todas as promessas penaliza o tamanho: /
fonte
July_1
truque "a entrada está no formato " que o restante das perguntas para salvar alguns bytes. Você também tem um erro ao usarsplit().length()
, o que fornecerá uma resposta maior que a meta.-1
após o.length
, mas você pode salvar alguns bytes, omitindo ahttps:
parte da URL, e usesplit'Canada'
(mas com backticks!) Em vez desplit('Canada')
economizar mais alguns!//
depoishttp
.Ruby + ondulação, 44 bytes
ruby -n
+ 43 bytes. Toma entrada comoJuly_1
.fonte
Clojure, 71 bytes
Sim, seria bom usar,
http://enwp.org
mas achoslurp
que não lida com redirecionamentos (?). Função anônima que leva dia no formato "July_1".fonte
PHP, 65 bytes
fonte