파이썬 3.5 280 272 260 242 240 바이트 :
( 2 개의 저장 바이트를 생성하는 비교 에서 연산자를 사용하는 방법에 대한 트릭에 대해 Adnan 에게 감사드립니다 !* )
def g(o):import urllib.request as u,re;R=re.findall;w=bytes.decode(u.urlopen('http://ppcg.lol/q/'+o).read());print((len(R('(?:<h[0-9]>|<p>).*python',w.lower()))<2)*(int(R('(?<="vote-count-post ">)[0-9]+',w)[0])>3)*w.count('answercell">')>5)
충분히 간단합니다. Python의 내장 urllib라이브러리를 사용 하여 질문 사이트로 이동 한 다음 정규식을 사용하여 웹 사이트에서 반환 된 디코딩 된 텍스트에서 투표 수, 답변 수 및 Python 특정 답변 수를 찾습니다. 마지막으로 이러한 값은 값을 반환하는 데 필요한 조건과 비교 truthy되며 모든 조건을 만족하면 True반환됩니다. 그렇지 않으면False 이다.
내가 여기서 걱정할 수있는 유일한 것은 정규 표현식이 바이트를 절약하기위한 파이썬 특정 답변의 수와 관련하여 많은 방법을 제공한다는 것입니다. 이 도전의 목적. 그러나 훨씬 정확한 것을 원한다면 위의 것보다 길지만 아래에 하나를 추가했습니다. 아래에 표시된 것은 현재보다 298 바이트입니다. 정확성을 위해 원래 함수보다 Python 답변을 계산하는 데 훨씬 더 긴 정규 표현식을 사용하므로 발견하는 데 걸리는 시간을 알 수 없었습니다. 이것은 모든 테스트 사례의 약 80 %-90 %에서 작동합니다.
def g(o):import urllib.request as u,re;R=re.findall;w=bytes.decode(u.urlopen('http://ppcg.lol/q/'+o).read());print(len(R('(?<=answercell">).*?(?:<h[0-9]>|<strong>)[^\n]*python[^\n]*(?=</h[0-9]>|</strong>)',w.lower()))<2and int(R('(?<="vote-count-post ">)[0-9]+',w)[0])>3and w.count('answercell">')>5)
그러나 여러 페이지의 답변이있는 질문은 어떻습니까? 예를 들어, 1 개의 파이썬 답변이 첫 번째 페이지에 있고 다른 하나는 두 번째 페이지에있는 경우 위의 상황 중 어느 것도 잘 작동하지 않습니다. 글쎄, 나는 모든 페이지 를 검사하는 다른 버전의 함수 (아래 그림 참조)를 만들어서이 문제를 해결하기 위해 자유를 얻었습니다. 파이썬 답변에 대해 여러 가있는 경우 답변 많은 테스트 사례에서 꽤 잘 수행되었습니다. 그것에 던져졌다. 더 이상 고민하지 않고 새롭고 업데이트 된 기능은 다음과 같습니다.
def g(o):
import urllib.request as u,re;R=re.findall;w=bytes.decode(u.urlopen('http://ppcg.lol/q/'+o).read());t=0if len(re.findall('="go to page ([0-9]+)">',w))<1else max([int(i)for i in re.findall('="go to page ([0-9]+)">',w)])
if t<1:print(len(R('(?<=answercell">).*?(?:<h[0-9]>|<strong>)[^\n]*python[^\n]*(?=</h[0-9]>|</strong>)',w.lower(),re.DOTALL))<2and int(R('(?<="vote-count-post ">)[0-9]+',w)[0])>3and w.count('answercell">')>5)
else:
P=[];U=[];K=[]
for i in range(2,t+2):P.append(len(R('(?<=answercell">).*?(?:<h[0-9]>|<strong>)[^\n]*python[^\n]*(?=</h[0-9]>|</strong>)',w.lower(),re.DOTALL)));U.append(int(R('(?<="vote-count-post ">)[0-9]+',w)[0]));K.append(w.count('answercell">'));w=bytes.decode(u.urlopen('http://ppcg.lol/questions/'+o+'/?page='+str(i)).read())
print(sum(P)<2and U[0]>3and sum(K)>5);print('# Python answers: ',sum(P));print('# Votes: ',U[0]);print('# Answers: ',sum(K))
꽤 길지 않습니까? 원하는 경우 코드 골프를 조금 더 내릴 수는 있지만 코드 골프에는별로 도움이되지 않았습니다. 그렇지 않으면 나는 그것을 좋아하고 더 행복 할 수 없었다. 아, 추가 보너스로 질문에 대한 총 파이썬 답변 수, 질문에 대한 총 투표 수 및 질문에 대한 질문에 대한 총 답변 수를 거의 잊어 버렸습니다.id 질문이 1 페이지 이상의 해당하는 . 답변. 그렇지 않으면 질문이 단일 페이지의 답변으로 만 구성된 경우truthy/falsy 값만 됩니다. 나는이 도전 과제에 약간 빠져 들었다.
이들은 각각 질문의 id형태로 문자열 .
Try It Online!각 함수에 대한 링크를 여기에 넣었 지만 불행히도 Python 라이브러리 를 통한 리소스 가져 오기는 허용 되지 repl.it않습니다 .Ideoneurllib