Tôi có bị vượt qua bởi Dennis không?


15

Theo truyền thuyết , hầu như tất cả mọi người đều bị Dennis ruồng bỏ . Nếu không, họ sẽ được.

Bây giờ tôi tò mò nếu tôi là một trong số 'hầu hết mọi người'.

Bạn sẽ được cung cấp một liên kết đến một câu trả lời ở định dạng /codegolf/[QUESTION ID]/[QUESTION NAME]/#[ANSWER ID].

Tìm độ dài của mã, mà chúng ta sẽ giả sử là số cuối cùng trên dòng đầu tiên (đánh dấu thông minh) của câu trả lời trong liên kết.

Sau đó, tìm kiếm câu trả lời của Dennis và làm tương tự.

Bây giờ hãy so sánh độ dài mã câu trả lời của đầu vào và của Dennis và nếu nó bị lỗi (nghĩa là một hoặc nhiều câu trả lời của Dennis 'ngắn hơn câu trả lời đầu vào), hãy đưa ra một giá trị trung thực và nếu không, giá trị sai.

Nếu không có câu trả lời thuộc về Dennis cho cùng một câu hỏi với câu trả lời, hãy đưa ra một giá trị sai lệch.

Ví dụ

  • Liên kết :true
  • Liên kết : false(Ít nhất là bây giờ, hãy cho tôi biết khi nào nó thay đổi)

Quy tắc

  • Bạn có thể sử dụng bất kỳ hình thức giá trị trung thực / giả mạo.
  • Câu hỏi về câu trả lời bạn đưa ra sẽ luôn là .
  • Câu hỏi có thể không có câu trả lời của Dennis, nhưng câu trả lời được nhập sẽ không bao giờ thuộc về Dennis.

  • Bạn có thể cho rằng luôn có một số trên dòng đầu tiên của câu trả lời.


3
Chúng ta có thể cho rằng sẽ luôn có câu trả lời của Dennis cho câu hỏi đã cho không, và câu trả lời đã cho sẽ không phải là câu trả lời của Dennis?
Skidsdev

@Mayube Không, và vâng.
Matthew Roh

Chúng ta có cần xử lý phân trang hay chúng ta có thể giả sử cả hai câu trả lời sẽ ở trên cùng một trang nếu có nhiều trang câu trả lời không?
Xù xì

@Shaggy trước đây.
Matthew Roh

@SIGSEGV Nếu không có câu trả lời nào của Dennis, chúng ta có xuất sai không vì Dennis chưa vượt qua câu trả lời?
Skidsdev

Câu trả lời:


1

Python 3.6 + request + bs4 - 363 358 byte

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)

In Truehoặc False.

Lưu ý: hiện không hoạt động trên liên kết thứ hai do HTML không hợp lệ được tạo bởi câu trả lời này (các thẻ emstrongbị chấm dứt theo thứ tự sai ở cuối dòng thứ hai và khiến trình phân tích cú pháp bỏ lỡ khối tên người dùng). Hãy thử nó trên liên kết này thay thế.

Sử dụng API - 401 380 byte

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)

Lưu ý rằng điều này cũng thất bại ở liên kết thứ hai, nhưng vì một câu trả lời bắt đầu bằng This may be foul play.thay vì tiêu đề ...


Thay vào đó , hãy cân nhắc sử dụng API Stack trao đổi để lấy dữ liệu câu trả lời thông qua trình phân tích cú pháp JSON , chỉ cần đảm bảo filter=withbodycó trong yêu cầu GET của bạn để có được phần thân câu trả lời để lấy số byte
Giá trị mực

Với phiên bản API, bạn sử dụng ahai lần (một lần để thiết lập ID câu trả lời, và một khi iterating r["items"], mà sẽ dẫn đến hành vi không chính xác. Ngoài ra, bạn không cần phải thiết lập pagesize(nó sẽ mặc định 30). c=int(re.search(r'(\d+) bytes').group(1))Nên cung cấp cho bạn một truy xuất chính xác hơn của bytecount và ngắn hơn, và nếu nó vẫn thất bại, (\d+)\s*bytesthì mẹo đó sẽ dài hơn một chút. Cuối cùng, i=r["has_more"]and i+1nó ngắn hơn điều kiện tạm thời của bạn.
Ink Ink

Trên thực tế, hãy quên đi trận đấu regex. Tôi quên tài khoản để thêm phần thân câu trả lời trong hàm gọi để phần đó dài hơn. Các đề xuất khác vẫn còn hiệu lực, mặc dù.
Mực giá trị

@ValueInk Cảm ơn, bây giờ ngắn hơn một chút. Có vẻ như chúng ta cần một ngôn ngữ chơi gôn chỉ dành cho API, các cuộc gọi của nó rất dài ...
matjoyce

Có lẽ. Nhưng thành thật mà nói, có một thực tế là bạn có một trình phân tích cú pháp HTML đẹp, cộng với thực tế là bạn được cung cấp URL câu hỏi theo mặc định. Nếu đầu vào là hai số thay vào đó, sẽ có khá nhiều chi phí để nhận trang cho câu hỏi về codegolf.
Mực giá trị

1

Ruby, 314 315 308 + 20 = 334 335 328 byte

Sử dụng các cờ -n -rjson -ropen-uri. +1 byte từ việc sửa một lỗi nhỏ.

-7 byte bằng cách khám phá open-urithư viện mặc định của Ruby.

~/(\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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.