Dennis'den fazla mı kaldım?


15

Efsaneye göre , neredeyse herkes Dennis tarafından geride bırakıldı . Değilse, olacaklar.

Şimdi merak ediyorum o 'neredeyse herkesten' biriyim.

Şeklinde bir cevaba bağlantı verilecektir /codegolf/[QUESTION ID]/[QUESTION NAME]/#[ANSWER ID].

Bağlantıdaki cevabın ilk satırında (markdown wise) son sayı olarak kabul edeceğimiz kodun uzunluğunu bulun .

Ardından, Dennis'in cevaplarını arayın ve aynısını yapın.

Şimdi girdinin ve Dennis'in cevaplarının kod uzunluğunu karşılaştırın ve eğer dışarıda kalırsa (yani Dennis'in bir veya daha fazla cevabı girdi cevabından daha kısadır), doğruluk değeri verin ve değilse, yanlış bir değer.

Cevapla aynı soruda Dennis'e ait bir cevap yoksa, yanlış bir değer verin.

Örnekler

kurallar

  • Herhangi bir doğruluk / sahtelik değeri kullanabilirsiniz.
  • Verdiğiniz cevap her zaman .
  • Sorunun Dennis'in cevabı olmayabilir, ama girilen cevap asla Dennis'e ait olmayacak.

  • Cevabın ilk satırında her zaman bir sayı olduğunu varsayabilirsiniz.


3
Dennis tarafından verilen soruya her zaman bir cevap olacağını ve verilen cevabın Dennis'in cevabı olmayacağını varsayabilir miyiz?
Skidsdev

@Mayube Hayır ve evet.
Matthew Roh

Sayfalamayı ele almamız mı gerekiyor yoksa birden fazla cevap sayfası varsa, her iki cevabın da aynı sayfada olacağını varsayabilir miyiz?
Shaggy

@Shaggy eski.
Matthew Roh

@SIGSEGV Dennis'in cevabı yoksa, Dennis'in cevabını geride bırakmadığı için yanlış çıkar mıyız?
Skidsdev

Yanıtlar:


1

Python 3.6 + istekler + BS4 - 363 358 bayt

import bs4,re,requests
u,n=input().split("/#");i=1;d=y=float("inf")
while i:
 A=bs4.BeautifulSoup(requests.get(u+f"?page={i}").text,"html.parser")(class_="answer")
 for a in A:
  c=int(re.findall("\d+",(a("h1")+a("h2")+a("p"))[0].text)[-1])
  if "Dennis"in a(class_="user-details")[-1].text:d=min(c,d)
  if a["data-answerid"]==n:y=c
 i=A and i+1;
print(d<y)

Baskılar Trueya False.

Not: Bu yanıt tarafından üretilen geçersiz HTML nedeniyle şu anda ikinci bağlantıda çalışmıyor ( emve strongetiketleri ikinci satırın sonunda yanlış sırada sonlandırılıyor ve ayrıştırıcının kullanıcı adı bloğunu kaçırmasına neden oluyor). Bunun yerine bu bağlantıda deneyin .

API'yi kullanma - 401 380 bayt

import requests,re
q,A=re.findall("\d+",input());i=1;d=y=float("inf")
while i:
 r=requests.get(f"https://api.stackexchange.com/2.2/questions/{q}/answers?site=codegolf&filter=withbody&page={i}").json();i=r["has_more"]and i+1
 for a in r["items"]:
  c=int(re.search("(\d+)\D+$",a["body"]).group(1))
  if a["owner"]["user_id"]==12012:d=min(d,c)
  if a["answer_id"]==A:y=c
print(d<y)

Bunun ikinci bağlantıda da başarısız olduğunu unutmayın, ancak This may be foul play.başlık yerine bir yanıt başladığı için ...


JSON ayrıştırıcısı yerine yanıt verisi almak için Stack Exchange API'sini kullanmayı düşünün , sadece filter=withbodybayt sayısını almak için yanıt gövdesini elde etmek için GET isteğinizde olduğundan emin olun
Value Ink

API sürümü ile, kullanılan acevap kimliğini belirlemek için, ve başka zaman iterating kez iki kez ( r["items"]yanlış davranışa yol açacak olan. Ayrıca, set gerekmez pagesize(o) 30 varsayılan olur. c=int(re.search(r'(\d+) bytes').group(1))Size bir vermelidir bayt sayısının daha doğru bir şekilde alınması ve daha kısa olması ve hala başarısız (\d+)\s*bytesolması durumunda, hile yapar ancak biraz daha uzundur.Nihayet i=r["has_more"]and i+1, üçlü koşulunuzdan daha kısadır.
Değer Mürekkebi

Aslında normal ifade eşleşmesini unutun. Bu bölümün daha uzun olması için işlev çağrısında yanıt gövdesini eklemeyi hesaba katmayı unuttum. Yine de diğer öneriler hala geçerlidir.
Değer Mürekkebi

@ValueInk Teşekkürler, şimdi biraz daha kısa. Biz gibi görünüyor onun aramalar sadece API için bir golf dili gerek sooo ... uzun
matsjoyce

Belki. Ancak dürüst olmak gerekirse, hoş bir HTML ayrıştırıcıya sahip olmanız ve ayrıca varsayılan olarak soru URL'sinin size verilmesi gerçeği de vardır. Girdi bunun yerine iki sayı olsaydı, kodgolf sorusu için de sayfa almak için biraz ek yük olurdu.
Değer Mürekkebi

1

Yakut, 314 315 308 + 20 = 334 335 328 bayt

Bayrakları kullanır -n -rjson -ropen-uri. Küçük bir hatayı düzeltmek için +1 bayt.

open-uriRuby varsayılan kitaplığını bularak -7 bayt .

~/(\d+)\D+(\d+)/
u="http://api.stackexchange.com/2.2/questions/#$1/answers?site=codegolf&filter=withbody&page=%s"
n=eval$2
a="answer_id"
j=1
o=[]
(o+=r=JSON.parse(open(u%j).read)["items"]
j=r!=[]&&j+1)while j
p o.select{|e|e["owner"]["user_id"]==12012||e[a]==n}.min_by{|e|e["body"][/\d+\s*bytes/].to_i}[a]!=n
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.