Python 3.5, 280 272 260 242 240 bajtów:
( Podziękowania dla Adnana za sztuczkę *
związaną z użyciem operatora w porównaniach dających 2 zapisane bajty! )
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)
Wystarczająco proste. Używa wbudowanej urllib
biblioteki Pythona, aby przejść do strony pytania, a następnie używa wyrażeń regularnych, aby znaleźć liczbę głosów, liczbę odpowiedzi i liczbę konkretnych odpowiedzi w języku Python w zdekodowanym tekście zwróconym ze strony internetowej. Na koniec wartości te są porównywane z warunkami wymaganymi do zwrócenia truthy
wartości, a jeśli spełniają wszystkie warunki, True
są zwracane. W przeciwnym razie False
jest.
Jedyne, o co mogę się tutaj martwić, to to, że wyrażenia regularne dają wiele swobodnego zrozumienia pod względem liczby specyficznych odpowiedzi na python, aby zaoszczędzić bajty, więc czasami może być nieco niedokładne, chociaż prawdopodobnie jest wystarczająco dobre dla cele tego wyzwania. Jeśli jednak chcesz mieć znacznie dokładniejszy, dodałem jeden poniżej, chociaż jest on dłuższy niż powyższy. Ten pokazany poniżej ma obecnie 298 bajtów, ponieważ używa znacznie dłuższego wyrażenia regularnego - takiego, którego nie mogłem wiedzieć, ile czasu zajęło mi odkrycie - do zliczania odpowiedzi w Pythonie niż moja pierwotna funkcja ze względu na dokładność. Ten powinien działać przez około 80% do 90% wszystkich rzuconych na niego przypadków testowych.
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)
Ale co z tymi pytaniami z wieloma stronami odpowiedzi? Żadne z powyższych nie zadziała bardzo dobrze w tej sytuacji, jeśli powiedzmy, że 1 odpowiedź na python znajduje się na pierwszej stronie, a inna na drugiej. Pozwoliłem sobie rozwiązać ten problem, tworząc kolejną wersję mojej funkcji (pokazanej poniżej), która sprawdza każdą stronę odpowiedzi, jeśli istnieje wiele odpowiedzi, pod kątem odpowiedzi w języku Python, i całkiem nieźle poradziła sobie w wielu przypadkach testowych I rzuciłem na to. Cóż, bez zbędnych ceregieli, oto nowa i zaktualizowana funkcja:
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))
Dość długo, prawda? Tak naprawdę nie grałem w golfa kodowego, ale jeśli chcesz, mogę trochę pograć w golfa. W przeciwnym razie uwielbiam to i nie mogłabym być szczęśliwsza. Och, prawie zapomniałem, jako dodatkowy bonus, daje to również całkowitą liczbę odpowiedzi Pythona na pytanie, całkowitą liczbę głosów na pytanie i całkowitą liczbę odpowiedzi na pytanie, jeśli pytanieid
odpowiada więcej niż jednej stronie odpowiedzi. W przeciwnym razie, jeśli pytanie składa się tylko z jednej strony odpowiedzi, po prostu wyświetla truthy/falsy
wartość. Naprawdę dałem się ponieść wyzwaniu.
Każdy z nich przyjmuje pytanie id
w formie ciągu .
Umieściłbym Try It Online!
tutaj linki do każdej funkcji, ale niestety nie pozwala repl.it
ani Ideone
na pobieranie zasobów przez urllib
bibliotekę Pythona .