Apakah ini benar-benar Hari Kanada?

22

1 Juli adalah hari Kanada (yay Kanada)! Atau itu? Tampaknya halaman Wikipedia untuk hari ini memiliki banyak konten terkait Kanada, tetapi apakah ada hari lain yang lebih Kanada?

Tugas Anda adalah menulis program atau fungsi yang memerlukan tanggal (bulan dan hari) sebagai input dan mengembalikan atau menampilkan jumlah sebutan "Kanada" di halaman Wikipedia untuk tanggal yang dimasukkan. Beberapa peraturan:

  • Tanggal dapat dimasukkan dalam format pilihan apa pun yang masuk akal
  • Kiriman Anda harus menarik data dari url en.wikipedia.org/wiki/Month_Day.
  • Hanya "Canada"harus dicari dan dihitung termasuk substring, dan hanya dalam judul kasus. "Canadian"tidak dihitung, namun "Canada's"tidak dihitung. Selama persis, teks case-senstitive "Canada"ada dalam string, itu adalah kecocokan
  • Isi halaman dianggap apa-apa dalam yang sesuai .htmlberkas (yaitu apa yang muncul jika Anda men-download sebagai halaman sebagai .htmldan buka di Notepad)
  • Hasil dapat berupa output ke STDOUT, dikembalikan, atau ditampilkan dengan cara lain yang wajar

Kasus uji:

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

Ini adalah golf kode, jadi pengiriman terpendek menang

(Sebagai bonus yang tidak dihargai, saya tertarik untuk melihat hari apa dengan jumlah tertinggi)

wnnmaw
sumber
Bisakah API Wikipedia digunakan?
LegionMammal978
Saya tidak tahu banyak tentang itu, jadi saya ragu untuk mengatakan ya kalau-kalau ada fungsi sepele untuk itu. Gunakan penilaian terbaik Anda dan jika itu membuatnya terlalu mudah, silakan berpantang
wnnmaw
9
Jadi referensi untuk Canadaville , Canadair , Canadarm , Canadaga , Canadarago , Canaday , Canadaspis , et al. menghitung?
msh210
@ msh210, Yap, yang mereka lakukan
wnnmaw
1
1 Juli adalah hari dengan jumlah tertinggi! Menulis program cepat untuk itu, meskipun tidak golf.
Andrew

Jawaban:

4

Pyth, 31 byte

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

Tidak berfungsi pada implementasi online, server menonaktifkan akses Internet. Saya ingin menggunakan http://wki.pe/July_1 tapi sayangnya itu adalah pengalihan sisi klien sehingga mengambil halaman yang salah. Format input adalah July_1.

Kode ini pada dasarnya hanya:

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

Bash, 43 42 40 byte

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

Menggunakan curl,, grepdan wcuntuk menghitung kemunculan "Kanada" di laman web tertentu. Seperti jawaban lainnya, input diberikan dalam format July_1. Ini adalah pertama kalinya saya memposting di Code Golf SE dan saya tidak begitu akrab dengan semua aturan. Umpan balik akan sangat disambut.

Tidak menyadari bahwa hasil STDERR secara tradisional diabaikan. Terima kasih untuk 3 byte, Dennis !

Sriram
sumber
Tapi bukankah curl -sLmasih lebih pendek dari itu wget -qO-?
Nick Matteo
1
Output ke STDERR diabaikan secara default , sehingga Anda dapat menggunakan curltanpa -s(atau wgettanpa -q).
Dennis
@Dennis Terima kasih! Saya tidak tahu itu STDERRdiabaikan. Sangat dihargai.
Sriram
@kundor Itu poin bagus. Entah kenapa, menggabungkan kedua bendera itu tidak pernah terpikir olehku. Namun, karena output ke STDERRdiabaikan secara default, itu akan lebih pendek untuk menghilangkan -sseluruhnya.
Sriram
15

Perl 5, 39 byte

38 byte, ditambah 1 untuk -pebukan-e

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

Mengambil input seperti July_1 .

Terima kasih kepada busukxuan karena telah menyelamatkan saya tujuh byte.

msh210
sumber
1
Saya tidak terbiasa dengan curl, tetapi apakah mungkin untuk menyimpan enam byte "http: //"?
busukxuan
1
@busukxuan, ya, terima kasih banyak.
msh210
7

Python 3.5, 117 111 98 90 byte

( -8 byte ( 98 -> 90) terima kasih kepada alexwlchan )

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

Cukup gunakan pustaka "urllib" bawaan Python untuk mengambil data HTML dan kemudian menghitung kemunculan kata "Kanada" dalam data itu. Akan mencoba dan golf lebih dari waktu ke waktu di mana dan kapan saya bisa. Sebut dengan mengubah nama lambdafungsi menjadi apa pun lalu memanggil nama itu seperti fungsi normal yang dibungkus print(). Misalnya, jika fungsi itu dinamai H, maka Anda akan menyebutnya seperti print(H(Month_Day)).

R. Kap
sumber
4
I think you can save eight characters by replacing .decode().count("Canada") with .count(b"Canada").
alexwlchan
@alexwlchan Yes, you are right. Thanks! :)
R. Kap
Surely this would be shorter in Python 2, since the urllib.urlopen function isn't in a subpackage (from urllib import* versus from urllib.request import*), and the b"Canada" could be replaced with "Canada" since Python 2's strings are bytes by default. I count 81 bytes in Python 2, and it works according to my testing.
Mego
5

Mathematica, 60 bytes

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

Anonymous function. Similarly to the Perl 5 solution, takes input like July_1.

LegionMammal978
sumber
Just to close the loop, this use of the API is totally fine
wnnmaw
5

PowerShell, 52 bytes

((iwr enwp.org/$($args[0]))-csplit"Canada").length-1
  • Input as July_1.
  • iwr is short for Invoke-WebRequest.
  • $($args[0]) is first command line argument. Start script as OhCanada.ps1 July_1.
  • -csplit is case sensitive split.
Kobi
sumber
5

C#, 85 bytes

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

Takes input d like July_1.

Dan benar July_1 - benar Hari Kanada, memiliki referensi terbanyak. Dengan February_1dan April_23berbagi tempat ke-2 dengan 18"Canada"s each.

Temukan "Canada"hari (secara paralel), 207 byte:

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

(Tahun 8 adalah tahun kabisat dengan representasi terpendek). Berpotensi tidak efisien, karena OrderBymungkin menghasilkan> 366 panggilan web, tetapi hanya berlangsung lebih singkat dan tampaknya selesai dalam waktu yang tidak lama.

Weston
sumber
4

R, 99 96 byte

x = fungsi (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

Ini mengambil input d dalam bentuk "July_1" dan mengembalikan jumlah Canadas. Itu menghitung kata-kata dengan menghitung jumlah karakter pada halaman, kemudian menghapus kata Kanada dari halaman dan menghitung karakter lagi. Jumlah kemunculan Kanada adalah selisih jumlah ini dibagi dengan jumlah huruf di Kanada, 6.

sunting: Saya menghargai tip di bawah ini tentang mengganti fungsi saya dengan pemindaian.

Austin
sumber
Saya pikir Anda dapat menjatuhkan x=function(d){dan mengganti dengan d=scan(,'')membuatnya program alih-alih berfungsi dan menghemat beberapa byte.
pajonk
Terima kasih! Itu menghemat tiga byte. Saya belum pernah menggunakan pemindaian sebelumnya.
Austin
4

ES6, 89 byte

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

Sayangnya Membuka semua janji akan menghukum ukuran: /

YardGlassOfCode
sumber
Jawaban yang bagus, selamat datang di situs ini!
DJMcMayhem
1
Komentar pasangan. Anda dapat menerapkan July_1trik "input dalam format " yang sama dengan sisa pertanyaan untuk menghemat beberapa byte. Anda juga memiliki kesalahan dalam menggunakan split().length(), yang akan memberi Anda respons lebih besar dari sasaran.
IvanSanchez
Setuju dengan @IvanSanchez pada format input dan perlu -1setelah .length, tetapi Anda dapat menyimpan beberapa byte dengan menghilangkan https:bagian dari URL, dan menggunakan split'Canada'(tetapi dengan backticks!) Daripada split('Canada')menyimpan lebih banyak!
Dom Hastings
Wow tidak tahu tentang backticks! Saya telah membuat perubahan yang disebutkan.
YardGlassOfCode
Firefox memungkinkan Anda untuk menghapus //setelahnya http.
user2428118
3

Ruby + curl, 44 byte

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

ruby -n+ 43 byte Mengambil input seperti July_1.

Lynn
sumber
2

Clojure, 71 byte

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

Ya, itu akan baik untuk digunakan http://enwp.orgtetapi saya kira slurptidak menangani pengalihan (?). Fungsi anonim yang mengambil hari dalam format "July_1".

cliffroot
sumber
2

PHP, 65 byte

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