真的是加拿大国庆日吗?


22

7月1日是加拿大日(是加拿大)!还是?看来,今天的Wikipedia页面上有很多与加拿大相关的内容,但是还有哪一天是加拿大的?

您的任务是编写一个程序或函数,该程序或函数以日期(月和日)作为输入,并在输入的日期上返回或输出Wikipedia页面上“加拿大”的提及数目。一些规则:

  • 日期可以以您选择的任何合理格式输入
  • 您的提交必须从url中提取数据en.wikipedia.org/wiki/Month_Day
  • "Canada"在标题情况下,才必须搜索并计算包含的子字符串。"Canadian"不算,但是"Canada's"算。只要"Canada"字符串中存在确切的,区分大小写的文本,它就是一个匹配项
  • 该页面的内容被视为相应.html文件中的任何内容(即,如果您以a的形式下载.html并在记事本中打开该页面,将会显示什么内容)
  • 结果可以以任何其他合理方式输出到STDOUT,返回或显示

测试用例:

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

这是代码高尔夫,所以最短的提交者获胜

(作为无奖励的奖金,我很想看看计数最高的那一天是什么)


可以使用Wikipedia API吗?
LegionMammal978 '16

我对此了解不多,因此如果有琐碎的功能,我会犹豫。使用您的最佳判断,如果它太容易了,请弃权
wnnmaw '16

9
因此,要引用CanadavilleCanadairCanadarmCanadagaCanadarago卡纳迪Canadaspis等。计数?
msh210 '16

@ msh210,是的,他们这样做了
wnnmaw

1
7月1日是计数最高的一天!尽管它没有打高尔夫球,但为此编写了一个快速程序。
安德鲁

Answers:


4

Pyth,31个字节

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

在联机实施中不起作用,服务器禁用Internet访问。我想使用http://wki.pe/July_1,但遗憾的是这是客户端重定向,因此它获取了错误的页面。输入格式为July_1

代码基本上就是:

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

24

Bash,43 42 40字节

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

使用curlgrepwc计算指定网页中“加拿大”的出现次数。像其他答案一样,输入格式为July_1。这是我第一次在Code Golf SE上发帖,我对所有规则都不是很熟悉。任何反馈将是最欢迎的。

没有意识到 传统上会忽略to的输出STDERR 。感谢您的3个字节,丹尼斯


但是会不会curl -sL还短于wget -qO-
Nick Matteo

1
默认情况下将忽略输出到STDERR的输出,因此您可以curl不带-s(或wget不带-q)使用。
丹尼斯

@丹尼斯谢谢!我不知道STDERR被忽略了。非常感激。
斯里拉姆

@kundor很好。由于某种原因,我从来没有想到将两个标志结合在一起。不过,由于STDERR默认情况下会忽略to的输出,因此将其-s完全省略会更短一些。
斯里拉姆

15

Perl 5,39个字节

38个字节,加上1 -pe代替-e

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

接受类似的输入July_1

感谢busukxuan为我节省了七个字节。


1
我不熟悉curl,但是可以保存“ http://”的六个字节吗?
busukxuan '16

1
@busukxuan,是的,非常感谢。
msh210 '16

7

Python 3.5、117 111 98 90字节

-8字节(98 -> 90)感谢alexwlchan

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

只需使用Python的内置“ urllib”库来获取HTML数据,然后计算该数据中单词“ Canada”的出现次数。我会在可能的时间和地点尝试更多的高尔夫运动。通过将lambda函数重命名为任何东西,然后像包装在中的普通函数一样调用该名称来调用它print()。例如,如果该函数被命名为H,则您可以将其命名为print(H(Month_Day))


4
我想你可以通过更换保存八个字.decode().count("Canada").count(b"Canada")
alexwlchan '16

@alexwlchan是的,您是对的。谢谢!:)
R. Kap

当然,在Python 2中这肯定会更短,因为该urllib.urlopen函数不在子包中(from urllib import*vs from urllib.request import*),并且b"Canada"可以替换为,"Canada"因为Python 2的字符串默认为字节。我在Python 2中计算了81个字节,并且根据我的测试可以正常工作。
Mego 2016年

5

Mathematica,60个字节

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

匿名函数。与Perl 5解决方案类似,输入类似July_1


只是为了结束循环,对API的这种使用完全没问题
wnnmaw

5

PowerShell,52个字节

((iwr enwp.org/$($args[0]))-csplit"Canada").length-1
  • 输入为July_1
  • iwr是的缩写Invoke-WebRequest
  • $($args[0])是第一个命令行参数。以启动脚本OhCanada.ps1 July_1
  • -csplit 区分大小写。

5

C#,85个字节

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

接受d类似的输入July_1

而且July_1 真正的加拿大国庆日,拥有最引用。随着February_1April_2318共享第二名"Canada"s各自。

查找"Canada"日期(并行),207个字节:

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();

(第8年是代表时间最短的the年)。潜在的效率低下,因为它OrderBy可能会生成> 366个网络调用,但会更短一些,并且似乎会在不多的时间内完成。


4

R,99 96字节

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

这将采用格式为“ July_1”的输入d并返回加拿大的计数。它通过计算页面上的字符数来计算单词数,然后从页面中删除“加拿大”一词并再次计算字符数。加拿大出现的次数是这些计数的差除以加拿大的字母数,即6。

编辑:我感谢下面的提示有关用扫描替换我的功能。


我认为您可以删除x=function(d){并替换为d=scan(,'')使其成为程序而不是函数并节省一些字节。
pajonk

谢谢!那节省了三个字节。我以前没有用过扫描。
奥斯汀

4

ES6,89个字节

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

可悲的是,解开所有的诺言会损害大小:/


很好的答案,欢迎光临本站!
DJMcMayhem

1
几个评论。您可以使用与July_1其余问题相同的“输入格式”技巧来节省一些字节。使用split().length()也会出错,这会给您比目标更大的响应。
伊万·桑切斯(IvanSanchez)2016年

在输入格式上同意@IvanSanchez并在-1之后需要a .length,但是您可以通过省略https:URL 的一部分来节省一些字节,并使用split'Canada'(但带有反引号!)而不是split('Canada')再保存一些!
Dom Hastings

哇不知道反引号!我进行了上述更改。
YardGlassOfCode

Firefox允许您删除//after http
user2428118 '16

3

Ruby + curl,44个字节

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

ruby -n+ 43个字节。接受类似的输入July_1


2

Clojure,71个字节

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

是的,使用起来很好,http://enwp.org但是我猜slurp不处理重定向(?)。匿名功能,格式为“ July_1”,需要一天时间。


2

PHP,65字节

echo substr_count(file_get_contents('http://enwp.org'),'Canada');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.