Python 3.5, 280 272 260 242 240 bytes:
(¡ Gracias a Adnan por el truco sobre el uso del *
operador en las comparaciones que resultan en 2 bytes guardados! )
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)
Suficientemente simple. Utiliza la urllib
biblioteca integrada de Python para ir al sitio de la pregunta, y luego usa expresiones regulares para encontrar el recuento de votos, el recuento de respuestas y el recuento de respuestas específicas de Python en el texto descodificado devuelto desde el sitio web. Finalmente, estos valores se comparan con las condiciones requeridas para devolver un truthy
valor, y si satisfacen todas las condiciones, True
se devuelven. De False
lo contrario es.
Lo único que me puede preocupar aquí es que las expresiones regulares dan mucho margen en términos de la cantidad de respuestas específicas de Python para guardar bytes, por lo que a veces puede ser un poco inexacto, aunque probablemente sea lo suficientemente bueno para Los propósitos de este desafío. Sin embargo, si desea uno mucho más preciso, he agregado uno a continuación, aunque es más largo que el anterior. El que se muestra a continuación tiene actualmente 298 bytes, ya que utiliza una expresión regular mucho más larga, una que no podría saber cuánto tiempo tardé en descubrir, para contar las respuestas de Python que mi función original en aras de la precisión. Este debería funcionar durante al menos 80% a 90% de todos los casos de prueba que se le presenten.
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)
Pero, ¿qué pasa con esas preguntas con múltiples páginas de respuestas? Ninguno de los anteriores funcionará muy bien en esa situación, si, por ejemplo, 1 respuesta de Python está en la primera página y otra está en la segunda. Bueno, me tomé la libertad de solucionar este problema creando otra versión de mi función (que se muestra a continuación) que verifica cada página de respuestas, si existen varias, para las respuestas de Python, y ha funcionado bastante bien en muchos de los casos de prueba que Lo he tirado. Bueno, sin más preámbulos, aquí está la función nueva y actualizada:
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))
Bastante largo, ¿no es así? Realmente no iba mucho por el golf de código con esto, aunque, si quieres, puedo jugar un poco más. De lo contrario, me encanta y no podría estar más feliz. Oh, casi lo olvido, como un bono adicional, esto también genera el número total de respuestas de Python en la pregunta, el total de votos en la pregunta y el número total de respuestas en la pregunta si la pregunta id
corresponde a una pregunta con más de 1 página de respuestas De lo contrario, si la pregunta solo consta de una sola página de respuestas, solo genera el truthy/falsy
valor. Realmente me dejé llevar por este desafío.
Cada uno de ellos toma la pregunta id
en forma de cadena .
Pondría Try It Online!
enlaces aquí para cada función, pero desafortunadamente, repl.it
ni Ideone
permitir ni buscar recursos a través de la urllib
biblioteca de Python .