แสดงคำตอบข้างบนของคุณ


15

เขียนโปรแกรมที่แสดงเนื้อหาของ<code>...</code>บล็อกHTML แรกของคำตอบสำหรับคำถามนี้ซึ่งอยู่เหนือคุณเมื่อคำตอบนั้นเรียงตามคะแนนโหวต เอาต์พุตTop!ถ้าคุณเป็นคำตอบที่ดีที่สุด

ละเว้นคำตอบที่มีคะแนนโหวตติดลบหรือไม่มี<code>...</code>แท็ก แหล่งที่มาของโปรแกรมของคุณจะต้องปรากฏใน<code>...</code>บล็อกแรกในโพสต์ของคุณ บล็อกเหล่านี้จะถูกสร้างขึ้นโดยอัตโนมัติเมื่อคุณuse backticksหรือ

indent things with 4 spaces.

นี่คือ code-golf คำตอบที่มีตัวละครน้อยที่สุดชนะ

กฎเพิ่มเติม (อัปเดต)

  • คำตอบในภาษาการเขียนโปรแกรมใด ๆ ที่คุณต้องการ แต่ถ้าคุณตอบหลาย ๆ ครั้งให้ใช้ภาษาที่แตกต่างกัน
  • คุณอาจไม่เขียนโค้ดของคุณอย่างหนัก ความสามารถของโปรแกรมของคุณในการทำงานอย่างถูกต้องไม่ควรขึ้นอยู่กับว่าเป็นจำนวนโหวตหรือขึ้นอยู่กับคำตอบข้างต้น หากการกระจายการโหวตเปลี่ยนไปอย่างมากโปรแกรมของคุณควรส่งออกรหัสของคำตอบข้างต้นอย่างถูกต้อง
  • คุณอาจเขียนโค้ดโปรแกรมของคุณเพื่อค้นหาตัวเองในหน้านี้ (เพื่อค้นหาสิ่งที่สูงที่สุดถัดไป) ผ่านคุณสมบัติที่เป็นเอกลักษณ์ของคำตอบของคุณเช่นชื่อผู้ใช้ของคุณ (ถ้าคุณมีเพียงหนึ่งคำตอบ) หรือลิงก์โดยตรงของคำตอบ
  • หากคำตอบสองข้อมีคะแนนโหวตเท่ากันคุณควรใช้คำตอบที่อยู่เหนือคุณ (ซึ่งฉันเชื่อว่าเป็นคำตอบล่าสุด)
  • คุณอาจมีหลาย<code>...</code>บล็อกในคำตอบของคุณ แต่บล็อกแรกจะต้องมีแหล่งที่มาของโปรแกรมของคุณ

1
ฉันต้องบัญชีหลาย ๆ หน้าหรือไม่?
Julurous

1
ใช่คุณควรคำนึงถึงหลาย ๆ หน้า
งานอดิเรกของ Calvin

4
ทราบว่าinline code spansเป็นเพียงแต่โค้ดที่เหมาะสมเป็นบล็อก<code></code> <pre><code>stuff</code></pre>
Doorknob

3
@ Calvin'sHobbies ฉันคิดว่าคำสั่งของคำตอบที่ถูกผูกไว้ (ด้วยคะแนนเสียง) เป็นแบบสุ่ม อย่างน้อยใน SO ฉันไม่รู้เกี่ยวกับที่นี่
Martin Ender

4
ฉันจะยืนยันการดูแลเกี่ยวกับหน้าหลายตัวที่ไม่จำเป็น - ถ้าคุณไม่ได้อยู่ในหน้าแรกคุณจะไม่ได้รางวัลเลยล่ะค่ะ :)
LRN

คำตอบ:


5

Javascript + jQuery (92 86 64 ถ่าน)

ในการทดสอบให้เปิดเครื่องมือ Dev ในหน้านี้ (ปกติคือ F12) แล้วเรียกใช้รหัสของฉัน!

Javscript นี้จำเป็นต้องรันโดยใช้คอนโซลจากหน้านี้ (และหน้านี้เท่านั้น)

alert($("code",$("#answer-34767").prev().prev()).html()||"Top!")

สั้นมากไม่ต้องใช้แถบเลื่อน!

โดยทั่วไปแล้วมันจะหาคำตอบของฉันด้วย ID จากนั้นรับสองโหนดข้างหน้า (ข้ามการเชื่อมโยงจุดยึด) ถ้านั่นไม่มีอยู่ฉันจะต้องอยู่ด้านบน จากนั้นก็จะขุดลงไปที่แรกองค์ประกอบและได้รับมันcode.innerHTML

สิ่งที่ดีคือ SE ใช้ jQuery เป็นค่าเริ่มต้นดังนั้นฉันจึงได้รับประโยชน์โดยไม่ต้องลอง


2
ผมเองไม่ชอบคำตอบของคุณในขณะที่มันเป็นบิตเช่นการโกง ... alert($("code",$("#answer-34767").prev().prev()).html()||"Top!")อย่างไรก็ตามมันอาจจะเป็นสั้น
core1024

@ core1024: ขอบคุณสำหรับกลอนสด! ฉันไม่ได้คิดที่จะทำสิ่งใดสิ่งหนึ่ง ฉันยอมรับว่าฉันมีข้อได้เปรียบอย่างมาก บางทีฉันต้องนับรหัสของ Firefox เป็น> 78MB? กฎบอกว่า "คำตอบในภาษาการเขียนโปรแกรมใด ๆ ที่คุณต้องการ"
Robbie Wxyz

คุณไม่จำเป็นต้องนับรหัสของ Firefox :) ประโยชน์ของคุณอยู่ในสภาพแวดล้อมปัจจุบันและไม่ได้อยู่ในล่าม ราวกับว่าทุกคนมีแหล่งที่มาของหน้าโหลดไว้แล้วใน "วัตถุ" / "ตัวแปร" +1 สำหรับการหาประโยชน์;)
core1024

4
นี่จะเป็นการเตือน "ด้านบน" ถ้ามันอยู่ด้านบนของหน้าสองนี่เป็นพฤติกรรมที่ถูกต้องหรือไม่?
William Barbosa

@ WilliamBarbosa: ฉันอยู่กับ "lrn" ในอันนั้น (ดูความคิดเห็นของเขาเกี่ยวกับคำถามของ OP)
Robbie Wxyz

6

PHP 666 611 593 588 580 ตัวอักษร

แก้ไข: ใช้ url ที่เล็กลงกว่า แต่ก่อนจาก tinyurl

แก้ไข: การติดตามความคิดเห็นเกี่ยวกับคำตอบอื่น ๆ ฉันใช้ int มากกว่าบูลีน จำเป็นต้องแก้ไขข้อผิดพลาดที่เห็นได้ชัด แต่ได้รับการแก้ไขแล้วในขณะนี้

นี่คือรหัสของฉัน

<?
$a=34727;$b=new DOMDocument();$b->loadHTMLFile("http://turl.no/t2u");$c=$b->saveHTML();$d=$e=1;$f='data-answerid="';$g=strpos($c,$f);$h=substr($c,0,$g);$c=substr($c,($g+15));while($d==1){$g=strpos($c,'"');$i=substr($c,0,$g);if($i==$a){$j=$h;$k=$e;}$g=strpos($c,'vote-count-post ">');$c=substr($c,($g+18));$g=strpos($c,'<');$l=substr($c,0,$g);$g=strpos($c,'data-answerid="');if($g){++$e;++$e;$h=substr($c,0,$g);$c=substr($c,($g+15));}else{$d=2;}}if($k==1){echo 'Top!';}else{$g=strpos($j,'><code>');$m=strpos($j,'</code></pre>');$n=$m-$g-7;$o=substr($j,($g+7),$n);echo nl2br($o);}

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

ฉันยังใช้ tinyurl เพื่อย่อ URL ประหยัดอักขระจำนวนมาก

ฉันหวังว่าคุณจะชอบมัน,

พอล

ป.ล. นี้จะไม่ทำงานใน codepad ดังนั้นจึงไม่สามารถแสดงซอ

แก้ไข: บันทึกอีก 5 รายการโดยมีการเปลี่ยนแปลงแท็ก php

คุณสามารถเห็นมันทำงานที่นี่ในโดเมนที่ฉันไม่ได้ใช้ในขณะนี้ (ดังนั้นไม่เพียงแค่พยายามลิงค์ส่อเสียด) นี่ไม่ใช่ลิงก์ถาวร แต่สามารถใช้ได้ในขณะนี้


คุณสามารถย่อให้สั้นลงได้มากขึ้นโดยใช้ urlshortener ที่สั้นลง =) ตัวอย่างเช่น➡.ws /
.v

ฉันลองกับลิงค์ tinyarrows.com แต่ความล่าช้าในการเชื่อมต่อเซิร์ฟเวอร์หมดเวลา พวกเขาเป็น URL เล็ก ๆ อย่างแท้จริงแม้ว่า
Paul Drewett

1
ในไซต์นี้สามารถใช้แท็กเปิดที่สั้นลง (ฉันเชื่อว่าเป็น<?แทน<?php) และไม่ใช้แท็กปิด นั่นควรทำให้คุณเหลืออีกสองสามตัว
Justin

1
turl.no สร้างลิงก์สั้น ๆ และเนื่องจากเป็น shortener ลิงค์ของนอร์เวย์จึงมีบางคนสังเกตเห็นในระดับสากล นี่คือลิงค์สำหรับคุณ: turl.no/t2uชี้ไปที่หน้าเดียวกับลิงค์ tinyurl.com ของคุณและบันทึกได้ 8 ตัวอักษร
bilde2910

@ bilde2910 ขอบคุณที่ใช้งานได้จริง ๆ แล้วมันก็เป็นอีก URL เล็ก ๆ ชื่นชมมากและ Turl.ca น่าสนใจ เขารักโดเมน. ca ของเขาไม่ใช่ :-)
Paul Drewett

4

โผ412 403

import"dart:io";import"dart:convert";main(){new HttpClient().get("pi.vu",0,"BYga").then((v)=>v.close()).then((r)=>r.transform(UTF8.decoder).join()).then((s,[i,c="Top!"])=>new RegExp(r'<div id="answer-(\d+)[^]*?vote-count-post ">(\d+)[^]*?<table class="fw"').allMatches(s).forEach((m)=>m[1]=="34735"?print(c):m[2][0]!='-'&&(i=(s=m[0]).indexOf("<code>"))>0?c=s.substring(i+6,s.indexOf("</code>",i)):0));}

Ungolfed (ดีมี newlines และ whitespace ชั้นนำ)

import"dart:io";
import"dart:convert";
main(){
  new HttpClient().get("pi.vu",0,"BYga")
  .then((v)=>v.close())
  .then((r)=>r.transform(UTF8.decoder).join())
  .then((s,[i,c="Top!"])=>
      new RegExp(r'<div id="answer-(\d+)[^]*?vote-count-post ">(\d+)[^]*?<table class="fw"')
      .allMatches(s)
      .forEach((m)=>
          m[1]=="34735"?print(c)
                       :m[2][0]!='-'&&(i=(s=m[0]).indexOf("<code>"))>0
                           ?c=s.substring(i+6,s.indexOf("</code>",i)):0
  ));
}

4

เดลฟาย (688 873 859 848 840)

ฉันจะพยายามกำจัดตัวละครบางตัวออกไป แต่มันจะทำงาน :)

แก้ไข:แทนที่จะทำให้สั้นลงฉันใช้เวลานานกว่า:
ฉันลืมเพิ่มในการเพิกเฉยต่อคำตอบเมื่อมีจำนวนเงินติดลบหรือไม่มีการบล็อกโค้ด

ฉันแค่อัปเดตเวอร์ชันที่ไม่ตีกอล์ฟขณะกำลังแก้ไข
ขอบคุณ @manatwork สำหรับการแก้ไขที่แนะนำซึ่งมีความยาว 8 ตัวอักษร

รุ่น Golfed:

uses IdHTTP,Classes,MSHTML;const u='http://codegolf.stackexchange.com/questions/34705/output-the-answer-above-yours/34718#34718';var g:TIdHTTP;m:TMemoryStream;l:TStringList;p,t,r,o:OleVariant;s,i,j:int32;c:boolean;begin L:=TStringList.Create;g:=TIdHTTP.Create(nil);m:=TMemoryStream.Create;g.Get(u,m);m.Position:=0;L.LoadFromStream(m);p:=coHTMLDocument.Create as IHTMLDocument2;p.write(l.Text);for I:=0to p.body.all.length-1do begin c:=0>1;t:=p.body.all.item(i);if(t.classname='answer')and(t.id='answer-34718')then if s=0 then writeln('Top!') else for j:=0to o.all.length-1do begin t:=o.all.item(j);if t.tagname='CODE'then writeln(t.innertext);end else if t.classname='answer'then begin for j:=0to t.all.length-1do begin r:=t.all.item(j);if r.tagname='CODE'then c:=1>0 else if c and(r.class='vote-count-post')and(r.innertext[1]<>'-')then begin o:=t;s:=1;end;end;end;end;end.

เวอร์ชันที่ไม่ถูกปรับแต่ง:

uses
  IdHTTP,Classes,MSHTML;
const
  u='http://codegolf.stackexchange.com/questions/34705/output-the-answer-above-yours/34718';
  a='answer';b='CODE';
var
  g:TIdHTTP;
  m:TMemoryStream;
  l:TStrings;
  p,t,r,o,z:OleVariant;
  s,i,j:int32;
  c:byte;
begin
  L:=TStringList.Create;
  g:=TIdHTTP.Create(nil);
  m:=TMemoryStream.Create;
  g.Get(u,m);
  m.Position:=0;
  L.LoadFromStream(m);
  p:=coHTMLDocument.Create as IHTMLDocument2;
  p.write(l.Text);
  z:=p.body.all;
  for I:=0to z.length-1do
  begin
    c:=0;
    t:=z.item(i);
    if(t.classname=a)and(t.id='answer-34718')then
      if s=0 then
        write('Top!')
      else
        for j:=0to o.all.length-1do
        begin
          t:=o.all.item(j);
          if t.tagname=b then
            write(t.innertext)
        end
    else if t.classname=a then
      for j:=0to t.all.length-1do
      begin
        r:=t.all.item(j);
        if r.tagname=b then
          c:=1
        else if(c=1)and(r.class='vote-count-post')and(r.innertext[1]<>'-')then
        begin
          o:=t;
          s:=1;
        end;
      end;
  end;
end.

http://codegolf.stackexchange.com/questions/34705/output-the-answer-above-yours/34718#34718สามารถเปลี่ยนเป็นhttp://codegolf.stackexchange.com/q/34718ซึ่งจะช่วยประหยัดตัวละครเล็กน้อย
Doorknob

ขอบคุณน่าเศร้าที่ฉันต้องเพิ่มบางอย่างตั้งแต่ฉันลืมส่วนที่คุณต้องเพิกเฉยต่อคำตอบที่มีจำนวนลบหรือไม่มีการบล็อกรหัส: / .. ไม่ทำงาน :( ฉันได้รับ 301 ถาวรย้าย
Teun Pronk

ตามที่แนะนำไว้ก่อนหน้านี้คุณสามารถประกาศ l TStringsแทนได้ (แต่ให้การอินสแตนซ์ด้วยTStringList)
จัดการ

ฉันจะพยายามที่จะทำให้คแทนbyte boolean
จัดการ

3

Python - 280

import os, sys, cgi
os.system('wget http://codegolf.stackexchange.com/questions/34705/output-the-answer-above-yours.html -q -O a')
b=[ x[:-2] for x in open('a').read().split('code>') if x[-1]=='/']
for i, m in enumerate(b):
    if m == cgi.escape(open(sys.argv[0]).read()):
        print b[i-1]

นี่คือ codegolf ครั้งแรกของฉันดังนั้นฉันหวังว่านี่จะเป็นกอล์ฟ - พอ!

แก้ไข: ขอบคุณสำหรับเคล็ดลับ! ตอนนี้มันดูเหมือนนักเล่นกอล์ฟนิดหน่อย


ไม่ดูแย่สำหรับการลองครั้งแรก! แม้ว่าคุณจะสามารถใช้ URL ให้สั้นลงสำหรับการเชื่อมโยงและกำจัดช่องว่างไม่กี่ในนั้น ( for i,m, m==openฯลฯ )
Christoph Böhmwalder

@HackerCow ฉันคิดว่าตัวย่อ URL จะขมวดคิ้วโดยทั่วไป แต่http://codegolf.stackexchange.com/q/34705/14509จะได้ผลแน่นอน
undergroundmonorail

@KidElephant ฉันลบช่องว่างออกจากโค้ดของคุณ ฉันไม่ได้ทดสอบหรืออะไรนอกจากว่าฉันเมามันควรจะเป็นโปรแกรมเดียวกัน (ตรรกะ) โปรดทราบว่าฉันลบ shebang ออกแล้วไม่จำเป็นต้องใช้ที่นี่ ix.io/dszการออกช่องว่างสามารถบันทึกค่อนข้างไม่กี่ไบต์ :)
undergroundmonorail

นอกจากนี้สำหรับการแข่งขันกอล์ฟรหัสคุณควรรวมจำนวนไบต์ ฉันจะแก้ไขให้คุณที่นี่ แต่คำตอบของคุณอาจเปลี่ยนแปลงหากคุณใช้คำแนะนำใด ๆ ดังนั้นฉันจะไม่รบกวน wc -c $filenameคุณสามารถค้นหานับไบต์โดยการเรียกใช้ หากตัวแก้ไขของคุณผนวกบรรทัดใหม่ต่อท้ายไปยังไฟล์ (อาจเป็นไปได้) คุณสามารถลบหนึ่งบรรทัดจากนั้นเพื่อให้ได้คะแนนสุดท้าย
undergroundmonorail

2

คณิตศาสตร์ - 159

ครั้งแรกที่ทำการแยกวิเคราะห์ใน Mathematica

FirstCase[
 Cases[Import["http://bit.do/JGta1","XMLObject"],
 {__,a_,_,_,_,XMLElement[_, {_, "id""answer-34780",__},_],__}a,∞], 
 XMLElement["code",_,{c_}]c,"Top!",∞]

2

Ruby 283 + 17 = 300

การทำเช่นนี้จะสำเร็จโดยไม่คำนึงว่าจะได้รับคะแนนโหวตกี่คำและไม่ว่าจะมีหน้าคำตอบที่สอง (หรือสิบห้า) หน้าหรือไม่ มันใช้ data API

d=34849
JSON.parse(Net::HTTP.get(URI("http://api.stackexchange.com/2.2/questions/34705/answers?site=codegolf&filter=8G3Ng9T*")))['items'].map{|a|abort$1.gsub(/&.+?;/){|g|g[?a]??&:g[?g]??>:?<}if !d&&a['score']>=0&&/<code>(.*?)<\/code>/m=~a['body']
d=p if a['answer_id']==d}
$><<'Top!'

จะต้องทำงานด้วยruby -rnet/http -rjson(ดังนั้น +17)

ungolfed:

d = 34849 # this answer id
i = JSON.parse(Net::HTTP.get(URI("http://api.stackexchange.com/2.2/questions/34705/answers?site=codegolf&filter=8G3Ng9T*")))['items'] # stackexchange api answers for this question
i.map{ |a|
  # if we've already hit this answer, the score's above 0 and there's code...
  if !d && a['score']>=0 && /<code>(.*?)<\/code>/m=~a['body'] then
    # abort with html-unescaped code
    abort $1.gsub(/&.+?;/){ |g|
      # this turns &amp;, &gt; and &lt; into &, > and <, respectively
      g[?a] ? ?& : g[?g] ? ?> : ?<       
    }
  end
  # if we are at our answer, set d = nil
  if a['answer_id']==d then 
    d = p 
  end
}
# no abort. puts 'Top!'
$><<'Top!'

การเปลี่ยนแปลง

การลบ300 parens ในสัญลักษณ์ regex

302การกระทำครั้งแรก


คุณสามารถบันทึกไบต์ได้ด้วยการทำให้ตัวกรองของคุณไม่ปลอดภัย
pppery

@ กรุณาอธิบาย?
ไม่ใช่ว่า Charles

การใช้ตัวกรองที่ไม่ปลอดภัยหมายความว่าคุณต้องใช้ HTML unescape ด้วยตนเอง ดูเอกสารตัวกรอง
pppery

1

PHP 135

<?
preg_match_all('@(\d+?)"></a.*de>(.*)</c@Us',join('
',file('http://pi.vu/BYga')),$m);echo$m[2][array_search(34786,$m[1])-1]?:'Top!';

แก้ไข: shortener URL ของ lrn ​​สร้าง URL ที่สั้นที่สุด :)

RegEx จะจับคู่ anchor ก่อนคำตอบแต่ละคำตอบ (พร้อมกับรหัสคำตอบ) และเนื้อหาภายใน<code>แท็กแรก การUตั้งค่าสถานะก่อให้เกิดUโหมด ngreedy และการsตั้งค่าสถานะ.ตรงกับบรรทัดใหม่ (หยิบมาก) ฉันไม่กังวลหากสิ่งนี้ตรงกับสิ่งอื่นขณะที่คำตอบหนีออกไปดังนั้นไม่มีใครสามารถแทรก<ตัวอักษรในแหล่งที่มาของหน้า

หลังจากฉันได้รับคำตอบทั้งหมด$m[2]และ ID ของพวกเขามา$m[1]ฉันก็แค่echoพิมพ์คำตอบข้างบนของฉันอย่างที่มันอยู่$m[2][array_search(34786,$m[1])-1]หรือ "Top!" ถ้าคำตอบของฉันได้ในที่สุด :)

ฉันชอบความจริงที่ว่าใน PHP ผู้ประกอบการที่สามสามารถใช้เป็นผู้ดำเนินการไฟฟ้าลัดวงจร ?:


นั่นช่างยอดเยี่ยม ฉันเพิ่งทดสอบ แต่มันแสดงรหัสจากด้านล่าง ฉันแน่ใจว่านี่จะเป็นการแก้ไขด่วน แต่ฉันคิดว่าฉันจะพูดถึงมัน งานที่น่าตื่นตาตื่นใจแม้ว่า 135 ใน PHP ฉันยังคงไม่สามารถค่อนข้างเชื่อว่ามัน ...
พอล Drewett

1
@PaulDrewett โปรดดูคำสั่งเมื่อคุณเปิดหน้านี้ในการเรียกดูแบบส่วนตัว มันแตกต่างจากการสั่งซื้อเมื่อคุณเข้าสู่ระบบ
core1024

โอ้นั่นเป็นเรื่องที่น่าประหลาดใจ ฉันสงสัยว่าทำไม? ขออภัยที่ระบุข้อผิดพลาดด้วยข้อผิดพลาด ความผิดฉันเอง. ฉันโหวตขึ้นคุณว่าเป็นคำตอบที่มีประโยชน์ ฉันยังคงคิดว่ามันน่าทึ่ง ...
พอล Drewett

1

Delphi, 461 ไบต์ , 553 ไบต์

ตอนนี้จัดการหลายหน้าด้วย!

แข็งแรงเล่นกอล์ฟ:

uses IdHTTP,RegularExpressions;var T,S,O:String;K,V,C:Int32;begin repeat Inc(C);Str(C,S);S:=TIdHTTP.Create.Get('http://codegolf.stackexchange.com/questions/34705/output-the-answer-above-yours?page='+S);T:=T+S;until Pos('<span class="page-numbers next',S)=0;O:='Top!';for T in TRegEx.Split(T,'<a name="') do begin S:=T;Val(Copy(S,1,Pos('"',S)-1),K,C);if C=1then Continue;Delete(S,1,Pos('post ">',S)+6);Val(Copy(S,1,Pos('<',S)-1),V,C);C:=Pos('<code>',S);if(C=0)or(V<0)then Continue;if K=34844then Break;O:=Copy(S,C+6,Pos('</code>',S)-C-6);end;Write(O)end.

(เล็กน้อย) Ungolfed:

uses
  IdHTTP,RegularExpressions;
var
  T,S,O:String;
  K,V,C:Int32;
begin
  // download all pages in thread and concat them
  repeat
    Inc(C);
    Str(C,S);
    S:=TIdHTTP.Create.Get('http://codegolf.stackexchange.com/questions/34705/output-the-answer-above-yours?page='+S);
    T:=T+S;
  until Pos('<span class="page-numbers next',S)=0;
  O:='Top!'; // initialize code string to 'Top!'
  for T in TRegEx.Split(T,'<a name="') do begin
    S:=T;
    Val(Copy(S,1,Pos('"',S)-1),K,C); // try to extract user id
    if C=1then Continue; // if failed, continue loop
    Delete(S,1,Pos('post ">',S)+6); // prepare S for next parse
    Val(Copy(S,1,Pos('<',S)-1),V,C); // try to extract vote count
    C:=Pos('<code>',S); // check if <code> tag exists
    if(C=0)or(V<0)then Continue; // make sure vote count is positive and <code> tag exists
    if K=34844then Break; // if its our answer, break the loop
    O:=Copy(S,C+6,Pos('</code>',S)-C-6); // get string in <code> tag
  end;
  Write(O); // write <code> string
end.

วิธีการใช้งาน:

app.exe > output.txt

ดีฉันได้ทำเช่นนั้นแทนการใช้หน่วย html .. อัปยศฉันไม่ได้คิดว่า: P
Teun Pronk

ขอบคุณ นอกจากนี้หนึ่งในรหัส (หากไม่เพียง แต่) ที่จัดการหลาย ๆ หน้าได้เช่นกัน
Marko Paunovic

1

PHP - 412 - 422 - 416 - 252 - 248:

ยังทำงานอยู่ฉันยังไม่ได้ทำอะไรเลยเกี่ยวกับหลาย ๆ หน้า (หรือไม่มีใครเลย)

ฉันมีตัวละครลดลง 200 ตัวโดยการตัดออกมาเป็นจำนวนมากทำไมต้องค้นหาวัตถุเมื่อฉันสามารถหาตำแหน่งของพวกเขาได้?

นี่คือรหัสกอล์ฟครั้งแรกของฉัน! ฉันมีความสุขที่ได้ทำใน 200 และใช้วิธีการ dom ขอบคุณความคิดเห็นฉันเพิ่งโกน 4 ตัวละครเพิ่มเติม

ฉันต้องการทำบางสิ่งเช่น jquery / jscript เกี่ยวกับการสำรวจ dom และยังคงพยายามลดน้ำหนักลง บางทีฉันอาจจะออกไปพร้อมกับค้นหา "asi" เป็นชื่อผู้ใช้ของฉัน?

กอล์ฟ:

<? $d=new DOMDocument;$d->loadHTMLFile("http://bit.do/JGta");$x=new DOMXPath($d);$r=$x->query("//*[@class='answer']");$a=-1;while($f=$r->item(++$a))if(strpos($f->nodeValue,"Asitaka"))echo$x->query(".//pre//code",$r->item($a-1))->item(0)->nodeValue;

จัดรูปแบบ:

    <?php
$d = new DOMDocument();
$d->loadHTMLFile("http://bit.do/JGta");
$x = new DOMXPath($d);
$r = $x->query("//*[@class='answer']");
$a = -1;
while($f = $r->item(++$a))
        if ( stripos($f->nodeValue, "Asitaka")!= 0)
            echo $x->query(".//pre//code",$r->item($a-1))->item(0)->nodeValue;
?>

ไชโย


วงเล็บในnew DOMDocument()และการปิด?>สามารถละเว้นใน PHP
jimmy23013

ขอขอบคุณตัวละครหายไปอีก 4 ตัว ในขณะนี้ฉันไม่สามารถจินตนาการได้ว่าจะทำให้สั้นลงได้อย่างไรถ้าฉันใช้คลาสที่แตกต่างกันอุปกรณ์เข้าถึง DOM มีราคาแพง
Asitaka

บันทึกตัวละครด้วยการเปลี่ยนชื่อผู้ใช้ของคุณ!
DavidG

ฉันคิดว่ามันเจ๋ง ฉันแค่พยายามเรียนรู้ส่วนการสืบค้นของ DOMXPath แต่ฉันต้องยอมรับว่าฉันพบว่ามันยาก ฉันลองทำสิ่งนี้ แต่ก็ทำไม่ได้ ฉันทดสอบคุณแล้ว แต่ดูเหมือนว่าจะรายงานหนึ่งในสองที่อยู่เหนือไม่ใช่ที่อยู่ด้านบนโดยตรง ฉันแน่ใจว่ามันเป็นการแก้ไขด่วน แต่แค่คิดว่าฉันจะพูดถึงมัน
Paul Drewett

การติดตามข้อมูลนี้ "โปรดดูคำสั่งซื้อเมื่อคุณเปิดหน้านี้ในการเรียกดูแบบส่วนตัวมันแตกต่างจากคำสั่งเมื่อคุณลงชื่อเข้าใช้ - core1024" จากคำตอบคำตอบที่แตกต่างกันฉันต้องถือว่าเหมือนกัน ขอโทษสำหรับสิ่งนั้น.
Drewett Paul

1

Python 3, 197 191 ไบต์

import urllib.request as u,gzip,json;p='Top!'
for r in json.loads(gzip.decompress(u.urlopen("http://bit.ly/2hN8TKV").read()).decode())["items"]:
 if r['answer_id']==82837:exit(p)
 p=r['body']

กฎไม่ได้บอกว่าฉันไม่สามารถใช้ API และฉันไม่สามารถใช้ตัวย่อ URL ได้

https://tinyurl.com/hdemk76ขยายเป็นhttps://api.stackexchange.com/2.2/questions/34705/answers?order=desc&sort=votes&site=codegolf&filter=withbody&pagesize=100 ใช้ได้เฉพาะเมื่ออยู่ใน 100 คำตอบที่เรียงลำดับตามการโหวต


-6 ถ้าคุณแทนที่https://tinyurl.com/hdemk76ด้วยhttp://bit.ly/2hN8TKV
Taylor Scott
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.