デニスに負けてしまいましたか?


15

伝説よるとほとんどすべての人がデニスに負けています。そうでない場合、彼らはなります。

今、私はそれらの「ほぼ全員」の一人かどうか興味があります。

回答へのリンクがの形式で提供され/codegolf/[QUESTION ID]/[QUESTION NAME]/#[ANSWER ID]ます。

コードの長さを見つけます。これは、リンク内の回答の最初の行(マークダウンの観点)の最後の数と見なされます。

次に、デニスの回答を検索し、同じ操作を行います。

ここで、入力とデニスの回答コード長を比較し、アウトゴルフされている場合(デニスの1つ以上の回答が入力回答より短いことを意味します)、真実の値を出力し、そうでない場合は偽の値を出力します。

回答と同じ質問にデニスに属する回答がない場合は、偽の値を出力します。

  • リンクtrue
  • リンク:(false少なくとも今のところ、変更されたら教えてください)

ルール

  • 任意の形式の真実/偽の値を使用できます。
  • あなたが与えられた答えの質問は、常にです。
  • 質問にはデニスの回答がない場合がありますが、入力された回答はデニスのものではありません。

  • 答えの最初の行には常に数字があると仮定できます。


3
与えられた質問に対するデニスの答えは常に存在し、与えられた答えはデニスの答えではないと仮定できますか?
Skidsdev

@Mayubeいいえ、はい。
マシュー

ページングを処理する必要がありますか、または複数ページの回答がある場合、両方の回答が同じページにあると想定できますか?
シャギー

@シャギー元。
マシュー盧

@SIGSEGVデニスの回答がない場合、デニスは回答をアウトゴルフしていないので、falseを出力しますか?
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)

印刷TrueまたはFalse

注:現在、理由によって生成無効なHTMLの第2のリンク上では動作しません。この答えはemstrongタグは二行目の末尾に間違った順序で終了し、パーサは、ユーザ名のブロックを欠場する原因とされています)。代わりにこのリンクで試してください。

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)

これは2番目のリンクでも失敗しますが、1つの答えは This may be foul play.が、ヘッダーの代わりに ...


使用を検討してJSONパーサ経由代わりに解答データを取得するためにスタック交換APIを念、filter=withbodyバイト数をつかむために、応答体を得るために、あなたのGETリクエストである
バリューインク

APIのバージョンを使用すると、使用a繰り返し処理を行う場合、回答IDを設定した後(2回、および他のr["items"]間違った行動につながるれ、また、あなたが設定する必要はありませんpagesize(それは)30がデフォルトになります。c=int(re.search(r'(\d+) bytes').group(1))あなたを与える必要がありますバイトカウントをより正確に取得し、より短く、それでも失敗する場合(\d+)\s*bytesは、トリックを実行しますが、少し長くなります。最後に、i=r["has_more"]and i+13値条件よりも短くなります
値インク

実際、正規表現の一致は忘れてください。その部分が長くなるように、関数呼び出しに回答本文を追加することを忘れていました。ただし、他の提案は引き続き有効です。
バリューインク

@ValueInkありがとう、少し短くなりました。私たちはAPIのためのゴルフの言語を必要とするように見えますが、その呼び出しはすっごく長いです...
matsjoyce

おそらく。しかし、正直なところ、素晴らしいHTMLパーサーがあるという事実と、デフォルトで質問URLが与えられているという事実もあります。入力が代わりに2つの数字である場合、codegolfの質問のページを取得するためのオーバーヘッドもかなりあります。
バリューインク

1

ルビー、314 315 308 + 20 = 334 335 328バイト

フラグを使用し-n -rjson -ropen-uriます。マイナーバグの修正から+1バイト。

open-uriRubyのデフォルトライブラリを検出して-7バイト。

~/(\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.