蟒3.5,280个 272 260 242 240字节:
(感谢Adnan提供了*
在比较中使用运算符的技巧,从而节省了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)
很简单。使用Python的内置urllib
库转到问题的站点,然后使用正则表达式在网站返回的解码文本中查找投票计数,答案计数以及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)
但是,那些多页答案的问题呢?如果在第一个页面上有一个python答案,而在第二个页面上有另一个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))
相当长,不是吗?我并没有为此投入太多精力,尽管,如果您愿意,我可以再打一点。否则,我会喜欢它,并且不会更快乐。哦,我差点忘了,作为一项额外的奖励,如果该问题id
对应于一页以上的问题,它还会输出该问题的Python答案总数,该问题的总票数以及该问题的答案总数。的答案。否则,如果问题仅由单页答案组成,则仅输出truthy/falsy
值。我确实确实对这项挑战感到有些困惑。
这些都采用字符串id
形式的问题。
我会Try It Online!
在此处为每个函数放置链接,但不幸的是,既不允许repl.it
也Ideone
不允许通过Python的urllib
库获取资源。