Có thực sự là ngày Canada?


22

Ngày 1 tháng 7 là ngày Canada (yay Canada)! Hoặc là nó? Có vẻ như trang Wikipedia cho ngày này có rất nhiều nội dung liên quan đến Canada, nhưng có một ngày nào đó là Canada nhiều hơn không?

Nhiệm vụ của bạn là viết một chương trình hoặc chức năng lấy ngày (tháng và ngày) làm đầu vào và trả về hoặc xuất số lượng đề cập của "Canada" trên trang Wikipedia cho ngày được nhập. Một số quy tắc:

  • Ngày có thể là đầu vào trong bất kỳ định dạng hợp lý nào bạn chọn
  • Trình của bạn phải lấy dữ liệu từ url en.wikipedia.org/wiki/Month_Day.
  • Chỉ "Canada"phải được tìm kiếm và tính bao gồm các chuỗi con, và chỉ trong trường hợp tiêu đề. "Canadian"không tính, tuy nhiên "Canada's"không tính. Miễn là chính xác, văn bản phân biệt chữ hoa chữ thường "Canada"tồn tại trong một chuỗi, đó là một kết quả khớp
  • Nội dung của trang được coi là bất cứ thứ gì trong .htmltệp tương ứng (nghĩa là nội dung hiển thị nếu bạn tải xuống dưới dạng trang dưới dạng .htmlvà mở nó trong Notepad)
  • Kết quả có thể là đầu ra cho STDOUT, được trả lại hoặc hiển thị theo bất kỳ cách hợp lý nào khác

Các trường hợp thử nghiệm:

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

Đây là mã golf, vì vậy nộp bài ngắn nhất

(Là một phần thưởng không được chuyển, tôi rất muốn xem ngày nào có số lượng cao nhất)


API Wikipedia có thể được sử dụng không?
LegionMammal978

Tôi không biết nhiều về nó, vì vậy tôi ngần ngại nói có trong trường hợp có một chức năng tầm thường với nó. Sử dụng phán đoán tốt nhất của bạn và nếu nó làm cho nó quá dễ dàng, xin vui lòng kiêng
wnnmaw

9
Vì vậy, các tài liệu tham khảo đến Canadaville , Canadair , Canadarm , Canadaga , Canadarago , Canaday , Canadaspis , et al. đếm?
msh210

@ msh210, Yep, mà họ làm
wnnmaw

1
Ngày 1 tháng 7 là ngày có số lượng cao nhất! Đã viết một chương trình nhanh chóng cho nó, mặc dù nó không được đánh gôn.
Andrew

Câu trả lời:


4

Bình thường, 31 byte

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

Không hoạt động trên triển khai trực tuyến, máy chủ sẽ vô hiệu hóa truy cập Internet. Tôi muốn sử dụng http://wki.pe/July_1 nhưng thật đáng buồn, đó là một chuyển hướng phía máy khách để nó tải trang sai. Các định dạng đầu vào là July_1.

Mã về cơ bản chỉ là:

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

24

Bash, 43 42 40 byte

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

Sử dụng curl, grepwcđể đếm lần xuất hiện của "Canada" trong các trang chỉ định. Giống như các câu trả lời khác, đầu vào được đưa ra trong định dạng July_1. Đây là lần đầu tiên tôi đăng bài trên Code Golf SE và tôi không quen với tất cả các quy tắc. Bất kỳ thông tin phản hồi sẽ được chào đón nhất.

Không nhận ra rằng đầu ra STDERR theo truyền thống bị bỏ qua. Cảm ơn vì 3 byte, Dennis !


Nhưng sẽ curl -sLvẫn không ngắn hơn wget -qO-?
Nick Matteo

1
Đầu ra cho STDERR được bỏ qua theo mặc định , vì vậy bạn có thể sử dụng curlmà không cần -s(hoặc wgetkhông có -q).
Dennis

@Dennis Cảm ơn! Tôi không biết rằng đã STDERRbị bỏ qua. Nhiều đánh giá cao.
Sriram

@kundor Đó là một điểm tốt. Vì một số lý do, kết hợp hai lá cờ không bao giờ xảy ra với tôi. Tuy nhiên, do đầu ra STDERRbị bỏ qua theo mặc định, nên sẽ ngắn hơn để bỏ qua -stoàn bộ.
Sriram

15

Perl 5, 39 byte

38 byte, cộng thêm 1 cho -pethay vì-e

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

Đưa đầu vào như thế nào July_1.

Cảm ơn busukxuan đã tiết kiệm cho tôi bảy byte.


1
Tôi không quen với curl, nhưng có thể lưu sáu byte của "http: //" không?
busukxuan

1
@busukxuan, vâng, cảm ơn nhiều.
msh210

7

Python 3.5, 117 111 98 90 byte

( -8 byte ( 98 -> 90) nhờ alexwlchan )

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

Chỉ cần sử dụng thư viện "urllib" tích hợp của Python để tìm nạp dữ liệu HTML và sau đó đếm số lần xuất hiện của từ "Canada" trong dữ liệu đó. Sẽ cố gắng và chơi golf nhiều hơn theo thời gian ở đâu và khi nào tôi có thể. Gọi nó bằng cách đổi tên lambdahàm thành bất cứ thứ gì và sau đó gọi tên đó giống như một hàm bình thường được bọc trong print(). Ví dụ, nếu hàm được đặt tên H, thì bạn sẽ gọi nó như thế nào print(H(Month_Day)).


4
Tôi nghĩ bạn có thể lưu tám ký tự bằng cách thay thế .decode().count("Canada")bằng .count(b"Canada").
alexwlchan

@alexwlchan Vâng, bạn nói đúng. Cảm ơn! :)
R. Kap

Chắc chắn điều này sẽ ngắn hơn trong Python 2, vì urllib.urlopenhàm không nằm trong gói con ( from urllib import*so với from urllib.request import*) và b"Canada"có thể được thay thế bằng các "Canada"chuỗi của Python 2 là byte theo mặc định. Tôi đếm 81 byte trong Python 2 và nó hoạt động theo thử nghiệm của tôi.
Mego

5

Toán học, 60 byte

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

Chức năng ẩn danh. Tương tự như giải pháp Perl 5, lấy đầu vào như thế nào July_1.


Chỉ cần đóng vòng lặp, việc sử dụng API này là hoàn toàn tốt
wnnmaw

5

PowerShell, 52 byte

((iwr enwp.org/$($args[0]))-csplit"Canada").length-1
  • Đầu vào như July_1.
  • iwrlà chữ viết tắt Invoke-WebRequest.
  • $($args[0])là đối số dòng lệnh đầu tiên. Bắt đầu kịch bản như OhCanada.ps1 July_1.
  • -csplit là trường hợp phân chia nhạy cảm.

5

C #, 85 byte

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

Đưa đầu vào dnhư thế nào July_1.

Và thực sự July_1 Ngày Canada, có nhiều tài liệu tham khảo nhất. Với February_1April_23chia sẻ vị trí thứ 2 với "Canada"mỗi 18 giây.

Tìm "Canada"ngày (song song), 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();

(Năm thứ 8 là năm nhuận với đại diện ngắn nhất). Có khả năng không hiệu quả, trong đó OrderBycó thể tạo ra> 365 cuộc gọi web, nhưng chỉ diễn ra trong thời gian ngắn hơn và dường như hoàn thành trong thời gian không nhiều.


4

R, 99 96 byte

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

Điều này nhận đầu vào d ở dạng "Tháng 7_1" và trả về số lượng Canadas. Nó đếm các từ bằng cách đếm số lượng ký tự trên trang, sau đó xóa từ Canada khỏi trang và đếm lại các ký tự. Số lần Canada hiển thị là sự khác biệt về số lượng này chia cho số lượng chữ cái ở Canada, 6.

chỉnh sửa: Tôi đánh giá cao mẹo dưới đây về việc thay thế chức năng của tôi bằng quét.


Tôi nghĩ bạn có thể bỏ x=function(d){và thay thế bằng d=scan(,'')cách làm cho nó lập trình thay vì chức năng và lưu một số byte.
pyjama

Cảm ơn! Điều đó đã lưu ba byte. Tôi chưa sử dụng quét trước đây.
Austin

4

ES6, 89 byte

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

Đáng buồn thay Unwrapping tất cả các lời hứa phạt kích thước: /


Câu trả lời tốt đẹp, chào mừng đến với trang web!
DJMcMayhem

1
Ý kiến ​​cặp đôi. Bạn có thể áp dụng thủ thuật "đầu vào theo định dạng July_1" giống như các câu hỏi còn lại để lưu một vài byte. Bạn cũng có một lỗi sử dụng split().length(), điều này sẽ cung cấp cho bạn một phản hồi lớn hơn mục tiêu.
IvanSanchez

Đồng ý với @IvanSanchez về định dạng đầu vào và cần -1sau .length, nhưng bạn có thể lưu một số byte bằng cách bỏ qua https:một phần của URL và sử dụng split'Canada'(nhưng với backticks!) Thay vì split('Canada')để tiết kiệm thêm một vài!
Dom Hastings

Wow không có ý tưởng về backticks! Tôi đã thực hiện các thay đổi được đề cập.
YardGlassOfCode

Firefox cho phép bạn bỏ qua //sau http.
dùng2428118

3

Ruby + curl, 44 byte

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

ruby -n+ 43 byte. Đưa đầu vào như thế nào July_1.


2

Clojure, 71 byte

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

Vâng, nó sẽ rất tốt để sử dụng http://enwp.orgnhưng tôi đoán slurpkhông xử lý các chuyển hướng (?). Chức năng ẩn danh mất ngày theo định dạng "Tháng 7_1".


2

PHP, 65 byte

echo substr_count(file_get_contents('http://enwp.org'),'Canada');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.