Python 3.5, 280 272 260 242 240 byte:
( Terima kasih Adnan untuk trik menggunakan *
operator dalam perbandingan yang menghasilkan 2 byte yang disimpan! )
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)
Cukup sederhana. Menggunakan urllib
pustaka bawaan Python untuk pergi ke situs pertanyaan, dan kemudian menggunakan ekspresi reguler untuk menemukan jumlah suara, jumlah jawaban, dan jumlah jawaban khusus Python dalam teks yang diterjemahkan yang dikembalikan dari situs web. Akhirnya, nilai-nilai ini dibandingkan dengan kondisi yang diperlukan untuk mengembalikan truthy
nilai, dan jika mereka memenuhi semua kondisi, maka True
dikembalikan. Kalau False
tidak demikian.
Satu-satunya hal yang saya khawatirkan di sini adalah bahwa ekspresi reguler memberikan banyak cara dalam hal jumlah jawaban spesifik python untuk menyimpan byte, sehingga mungkin sedikit tidak akurat pada waktu-waktu tertentu, meskipun mungkin cukup baik untuk tujuan dari tantangan ini. Namun, jika Anda ingin yang lebih akurat, saya telah menambahkan satu di bawah ini, meskipun lebih lama dari yang di atas. Yang ditunjukkan di bawah saat ini adalah 298 byte karena menggunakan ekspresi reguler yang jauh lebih lama - yang Anda tidak tahu berapa lama waktu yang saya butuhkan - untuk menghitung jawaban Python daripada fungsi asli saya demi akurasi. Yang ini harus bekerja untuk setidaknya 80% hingga 90% dari semua kasus uji yang dilemparkan padanya.
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)
Tetapi, bagaimana dengan pertanyaan-pertanyaan itu dengan beberapa halaman jawaban? Tak satu pun dari yang di atas akan berfungsi dengan baik dalam situasi itu, jika, katakanlah, 1 jawaban python ada di halaman pertama dan yang lain ada di yang kedua. Yah, saya mengambil kebebasan untuk memperbaiki masalah ini dengan membuat versi lain dari fungsi saya (diperlihatkan di bawah) yang memeriksa setiap halaman jawaban, jika ada banyak jawaban, untuk jawaban Python, dan itu telah dilakukan dengan cukup baik pada banyak kasus uji saya. telah melemparkannya. Nah, tanpa basa-basi lagi, inilah fungsi baru dan yang diperbarui:
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))
Cukup lama, bukan? Saya tidak terlalu suka golf code dengan ini, meskipun, jika Anda mau, saya bisa sedikit menurunkan golf. Kalau tidak, saya menyukainya, dan tidak bisa lebih bahagia. Oh, saya hampir lupa, sebagai bonus tambahan, ini juga menampilkan jumlah total jawaban Python pada pertanyaan, total suara pada pertanyaan, dan total jumlah jawaban pada pertanyaan jika pertanyaanid
terkait dengan pertanyaan dengan lebih dari 1 halaman jawaban. Kalau tidak, jika pertanyaan hanya terdiri dari satu halaman jawaban, itu hanya menghasilkan truthy/falsy
nilai. Saya benar-benar agak terbawa dengan tantangan ini.
Masing-masing mengambil pertanyaan id
dalam bentuk a string .
Saya akan meletakkan Try It Online!
tautan di sini untuk setiap fungsi, tetapi sayangnya, tidak ada repl.it
atau tidak Ideone
mengizinkan pengambilan sumber daya melalui urllib
perpustakaan Python .