本当にカナダの日でしたか?


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

これはコードゴルフであるため、最短の提出が勝ちます

(報われないボーナスとして、カウントが最も高い日が何であるかを知りたいです)


ウィキペディアAPIを使用できますか?
LegionMammal978

私はそれについてあまり知らないので、些細な機能がある場合には「はい」と言うのをためらいます。あなたの最善の判断を使用し、それが可能ならば、それはあまりにも簡単に棄権喜ば
wnnmaw


@ msh210、うん、彼らはそう
-wnnmaw

1
7月1日が最も多い日です!ゴルフではありませんが、簡単なプログラムを書きました。
アンドリュー

回答:


4

Pyth、31バイト

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

オンライン実装では機能せず、サーバーはインターネットアクセスを無効にします。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

、、およびを使用してcurl、指定されたWebページでの「カナダ」の出現をカウントします。他の回答と同様に、入力は次の形式で与えられますgrepwcJuly_1。Code Golf SEに投稿するのはこれが初めてであり、すべてのルールに精通しているわけではありません。どんなフィードバックでも大歓迎です。

への出力 が伝統的に無視されいることに気づきませんでしたSTDERR 。3バイトありがとう、デニス


しかし、curl -sLそれよりも短くはないでしょうwget -qO-か?
ニックマッテオ

1
STDERRへの出力はデフォルトは無視されるため、curlなし-s(またwgetはなし-q)で使用できます。
デニス

@デニスありがとう!それSTDERRが無視されるとは知りませんでした。とても有難い。
スリラム

@kundorそれは良い点です。何らかの理由で、2つのフラグを組み合わせることは私には決してありませんでした。それでも、への出力STDERRはデフォルトでは無視されるため、-s完全に省略する方が短くなります。
スリラム

15

Perl 5、39バイト

38バイト、-pe代わりに1-e

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

のような入力を受け取りますJuly_1

7バイト節約してくれたbusukxuanに感謝します。


1
curlには慣れていませんが、6バイトの「http://」を保存することは可能ですか?
busukxuan

1
@busukxuan、うん、どうもありがとう。
msh210

7

Python 3.5、117 111 98 90バイト

-8バイト(98 -> 90alexwlchanに感謝

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
私はあなたが交換することにより、8つの文字を救うことができると思います.decode().count("Canada").count(b"Canada")
alexwlchan

@alexwlchanはい、あなたは正しいです。ありがとう!:)
R. Kap

以来、確かにこれは、Pythonの2に短くなりurllib.urlopen機能がサブパッケージ(ではないfrom urllib import*from urllib.request import*)、およびb"Canada"に置き換えることができ"Canada"Pythonの2の文字列は、デフォルトではバイトなので。私はPython 2で81バイトを数え、それは私のテストに従って動作します。
メゴ

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_23 18ので2位を共有"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年目は、最も短い表記のうるう年です)。潜在的に非効率的で、OrderByおそらく366を超えるWebコールを生成しますが、短くなり、それほど多くない時間で完了するように見えます。


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を受け取り、カナダの数を返します。ページの文字数をカウントすることで単語をカウントし、ページから単語Canadaを削除して、再び文字をカウントします。カナダが表示される回数は、これらのカウントの差をカナダの文字数6で割ったものです。

編集:私の機能をスキャンに置き換えることに関する以下のヒントに感謝します。


私はあなたがそれをドロップし、機能の代わりにプログラムにし、いくつかのバイトを節約することでx=function(d){置き換えることができると思います d=scan(,'')
パジョン

ありがとう!これで3バイト節約できました。以前にスキャンを使用したことはありません。
オースティン

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

入力形式で@IvanSanchezに同意し、の-1後にを必要とし.lengthますがhttps:、URL の一部を省略して一部のバイトを節約し、さらにいくつかを保存するsplit'Canada'代わりに(ただし、逆引用符を使用して)バイトを節約できますsplit('Canada')
ドムヘイスティングス

うわー、バックティックについては全く知りませんでした!上記の変更を加えました。
YardGlassOfCode 16

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」の形式で日を取る匿名関数。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.