Python 3.5, 280 272 260 242 240 Bytes:
( Vielen Dank an Adnan für den Trick, den *
Operator in Vergleichen zu verwenden, was zu 2 gespeicherten Bytes führt! )
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)
Einfach genug. Verwendet die in Python integrierte urllib
Bibliothek, um zur Website der Frage zu gelangen, und verwendet dann reguläre Ausdrücke, um die Anzahl der Stimmen, die Anzahl der Antworten und die Anzahl der Python-spezifischen Antworten in dem von der Website zurückgegebenen dekodierten Text zu ermitteln. Schließlich werden diese Werte mit den Bedingungen verglichen, die zum Zurückgeben eines truthy
Werts erforderlich sind , und wenn sie alle Bedingungen erfüllen, werden sie True
zurückgegeben. Ansonsten False
ist.
Das Einzige, worüber ich mir Sorgen machen könnte, ist, dass die regulären Ausdrücke in Bezug auf die Anzahl der pythonspezifischen Antworten zum Speichern von Bytes viel Spielraum bieten. Daher kann es zuweilen etwas ungenau sein, obwohl dies wahrscheinlich ausreicht die Zwecke dieser Herausforderung. Wenn Sie jedoch ein viel genaueres wünschen, habe ich eines unten hinzugefügt, obwohl es länger ist als das obige. Die unten gezeigte Größe beträgt derzeit 298 Bytes, da für die Zählung von Python-Antworten ein viel längerer regulärer Ausdruck verwendet wird, für den Sie nicht wissen konnten, wie lange ich dafür gebraucht habe, als für meine ursprüngliche Funktion. Dieser sollte für mindestens 80% bis 90% aller Testfälle funktionieren.
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)
Aber was ist mit diesen Fragen mit mehreren Seiten voller Antworten? Keines der oben genannten Verfahren funktioniert in dieser Situation sehr gut, wenn sich beispielsweise 1 Python-Antwort auf der ersten Seite und eine andere auf der zweiten Seite befindet. Nun, ich habe mir die Freiheit genommen, dieses Problem zu beheben, indem ich eine andere Version meiner Funktion (siehe unten) erstellt habe, die jede Seite mit Antworten, sofern mehrere vorhanden sind, auf Python-Antworten überprüft. Dies hat sich in vielen der von mir beschriebenen Testfälle bewährt habe es geworfen. Nun, ohne weiteres, hier ist die neue und aktualisierte Funktion:
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))
Ziemlich lange, nicht wahr? Ich habe nicht viel mit Codegolf zu tun, obwohl ich, wenn Sie wollen, ein bisschen mehr Golf spielen kann. Ansonsten liebe ich es und könnte nicht glücklicher sein. Oh, ich hätte fast vergessen, dass dies als zusätzlichen Bonus auch die Gesamtzahl der Python-Antworten auf die Frage, die Gesamtzahl der Stimmen auf die Frage und die Gesamtzahl der Antworten auf die Frage ausgibt, wenn die Frage id
einer Frage mit mehr als einer Seite entspricht von Antworten. Wenn die Frage sonst nur aus einer einzigen Seite mit Antworten besteht, wird nur der truthy/falsy
Wert ausgegeben . Diese Herausforderung hat mich wirklich ein bisschen mitgerissen.
Diese nehmen jeweils die Frage id
in Form einer Zeichenfolge an .
Ich würde Try It Online!
hier Links für jede Funktion setzen, aber leider weder das Abrufen von Ressourcen über Pythons Bibliothek erlauben repl.it
noch .Ideone
urllib