Python 3.5, 280 272 260 242 240 байт:
( Спасибо Аднану за трюк с использованием *
оператора в сравнениях, в результате чего 2 сохраненных байта! )
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)
Достаточно просто. Использует встроенную urllib
библиотеку Python для перехода на сайт вопроса, а затем использует регулярные выражения, чтобы найти количество голосов, количество ответов и количество конкретных ответов Python в декодированном тексте, возвращаемом с веб-сайта. Наконец, эти значения сравниваются с условиями, необходимыми для возврата truthy
значения, и, если они удовлетворяют всем условиям, то True
возвращается. В противном случае False
есть.
Единственное, что меня может беспокоить здесь, это то, что регулярные выражения дают много общего с точки зрения количества конкретных ответов Python для сохранения байтов, так что иногда это может быть немного неточным, хотя, вероятно, этого достаточно для цели этого вызова. Однако, если вы хотите гораздо более точный, я добавил один ниже, хотя он длиннее, чем выше. Показанный ниже размер в настоящее время составляет 298 байт, поскольку он использует гораздо более длинное регулярное выражение - которое вы не могли знать, сколько времени я потратил на его обнаружение - для подсчета ответов Python, чем моя первоначальная функция для точности. Это должно сработать примерно для 80-90% всех тестовых случаев.
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)
Но как насчет этих вопросов с несколькими страницами ответов? Ни один из вышеперечисленных не будет работать очень хорошо в этой ситуации, если, скажем, 1 ответ Python находится на первой странице, а другой на второй. Что ж, я взял на себя смелость решить эту проблему, создав другую версию моей функции (показанной ниже), которая проверяет каждую страницу ответов, если существует несколько, на наличие ответов Python, и это хорошо сработало во многих тестовых примерах. бросил на это. Ну, без дальнейших церемоний, вот новая и обновленная функция:
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))
Довольно долго, не правда ли? На самом деле я не собирался много заниматься код-гольфом, хотя, если хочешь, я могу немного поиграть в гольф. В противном случае я люблю это, и не может быть счастливее. О, я чуть не забыл, как дополнительный бонус, он также выводит общее количество ответов Python на вопрос, общее количество голосов на вопрос и общее количество ответов на вопрос, если вопрос id
соответствует вопросу с более чем 1 страницей ответов. В противном случае, если вопрос состоит только из одной страницы ответов, он просто выводит truthy/falsy
значение. Я действительно немного увлекся этим вызовом.
Каждый из них принимает вопрос id
в виде строки .
Я бы поставил Try It Online!
ссылку здесь для каждой функции, но , к сожалению, ни , repl.it
ни Ideone
разрешить извлечение ресурсов с помощью языка Python urllib
библиотеки.