ฉันกำลังก้าวล้ำโดยเดนนิสหรือไม่?


15

ตามตำนาน , เกือบทุกคนจะ outgolfed โดยเดนนิส ถ้าไม่พวกเขาจะเป็น

ตอนนี้ฉันอยากรู้อยากเห็นถ้าฉันเป็นหนึ่งใน 'เกือบทุกคน'

/codegolf/[QUESTION ID]/[QUESTION NAME]/#[ANSWER ID]คุณจะได้รับการเชื่อมโยงไปคำตอบในรูปแบบของ

ค้นหาความยาวของโค้ดซึ่งเราจะถือว่าเป็นตัวเลขสุดท้ายของบรรทัดแรก (markdown wise) ของคำตอบในลิงค์

จากนั้นค้นหาคำตอบของเดนนิสแล้วทำเช่นเดียวกัน

ตอนนี้เปรียบเทียบความยาวของรหัสคำตอบของอินพุตและเดนนิสและถ้ามันอยู่นอกสนามกอล์ฟ (หมายถึงคำตอบหนึ่งคำหรือมากกว่าของเดนนิสสั้นกว่าคำตอบอินพุต) ให้ส่งค่าความจริงออกมาและหากไม่ใช่ค่าเท็จ

หากไม่มีคำตอบของเดนนิสในคำถามเดียวกันกับคำตอบให้ส่งออกค่าเท็จ

ตัวอย่าง

  • ลิงค์ :true
  • ลิงก์ : false(อย่างน้อยตอนนี้บอกฉันเมื่อมันเปลี่ยน)

กฎระเบียบ

  • คุณสามารถใช้รูปแบบของค่าความจริง / เท็จใด ๆ
  • คำถามคำตอบที่คุณได้รับจะเป็นรหัสกอล์ฟ
  • คำถามอาจไม่มีคำตอบของเดนนิส แต่คำตอบที่ป้อนจะไม่เป็นของเดนนิส

  • คุณอาจคิดว่ามีตัวเลขอยู่เสมอในบรรทัดแรกของคำตอบ


3
เราสามารถสันนิษฐานได้ว่าจะมีคำตอบจากเดนนิสในคำถามที่กำหนดไว้เสมอและคำตอบที่ได้รับจะไม่เป็นคำตอบของเดนนิส?
Skidsdev

@Mayube ไม่และใช่
Matthew Roh

เราจำเป็นต้องจัดการเพจจิ้งหรือเราคิดว่าคำตอบทั้งสองจะอยู่ในหน้าเดียวกันหรือไม่หากมีคำตอบหลายหน้า?
Shaggy

@ Shaggy อดีต
Matthew Roh

@SIGSEGV หากไม่มีคำตอบจาก Dennis เราจะทำผิดพลาดได้หรือไม่เพราะ Dennis ไม่ได้ตอบคำถามนี้?
Skidsdev

คำตอบ:


1

Python 3.6 + การร้องขอ + bs4 - 363 358 ไบต์

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)

พิมพ์หรือTrueFalse

หมายเหตุ: ปัจจุบันไม่สามารถใช้งานลิงก์ที่สองได้เนื่องจากคำตอบนี้ใช้ HTML ไม่ถูกต้อง( emและstrongแท็กถูกยกเลิกในลำดับที่ไม่ถูกต้องในตอนท้ายของบรรทัดที่สองและทำให้ parser พลาดบล็อกผู้ใช้) ลองลิงค์นี้แทน

ใช้ API - 401 380 ไบต์

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)

โปรดทราบว่าการทำเช่นนี้จะล้มเหลวในลิงก์ที่สอง แต่เนื่องจากมีหนึ่งคำตอบที่เริ่มต้นด้วยThis may be foul play.แทนที่จะเป็นส่วนหัว ...


พิจารณาใช้Stack Exchange API เพื่อรับข้อมูลคำตอบแทนผ่านตัวแยกวิเคราะห์ JSONเพียงให้แน่ใจว่าfilter=withbodyอยู่ในคำขอ GET ของคุณเพื่อรับเนื้อหาคำตอบเพื่อรับจำนวนไบต์
Value Ink

กับรุ่น API คุณใช้aสองครั้ง (ครั้งเพื่อตั้งรหัสคำตอบและอื่นเมื่อ iterating r["items"]ซึ่งจะนำไปสู่พฤติกรรมที่ไม่ถูกต้อง. นอกจากนี้คุณไม่จำเป็นต้องตั้งค่าpagesize(มันจะเริ่มต้นที่ 30). c=int(re.search(r'(\d+) bytes').group(1))ควรให้ความ การดึงข้อมูลจำนวนไบต์ที่ถูกต้องมากขึ้นและสั้นลงและหากยังไม่สำเร็จ(\d+)\s*bytesจะเป็นการหลอกลวง แต่จะยาวกว่าเล็กน้อยสุดท้ายi=r["has_more"]and i+1ก็สั้นกว่าเงื่อนไขแบบที่สามของคุณ
Value Ink

จริงๆแล้วลืมเกี่ยวกับการแข่งขัน regex ฉันลืมบัญชีสำหรับการเพิ่มเนื้อหาคำตอบในการเรียกใช้ฟังก์ชันเพื่อให้ส่วนนั้นยาวขึ้น อย่างไรก็ตามคำแนะนำอื่น ๆ ยังคงใช้ได้
มูลค่าหมึก

@ValueInk ขอบคุณบิตสั้นลงแล้ว ดูเหมือนว่าเราต้องใช้ภาษาในการเล่นกอล์ฟเพียงสำหรับ API ที่สายที่มีsoooยาว ...
matsjoyce

บางที. แต่จริงๆแล้วยังมีข้อเท็จจริงที่ว่าคุณมีตัวแยกวิเคราะห์ HTML ที่ดีรวมถึงข้อเท็จจริงที่ว่าคุณได้รับ URL คำถามตามค่าเริ่มต้น หากการป้อนข้อมูลเป็นตัวเลขสองตัวแทนจะมีค่าใช้จ่ายเล็กน้อยสำหรับการรับหน้าสำหรับคำถาม codegolf เช่นกัน
หมึกมูลค่า

1

Ruby, 314 315 308 + 20 = 334 335 328 ไบต์

-n -rjson -ropen-uriใช้ธง +1 ไบต์จากการแก้ไขข้อบกพร่องเล็กน้อย

-7 ไบต์โดยการค้นหาopen-uriไลบรารีเริ่มต้นของทับทิม

~/(\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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.