Python 3.5, 280 272 260 242 240 octets:
( Merci à Adnan pour l'astuce sur l'utilisation de l' *
opérateur dans les comparaisons résultant en 2 octets enregistrés! )
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)
Assez simple. Utilise la urllib
bibliothèque intégrée de Python pour accéder au site de la question, puis utilise des expressions régulières pour trouver le nombre de votes, le nombre de réponses et le nombre de réponses spécifiques à Python dans le texte décodé renvoyé par le site Web. Enfin, ces valeurs sont comparées aux conditions requises pour renvoyer une truthy
valeur, et si elles remplissent toutes les conditions, elles True
sont renvoyées. Sinon, False
c'est.
La seule chose qui peut m'inquiéter ici, c'est que les expressions régulières donnent beaucoup de latitude en termes de nombre de réponses spécifiques à python pour économiser des octets, donc cela peut être un peu inexact parfois, bien que ce soit probablement assez bon pour les objectifs de ce défi. Cependant, si vous en voulez un beaucoup plus précis, j'en ai ajouté un ci-dessous, bien que son plus long que celui ci-dessus. Celui montré ci-dessous est actuellement de 298 octets car il utilise une expression régulière beaucoup plus longue - celle que vous ne pouviez pas savoir combien de temps il m'a fallu pour découvrir - pour compter les réponses Python que ma fonction d'origine pour des raisons de précision. Celui-ci devrait fonctionner pour au moins 80% à 90% de tous les cas de test qui y sont lancés.
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)
Mais qu'en est-il de ces questions avec plusieurs pages de réponses? Aucune des réponses ci-dessus ne fonctionnera très bien dans cette situation, si, disons, 1 réponse python se trouve sur la première page et une autre sur la seconde. Eh bien, j'ai pris la liberté de résoudre ce problème en créant une autre version de ma fonction (illustrée ci-dessous) qui vérifie chaque page de réponses, s'il en existe plusieurs, pour les réponses Python, et cela a très bien fonctionné sur de nombreux cas de test que je l'ont jeté. Eh bien, sans plus tarder, voici la nouvelle fonction mise à jour:
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))
Assez longtemps, non? Je n'allais pas vraiment beaucoup pour le golf de code avec cela, bien que, si vous voulez, je puisse le jouer un peu plus. Sinon, je l'adore et je ne pourrais pas être plus heureux. Oh, j'ai presque oublié, en bonus supplémentaire, cela génère également le nombre total de réponses Python sur la question, le nombre total de votes sur la question et le nombre total de réponses sur la question si la question id
correspond à une question de plus de 1 page des réponses. Sinon, si la question ne se compose que d'une seule page de réponses, elle renvoie simplement la truthy/falsy
valeur. J'ai vraiment été un peu emporté par ce défi.
Ceux-ci prennent chacun la question id
sous la forme d'une chaîne .
Je mettrais des Try It Online!
liens ici pour chaque fonction, mais malheureusement, repl.it
ni Ideone
autoriser la récupération de ressources via la urllib
bibliothèque de Python .