Python 3.5, 280 272 260 242 240 byte:
( Grazie ad Adnan per il trucco sull'uso *
dell'operatore nei confronti risultanti in 2 byte salvati! )
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)
Abbastanza semplice. Utilizza la urllib
libreria integrata di Python per accedere al sito della domanda, quindi utilizza espressioni regolari per trovare il conteggio dei voti, il conteggio delle risposte e il conteggio delle risposte specifiche di Python nel testo decodificato restituito dal sito Web. Infine, questi valori vengono confrontati con le condizioni richieste per restituire un truthy
valore e, se soddisfano tutte le condizioni, True
vengono restituiti. Altrimenti lo False
è.
L'unica cosa di cui potrei essere preoccupato qui è che le espressioni regolari lasciano molto spazio ai termini in termini di numero di risposte specifiche di Python per salvare byte, quindi a volte può essere un po 'inaccurato, anche se probabilmente è abbastanza buono per gli scopi di questa sfida. Tuttavia, se vuoi uno molto più preciso, ne ho aggiunto uno qui sotto, anche se è più lungo di quello sopra. Quella mostrata di seguito è attualmente di 298 byte poiché utilizza un'espressione regolare molto più lunga - una che non si può sapere quanto tempo ci ho messo a scoprire - per contare le risposte di Python rispetto alla mia funzione originale per motivi di precisione. Questo dovrebbe funzionare per circa l'80% -90% di tutti i casi di test che gli vengono lanciati.
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)
Ma che dire di quelle domande con più pagine di risposte? Nessuna delle precedenti funzionerà molto bene in quella situazione, se, diciamo, 1 risposta di Python è nella prima pagina e un'altra è nella seconda. Bene, mi sono preso la libertà di risolvere questo problema creando un'altra versione della mia funzione (mostrata di seguito) che controlla ogni pagina di risposte, se ne esistono più, per le risposte di Python, e ha funzionato abbastanza bene su molti dei casi di test che ho l'ho lanciato. Bene, senza ulteriori indugi, ecco la funzione nuova e aggiornata:
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))
Abbastanza a lungo, vero? Non stavo davvero andando molto per il golf del codice con questo, anche se, se vuoi, posso giocarci un po 'di più. Altrimenti, lo adoro e non potrei essere più felice. Oh, ho quasi dimenticato, come bonus aggiuntivo, che genera anche il numero totale di risposte Python sulla domanda, i voti totali sulla domanda e il numero totale di risposte sulla domanda se la domanda id
corrisponde a una domanda con più di 1 pagina di risposte. Altrimenti, se la domanda consiste solo in una singola pagina di risposte, restituisce semplicemente il truthy/falsy
valore. Mi sono davvero lasciata trasportare da questa sfida.
Ognuno di questi prende la domanda id
sotto forma di una stringa .
Vorrei mettere i Try It Online!
collegamenti qui per ogni funzione, ma sfortunatamente, repl.it
né Ideone
permetterei né il recupero delle risorse tramite la urllib
libreria di Python .