파이썬 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
않습니다 .Ideone
urllib