정말 캐나다의 날 이었습니까?


22

7 월 1 일은 캐나다의 날입니다 (캐나다 캐나다)! 아니면? 오늘의 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

나는 그것에 대해 많이 알지 못하므로 사소한 기능이있는 경우 예를 말하는 것을 주저합니다. 최선의 판단을
내리

9
따라서 Canadaville , Canadair , Canadarm , Canadaga , Canadarago , Canaday , Canadaspis 등의 참조. 카운트?
msh210

@ msh210, 그렇습니다.
wnnmaw

1
7 월 1 일이 가장 많은 날입니다! 골프는 아니지만 빠른 프로그램을 작성했습니다.
Andrew

답변:


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

배쉬, 43 42 40 바이트

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

용도는 curl, grepwc특정 웹 페이지에 "캐나다"의 발생을 계산합니다. 다른 답변과 마찬가지로 입력은 형식으로 제공됩니다 July_1. 이것은 Code Golf SE에 처음 게시 한 것이며 모든 규칙에 익숙하지는 않습니다. 모든 의견을 환영합니다.

에 대한 출력 이 전통적으로 무시 된다는 것을 인식하지 못했습니다 STDERR . 3 바이트 감사합니다, 데니스 !


그러나 curl -sL여전히 짧지 wget -qO-않습니까?
Nick Matteo

1
STDERR 로의 출력은 기본적으로 무시 되므로, curl없이 -s(또는 wget없이 -q) 사용할 수 있습니다 .
Dennis

@Dennis 감사합니다! 나는 그것이 STDERR무시 되는 것을 몰랐다 . 매우 감사.
Sriram

@kundor 좋은 지적입니다. 어떤 이유로 든 두 플래그를 결합하면 나에게 결코 발생하지 않았습니다. 그럼에도 불구하고 출력 STDERR은 기본적으로 무시되므로 -s완전히 생략하는 것이 더 짧습니다 .
Sriram

15

펄 5, 39 바이트

38 바이트 + -pe대신 1-e

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

같은 입력을 July_1받습니다.

7 바이트를 절약 해 준 busukxuan 에게 감사 합니다.


1
curl에 익숙하지 않지만 "http : //"의 6 바이트를 저장할 수 있습니까?
busukxuan

1
@ busukxuan, 네, 많은 감사합니다.
msh210

7

파이썬 3.5 117 111 98 90 바이트

( alexwlchan 덕분에 -8 바이트 ( 98 -> 90) )

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

urllib.urlopen함수 가 하위 패키지 ( from urllib import*vs from urllib.request import*)에 없기 때문에 Python 2에서는 더 짧을 것이며 Python 2의 문자열은 기본적으로 바이트이기 때문에 b"Canada"대체 될 수 있습니다 "Canada". Python 2에서 81 바이트를 계산하고 테스트에 따라 작동합니다.
Mego

5

Mathematica, 60 바이트

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

익명의 기능. Perl 5 솔루션과 유사하게 다음과 같은 입력을받습니다 July_1.


루프를 닫으려면 API를 사용하는 것이
좋습니다

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"각이야.

"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 개 이상의 웹 호출을 생성하지만 더 짧아지고 더 이상 완료되지 않는 것처럼 보일 수 있기 때문에 잠재적으로 비효율적 입니다.


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

감사! 3 바이트를 절약했습니다. 전에는 스캔을 사용하지 않았습니다.
Austin

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뒤에 a가 필요 .length하지만 https:URL 의 일부를 생략하여 바이트 를 절약하고 몇 가지를 더 저장하기 위해 split'Canada'대신 백틱 split('Canada')을 사용하십시오!
Dom Hastings

와우는 백틱에 대해 전혀 몰랐다! 언급 한 내용을 변경했습니다.
YardGlassOfCode 1

Firefox를 사용하면 //이후 를 삭제할 수 있습니다 http.
user2428118

3

루비 + 컬, 44 바이트

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

ruby -n+ 43 바이트 같은 입력을 July_1받습니다.


2

클로저, 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');
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.