Python 3.5, 280 272 260 242 240 byte:
( Cảm ơn Adnan về thủ thuật sử dụng *
toán tử so sánh dẫn đến 2 byte được lưu! )
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)
Đủ đơn giản. Sử dụng urllib
thư viện tích hợp của Python để đi đến trang web của câu hỏi và sau đó sử dụng các biểu thức thông thường để tìm số phiếu, số câu trả lời và số câu trả lời cụ thể của Python trong văn bản được giải mã được trả về từ trang web. Cuối cùng, các giá trị này được so sánh với các điều kiện cần thiết để trả về một truthy
giá trị và nếu chúng thỏa mãn tất cả các điều kiện, thì True
được trả về. Nếu không thì False
là.
Điều duy nhất tôi có thể lo lắng ở đây là các biểu thức chính quy đưa ra rất nhiều cách về số lượng câu trả lời cụ thể của python để lưu byte, vì vậy đôi khi nó có thể không chính xác, mặc dù nó có thể đủ tốt cho mục đích của thử thách này. Tuy nhiên, nếu bạn muốn một cái chính xác hơn nhiều, tôi đã thêm một cái bên dưới, mặc dù nó dài hơn cái bên trên. Cái được hiển thị dưới đây hiện là 298 byte vì nó sử dụng một biểu thức chính quy dài hơn nhiều mà bạn không thể biết tôi đã mất bao lâu để khám phá ra câu trả lời của Python so với chức năng ban đầu của tôi vì tính chính xác. Cái này sẽ hoạt động trong khoảng ít nhất 80% đến 90% của tất cả các trường hợp thử nghiệm được ném vào nó.
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)
Nhưng, những câu hỏi với nhiều trang câu trả lời thì sao? Cả hai điều trên sẽ không hoạt động tốt trong tình huống đó, nếu, giả sử, 1 câu trả lời trăn nằm ở trang đầu tiên và một câu trả lời khác ở trang thứ hai. Chà, tôi đã tự do khắc phục vấn đề này bằng cách tạo một phiên bản khác của hàm (hiển thị bên dưới) để kiểm tra mọi trang câu trả lời, nếu có nhiều câu trả lời, cho câu trả lời của Python và nó đã thực hiện khá tốt trên nhiều trường hợp kiểm tra tôi đã ném vào nó. Vâng, không có gì khó chịu, đây là chức năng mới và được cập nhật:
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))
Khá lâu phải không? Tôi thực sự không thích chơi golf với điều này, mặc dù, nếu bạn muốn, tôi có thể chơi golf thêm một chút nữa. Mặt khác, tôi yêu nó, và không thể hạnh phúc hơn. Ồ, tôi gần như quên mất, như một phần thưởng bổ sung, điều này cũng cho ra tổng số câu trả lời của Python cho câu hỏi, tổng số phiếu cho câu hỏi và tổng số câu trả lời cho câu hỏi nếu câu hỏi id
tương ứng với một câu hỏi có nhiều hơn 1 trang câu trả lời. Mặt khác, nếu câu hỏi chỉ bao gồm một trang câu trả lời, nó chỉ xuất ra truthy/falsy
giá trị. Tôi thực sự đã có một chút mang đi với thách thức này.
Những câu hỏi này lấy câu hỏi id
dưới dạng một chuỗi .
Tôi sẽ đặt Try It Online!
các liên kết ở đây cho mỗi chức năng, nhưng thật không may, repl.it
cũng không Ideone
cho phép tìm nạp tài nguyên qua urllib
thư viện của Python .