Python 3.5, 280 272 260 242 240 bytes:
( Obrigado a Adnan pelo truque sobre o uso do *
operador nas comparações que resultam em 2 bytes salvos! )
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)
Simples o suficiente. Usa a urllib
biblioteca interna do Python para acessar o site da pergunta e, em seguida, usa expressões regulares para encontrar a contagem de votos, a contagem de respostas e a contagem de respostas específicas do Python no texto decodificado retornado do site. Por fim, esses valores são comparados com as condições necessárias para retornar um truthy
valor e, se satisfizerem todas as condições,True
retornados. Caso contrário, False
é.
A única coisa que me preocupa aqui é que as expressões regulares dão muita margem de manobra nos termos do número de respostas específicas de python para salvar bytes, portanto pode ser um pouco impreciso às vezes, embora provavelmente seja bom o suficiente para os propósitos deste desafio. No entanto, se você quiser uma mais precisa, adicionei uma abaixo, embora seja mais longa que a acima. O mostrado abaixo tem atualmente 298 bytes, pois usa uma expressão regular muito mais longa - uma que você não sabia quanto tempo levou para descobrir - para contar respostas em Python do que minha função original por uma questão de precisão. Este deve funcionar para pelo menos 80% a 90% de todos os casos de teste lançados nele.
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)
Mas, e essas perguntas com várias páginas de respostas? Nenhuma das opções acima funcionará muito bem nessa situação, se, por exemplo, 1 resposta python estiver na primeira página e outra na segunda. Bem, tomei a liberdade de corrigir esse problema criando outra versão da minha função (mostrada abaixo) que verifica todas as páginas de respostas, se existirem múltiplas, para respostas do Python, e tem se saído muito bem em muitos dos casos de teste que eu jogou nele. Bem, sem mais delongas, aqui está a função nova e atualizada:
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))
Muito tempo, não é? Eu realmente não estava gostando muito de código de golfe com isso, embora, se você quiser, eu possa jogar um pouco mais. Caso contrário, eu amo isso e não poderia ser mais feliz. Ah, eu quase esqueci, como um bônus adicional, isso também gera o número total de respostas Python na pergunta, total de votos na pergunta e número total de respostas na pergunta, se a perguntaid
corresponder a uma pergunta com mais de uma página de respostas. Caso contrário, se a pergunta consistir apenas em uma única página de respostas, ela emitirá apenas otruthy/falsy
valor. Eu realmente me empolguei um pouco com esse desafio.
Cada um deles leva a pergunta id
na forma de um string .
Eu colocaria Try It Online!
links aqui para cada função, mas infelizmente, repl.it
nem Ideone
permitimos a busca de recursos através da urllib
biblioteca do Python .