เขียนโปรแกรมที่ดาวน์โหลดเอง


66

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

กฎ:

  • ไม่อนุญาตให้ใช้ตัวย่อ URL
  • คำตอบจะต้องมีรูปแบบปกติ - ส่วนหัวที่มีชื่อภาษาและขนาดคำอธิบายเพิ่มเติมบล็อกรหัสคำอธิบายเพิ่มเติมและคำอธิบาย ไม่อนุญาตให้ใช้ตัวคั่นที่ผิดธรรมชาติ
  • ผลลัพธ์จะต้องมาจากบล็อกโค้ดจริงที่โพสต์บนเว็บไซต์
  • ฟังก์ชั่นจะต้องไม่ขึ้นอยู่กับตำแหน่งในรายการคำตอบ มันควรทำงานแม้ว่าจะมีหลายหน้าและคำตอบนั้นไม่ได้อยู่ในหน้าแรก
  • ใหม่:หมายเหตุพิเศษสำหรับคำตอบที่ควรจะเรียกใช้ในเบราว์เซอร์: มันก็โอเคที่จะต้องใช้พวกเขาในโดเมน codegolf (เพื่อปฏิบัติตามนโยบายที่มาเดียวกัน) แต่โดเมนและเส้นทางควรจะรวมอยู่ในการแก้ปัญหาเพื่อ ทำให้มันยุติธรรม

39
Catch-22: ฉันควรทดสอบการส่งของฉันอย่างไร
Martin Ender

9
ฉันละทิ้งคนที่โพสต์คำตอบและลบพวกเขาเพื่อให้พวกเขาสามารถทดสอบรหัส
Justin

4
@ คำตอบ m.buettner สามารถทดสอบได้ในคำตอบอื่น ๆ (ยังคำถามอื่น ๆ ) ก่อนแล้วโพสต์แล้วแก้ไขเพื่อเปลี่ยนแปลง URL ที่ :)
aditsu

8
@hexafraction ถ้าความคิดเห็นสามารถเข้าไปยุ่งเกี่ยวกับคำตอบแล้วคำตอบคือไม่ดีมาก ...
aditsu

17
คำถามที่ติดอยู่ในหัวของฉัน: วิธีการเขียนทวีตที่เชื่อมโยงกับตัวเองโดยไม่ต้องใช้ตัวย่อ URL ใด ๆ แต่โดยการประมาณทวีต id ทวีตของคุณ?
Ming-Tang

คำตอบ:


34

Bash + coreutils + Lynx เบราว์เซอร์ 61 ไบต์

ขอบคุณ @FDinoff สำหรับเคล็ดลับ:

lynx -dump codegolf.stackexchange.com/posts/28164/body|grep 2

4
และจะเกิดอะไรขึ้นถ้าฉันพิมพ์ grep คำวิเศษที่ต้องการ?
Shade

3
คมคมคมคมคม. ความคิดเห็นนี้จะถูก grepping out (และหัวข้อเช่นกัน)
ζ--

1
@hexafraction Awww คุณต้องไปทำลายมัน!
Shade

8
URL นี้ควรใช้งานได้ codegolf.stackexchange.com/posts/28164/bodyและจะละเว้นความคิดเห็น ฉันยังคิดว่ามันอยู่ในกฎที่คุณสามารถใช้ ...
FDinoff

3
@DigitalTrauma awww ... เจ้ากรรม
haneefmubarak

22

Ruby, 155 186 195 148 138 110 97 ตัวอักษร

require'open-uri';puts open('http://codegolf.stackexchange.com/posts/28159/body').read[/req.+;/];

ฉันต้องทำให้มันเป็นหนึ่งบรรทัดเพราะมิฉะนั้นมันจะออกบรรทัดใหม่\nแทนบรรทัดใหม่จริง

  • +31 ตัวอักษรเพราะฉันไม่ได้สังเกตว่าตัวละครบางตัวกำลังหลบหนี
  • +9 ตัวอักษรเพื่อกำจัดแบ็กสแลชที่น่ารำคาญ
  • ขอบคุณ Nathan Osman สำหรับการบันทึก 2 ตัวอักษรและ Ventero สำหรับการบันทึก 55 (!!!) โดยการลบความต้องการสำหรับการแก้ไขส่วนใหญ่ที่กล่าวข้างต้น

คำอธิบาย

ลองตกแต่งนี้ให้ดีก่อน อย่างไรก็ตามฉันจะต้องใช้สัญกรณ์ ... ที่น่าสนใจในรหัสนี้ ฉันไม่สามารถใช้เครื่องหมายอัฒภาคได้ในโพสต์นี้ด้วยเหตุผลอธิบายในภายหลังดังนั้นฉันจะใช้{SEMI}แทนเครื่องหมายอัฒภาคแทน

require 'open-uri'
resp = open('http://codegolf.stackexchange.com/posts/28159/body').read
puts resp.match(/req.+{SEMI}/){SEMI}

เอาล่ะทีนี้มาดูเรื่องนี้กัน สองบรรทัดแรกนั้นอธิบายได้ด้วยตนเอง - พวกเขาดึงข้อความ HTML ของคำตอบนี้

ตอนนี้บรรทัดสุดท้ายคือสิ่งที่น่าสนใจที่นี่ คุณเห็นอัฒภาคที่ดูเหมือนจะไร้ประโยชน์ในตอนท้ายของรหัสหรือไม่ มันจำเป็นอย่างยิ่งและนี่คือเหตุผล

ก่อนอื่นresp.matchแยกรหัสที่จะพิมพ์ regexp ที่ใช้สำหรับสิ่งนี้คือเคล็ดลับ: /req.+{SEMI}/. มันคว้าจุดเริ่มต้นของรหัสREQuire'net/http'โดยค้นหาreq( reจะคว้าฉันREputation) จากนั้นหาจุดสิ้นสุดของรหัสโดยค้นหาเครื่องหมายอัฒภาค! เนื่องจาก+เป็นโลภโดยค่าเริ่มต้นมันจะดำเนินต่อไปจนกว่าจะพบอัฒภาคที่หมายถึงจุดสิ้นสุดของรหัส ดูว่าทำไมฉันไม่สามารถใช้เครื่องหมายอัฒภาคได้อีก?

หลังจากนั้นฉันก็ไม่ต้องทำอะไรผิดเพี้ยนไปขอบคุณการแก้ไขของ Ventero ที่ไม่ได้ใช้\อีกต่อไป สิ่งที่ฉันต้องทำคือแก้ไข{AMPERSAND}การเปลี่ยนเป็น{AMPERSAND}amp{SEMI}สิ่งที่ทำได้โดยการถอดชิ้นamp{SEMI}ส่วนออก ไม่จำเป็นสำหรับสิ่งนี้อีกต่อไปเพราะ URL ใหม่ หลังจากนั้นรหัสเดิมจะถูกเรียกคืน! (หมายเหตุ: ฉันไม่สามารถใช้เครื่องหมายแอมเปอร์แซนด์ได้เนื่องจากได้รับการเข้ารหัส HTML ซึ่งเป็นสาเหตุให้สร้างเครื่องหมายอัฒภาค)


ตัวละครบางตัวหนีออกมา ..
aditsu

1
@aditsu Gah; ไม่ได้สังเกตว่า แก้ไขแล้ว.
Doorknob

คุณจะเกลียดสิ่งนี้ .. เครื่องหมายแบ็กสแลชกำลังมีการซ้ำซ้อน นอกจากนี้ยังมีความแตกต่างขึ้นบรรทัดใหม่ แต่นั่นเป็นสิ่งเล็กน้อย
aditsu

@aditsu Argh! : P แก้ไขด้วย สิ่งที่ขึ้นบรรทัดใหม่เป็นเพราะputs; มันสามารถแก้ไขได้ด้วยprintแต่ meh เพิ่งแสร้งว่ามีบรรทัดขึ้นบรรทัดใหม่ในรหัสแม้ว่า SE จะไม่สามารถแสดงได้
Doorknob

1
สำหรับลิงก์นั้น http://codegolf.stackexchange.com/a/28159จะให้ผลลัพธ์เหมือนกับของคุณและจะบันทึกบางตัวอักษร
Mhmd

20

PowerShell - 69 62

(irm codegolf.stackexchange.com/posts/28236/body).div.pre.code

DOM ในเชลล์ ดี!
fregante

ไม่จำเป็นต้องมีการจัดการสิทธิ์ Azure หากไม่มีโมดูลนั้นฉันคิดว่าคุณสามารถทำได้ด้วย Invoke-WebRequest
Scott Leadley

@ScottLeadley irmเป็นชื่อแทนInvoke-RestMethodและได้รับการแนะนำกับ PowerShell v3 core computerperformance.co.uk/powershell/powershell3-alias.htm
Rynant

10
อึศักดิ์สิทธิ์ คำตอบกอล์ฟรหัส PowerShell ที่มีความยาวในขนาดเดียวกันกับคำตอบที่นำ +1
Adam Maras

@ อดัมมาศฮาฉันรู้ว่าคุณหมายถึงอะไร! มันจะเกิดขึ้นเป็นครั้งคราวแม้ว่า codegolf.stackexchange.com/a/26811/4565และcodegolf.stackexchange.com/a/21982/4565ไม่ไกลจากผู้นำ
Rynant

15

JavaScript - 123 122 101 95 92 91 87 86 114

with(new XMLHttpRequest)send(open(0,/\codegolf.stackexchange.com\posts\28175\body/,0)),alert(/w.*/.exec(response))

ทำงานในคอนโซลของเว็บเบราว์เซอร์ของคุณในหน้านี้ ทดสอบกับ Chrome และ Firefoxล่าสุด

แก้ไข: +28 ไบต์เพื่อเพิ่มโดเมนแบบเต็ม

Firefox ไม่ชอบเคล็ดลับ Regex URL ของฉันอีกต่อไปด้วยการอัปเดตนี้ :(

นี่คือวิธีแก้ปัญหา 86 ไบต์ที่ละเมิดกฎ:

with(new XMLHttpRequest)send(open(0,/posts\28175\body/,0)),alert(/w.*/.exec(response))

นั่นทำให้ฉันกลัว หลายครั้ง.
fregante

1
@ bfred.it ฉันเพิ่งตัดไบต์โดยใช้ regex ที่น่าสนใจ ฉันหวังว่ามันจะทำให้คุณกลัวอีกครั้ง
ขีดล่าง

หากการพิมพ์ไปยังคอนโซลเป็นวิธีการส่งออกที่ยอมรับได้คุณสามารถย่อให้เล็กลง 7 ตัวอักษรโดยการลบการแจ้งเตือน
Tejas Kale

นอกจากนี้ตามกฎใหม่คุณต้องเพิ่มcodegolf.stackexchange.com/ไปยัง URL
Tejas Kale

1
@TejasKale จากสิ่งที่ฉันได้เห็นคนขมวดคิ้วในการแก้ปัญหาที่ไม่ได้แจ้งเตือนจริง / document.write / console.log คำตอบ
ขีดล่าง

10

Ruby + wget + gunzip , 159 86 82 71

เคล็ดลับการใช้ @FDinoff http://codegolf.stackexchange.com/posts/28173/bodyใช้

puts `wget -qO- codegolf.stackexchange.com/posts/28173/body`[/pu.*\]/]

ผ่านการทดสอบ ขอบคุณ @ace และ @Bob สำหรับการเพิ่มประสิทธิภาพบรรทัดคำสั่ง


2
คุณสามารถรวมธงในขณะที่อยู่ในwget wget -qO- urlนอกจากนี้ในการทุบตีคุณไม่จำเป็นต้องมีเครื่องหมายคำพูดคู่สำหรับ url ดังนั้นสิ่งนี้อาจใช้ได้กับคุณเช่นกัน
ace_HongKongIndependence

http://คุณสามารถปล่อยออกมา
บ๊อบ

6

CJam - 53

"codegolf.stackexchange.com/posts/28184/body"g54/1=);

ฉันทำวิกิชุมชนนี้เนื่องจากฉันตอบคำถามของฉันเองและไม่ต้องการแข่งขัน: p
เครดิตเพื่อ FDinoff สำหรับตัวเลือก URL


Woot, +1 สำหรับรหัสรูปหน้ายิ้ม
Cruncher

1
@ Cruncher );ดูไม่ยิ้มเกินไปสำหรับฉัน ...
MD XF

5

Rebmu, 91 ตัวอักษร

เนื่องจาก Catch-22 ฉันต้องโพสต์เพื่อรับ URL คำตอบนี้ : - / โอเคเข้าใจแล้ว

paTSrd http://codegolf.stackexchange.com/a/28154[th<a name="28154">th<code>cpCto</code>]prC

Rebmu เป็นภาษาถิ่นของ REBOL และคุณสามารถอ่านทั้งหมด 'การแข่งขันมัน Rebol ที่เทียบเท่ากันที่นี่จะเป็น:

parse to-string read http://codegolf.stackexchange.com/a/28154 [
    thru <a name="28154">
    thru <code>
    copy c to </code>
]
print c

PARSE ของ Rebol เป็นคำตอบที่ตรงไปตรงมาสำหรับ RegEx มันเริ่มต้นตำแหน่ง parser ของท่าน(ซึ่งอาจจะเป็นชุดใด ๆ รวมทั้งบล็อกโครงสร้าง ... ข้อมูลไบนารี ... หรือประเภทสตริง) กฎเป็นภาษาสำหรับตำแหน่งการย้ายวิเคราะห์คำ

แท็กและ URL เป็นเพียงสายอักขระภายใต้ประทุนในภาษา แต่พวกมันจะ "ปรุงแต่ง" และเนื่องจาก Rebol นั้นถูกพิมพ์แบบไดนามิกคุณสามารถตรวจสอบประเภทนั้นได้ เช่นอ่านรู้ว่าถ้าคุณให้มันสตริง URL รสแล้วมันควรจะส่งไปยังรูปแบบการจัดการที่จะทำการอ่าน (ในกรณีนี้อันที่ลงทะเบียนสำหรับ HTTP) คุณได้รับ UTF-8 ไบต์กลับมาโดยปริยายดังนั้นเราใช้ to-string เพื่อถอดรหัสมันและรับ codepoints หลายชุดในสตริง Unicode ปกติ

ในกรณีของการแยกวิเคราะห์ภาษาการเผชิญหน้าประเภทแท็กจะถูกจับคู่ราวกับว่ามันเป็นสตริงที่ดูเหมือนแท็ก THRU คือความหมายของคำสั่ง "ข้ามจนกว่ากฎที่ตามมาจะถูกจับคู่แล้ววางตำแหน่งการแข่งขันในตอนท้ายของสิ่งที่คุณเพิ่งจับคู่" (TO คืออะนาล็อกที่จับคู่ แต่ออกจากตำแหน่งการแยกวิเคราะห์ก่อนองค์ประกอบ)

<a name="28154">ดังนั้นเราจึงพร้อมซิปที่ผ่านมา จากนั้นเรา zip ที่ผ่านมาเกิดขึ้นต่อไปของการมีตำแหน่งในการแยกวิเคราะห์ของเราตอนนี้อยู่ขวาหลังจาก<code> >คำสั่งคัดลอกแยกแล้วจะช่วยให้เราคัดลอกข้อมูลถึงกฎอื่นในกรณีนี้กฎที่เป็น[TO </code>]... ดังนั้นเราจะได้เป็นตัวแปรทุกอย่าง C <จนถึงขวาก่อนว่า

เจ๋งใช่มั้ย :-)

ในทางเทคนิคแล้วฉันสามารถโกนหนวดออกได้มากขึ้นเช่นโดยการค้นหาTO "</"และช่วยประหยัดอักขระสามตัว - ไม่จำเป็นต้องจับคู่</code>แท็กปิดท้ายทั้งหมดเมื่อ</ต้องทำ ฉันสามารถสร้างอาร์กิวเมนต์ที่คล้ายกันสำหรับแท็กเริ่มต้นได้ แต่ Rebmu เป็นเรื่องเกี่ยวกับความรู้การเล่นกอล์ฟ ... แม้ว่าคุณอาจจะคิดว่ามันดูแปลกในตอนแรก!

UPDATE : /bodyเคล็ดลับไม่ได้อยู่ในกระเป๋า แต่ฉันก็เหมือนกันที่จะทิ้งมันไว้ตามที่เป็น - เพราะฉันคิดว่ามันเป็นการศึกษาที่ดีกว่า


5

Java ตอนนี้ 634, 852, คือ 1004

อัปเดตรหัสแล้ว ขอบคุณสำหรับคำแนะนำ Golfed: ตอนนี้แทนที่ & gt ด้วย>

//bacchus
package golf;
import java.net.*;
import java.util.*;
public class G{
public static void main(String[] a) throws Exception {
Scanner z;
URL u;
int x=0;
String s;
u=new URL("http://codegolf.stackexchange.com/questions/28154/write-a-program-that-downloads-itself");
z=new Scanner(u.openConnection().getInputStream());
z.useDelimiter("\\s*//bacchus\\s*");
while(z.hasNext())
{
s=z.next();
s=s.replace("&gt;", ">");
if(x>0)System.out.println("//bacchus\n"+s);
x++;
if(x>2)break;
}
System.out.println("//bacchus\n");
}
}
//bacchus

กำลังส่งเพื่อทดสอบฉันจะแก้ไขและลองเล่นกอล์ฟในไม่ช้า จำเป็นต้องเปลี่ยน x> 1 เป็น x> 2 เพราะสตริงการทดสอบอยู่ในรหัสของฉันด้วย หมายเหตุ: รหัสกอล์ฟแทนที่> สัญลักษณ์เป็น & gt

//bacchus
package golf;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class Golf {

    public static void main(String[] args) throws IOException {
        URL u;
        URLConnection c;
        InputStream i;
        InputStreamReader r;
        BufferedReader b;
        String s;
        int x=0;
        try {
            u=new URL("http://codegolf.stackexchange.com/questions/28154/write-a-program-that-downloads-itself");
            c=u.openConnection();
            i=c.getInputStream();
            r=new InputStreamReader(i);
            b=new BufferedReader(r);
            while((s=b.readLine())!=null)
            {
                if(s.contains("//bacchus")) x++;
                if(x>0)System.out.println(s);
                if(x>2) break;
            }
            i.close();
            b.close();
        } catch (MalformedURLException ex) {

        }
    }

}
//bacchus

7
คุณจัดการกับความคิดเห็นที่มีได้//bacchusอย่างไร
ζ--

3
คุณสามารถอินไลน์ของหลายอย่างลองกับทรัพยากรและใช้*การนำเข้าเพื่อบันทึกรหัสจำนวนมาก
Simon Kuang

@SimonKuang - ฉันแค่ปล่อยให้ลำธารเปิดมากกว่าที่จะปิดเนื้อหา นอกจากนี้throws Exceptionแทนที่จะพยายามจัดการอะไร นอกจากนี้ผมคิดว่าการใช้เครื่องสแกนเนอร์มากกว่า BufferedReader จะเป็นที่เรียบง่ายโดยเฉพาะอย่างยิ่งในขณะที่คุณสามารถตั้งค่าตัวคั่นไป//bacchusซึ่งจะทำให้สิ่งที่ค่อนข้างง่าย ...
จูลส์

5

Python, 175 167 ไบต์

สิ่งนี้ใช้สองไลบรารีภายนอก ฉันไม่ได้อ่านว่ามันไม่ได้รับอนุญาต

import bs4,requests
print(bs4.BeautifulSoup(requests.get('http://codegolf.stackexchange.com/q/28154').text).select('#answer-28171')[0].select('pre > code')[0].string)

รหัสที่ยาวกว่า แต่ดูดีกว่า:

import bs4, requests
request = requests.get('http://codegolf.stackexchange.com/q/28154')
soup = bs4.BeautifulSoup(request.text)
answer = soup.select('#answer-28171')[0]
code = answer.select('pre > code')[1].string
print(code)

1
questionsใน url สามารถถูกแทนที่ด้วยq:http://codegolf.stackexchange.com/q/28154
จัสติน

1
bs4, requestsสามารถลบพื้นที่ใน(บรรทัดที่ 1) เพื่อลด 1 ไบต์
ace_HongKongIndependence

5

JavaScript, 228

r=new XMLHttpRequest()
c='code'
r.open('GET','//'+c+'golf.stackexchange.com/posts/28157/body')
r.onreadystatechange=function(){this.readyState==4&&alert((a=r.responseText).substr(i=a.indexOf(c)+5,a.indexOf('/'+c)-i-1))}
r.send()

ทำงานบนหน้านี้


คุณจะเรียกใช้มันได้อย่างไร
aditsu

@aditsu มันควรจะถูกเรียกใช้บนคอนโซล JavaScript ของเบราว์เซอร์ แต่ฉันยังคงทดสอบ (และแก้ไข) โปรดรอ
ace_HongKongIndependence

@aditsu มันควรจะทำงานแล้ว เปิดคอนโซลเบราว์เซอร์ของคุณ (กด F12) และวางรหัสนี้ที่นั่น
ace_HongKongIndependence

คุณคุณต้องการif(this.readyState == this.DONE)ฟังก์ชั่นภายใน
Fabricio

1
@ เห็นฉัน :) ฉันไม่เห็นคำตอบ js อื่นจนกระทั่งตอนนี้ จากนั้นนำ upvote นี้มาจากฉัน
C5H8NNaO4

4

Haskell, 563 613 ไบต์

import Control.Monad
import Data.List
import Network.HTTP
m%f=join(fmap f m)
q s=(simpleHTTP(getRequest"http://codegolf.stackexchange.com/questions/28154/write-a-program-that-downloads-itself?answertab=oldest#tab-top"))%getResponseBody%(putStrLn.head.filter((==)(s++show s)).map(take 613).tails)
main=q"import Control.Monad\nimport Data.List\nimport Network.HTTP\nm%f=join(fmap f m)\nq s=(simpleHTTP(getRequest\"http://codegolf.stackexchange.com/questions/28154/write-a-program-that-downloads-itself?answertab=oldest#tab-top\"))%getResponseBody%(putStrLn.head.filter((==)(s++show s)).map(take 613).tails)\nmain=q"

ผ่านการทดสอบ มีการสนับสนุนหน้าผ่านคุณสมบัติ "โพสต์ที่เก่าแก่ที่สุด" ใช้โครงสร้างเส้น quine เพื่อค้นหาสิ่งที่จะพิมพ์ import Control.Monadเป็นเพียงเพราะ>>=สร้าง&gt;ในรูปแบบ HTML


4

Javascript + jQuery, 87 , 67

ฉันไม่แน่ใจว่าฉันอนุญาตให้ใช้ jQuery ได้ แต่:

$('body').load('//codegolf.stackexchange.com/posts/28268/body pre')

Javascript + jQuery หากถูก excecuted ในหน้านี้: 27 , 25

เพื่อความสนุกถ้ามันจะถูก excecuted ที่นี่:

$('[id$=268] pre').html()

$('[id$=28268] pre').html()


1
เอาต์พุตนี้มากกว่าโค้ดต้นฉบับ
ขีดล่าง

1
67:$('body').load('//codegolf.stackexchange.com/posts/28268/body pre')
ขีดล่าง

คุณถูกต้องฉันคิดผิดตอบทั้งหมดแทนรหัส
Martijn

4

w3m 45 ตัวอักษร

w3m codegolf.stackexchange.com/a/28336|grep ☻

1
☺ มันยังใช้งานได้หรือไม่ แก้ไข:ดูเหมือนว่าจะ
ace_HongKongIndependence

@ace ฉันได้รับความคิดเห็นของคุณเมื่อฉันใช้มัน
FDinoff

แก้ไขแล้ว :) 😁
gnibbler

3

Dart, 164

ฉันคิดว่าฉันจะลองแบบนี้ใน Dart สนุกดีที่จะใช้ imo

สิ่งนี้สามารถเรียกใช้ในคอนโซลใน DartEditor แต่ไม่ต้องการแพคเกจ http ที่เพิ่มเข้ามาใน pubspec.yaml

import"package:http/http.dart"as h;h.read("http://codegolf.stackexchange.com/posts/28215/body").then((s){print(new RegExp(r"im.+(?:})").firstMatch(s).group(0));});}

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

import "package:http/http.dart" as h;

void main()
{
  h.read("http://codegolf.stackexchange.com/posts/28215/body").then((s)
  {
    print(new RegExp(r"im.+(?:})").firstMatch(s).group(0));
  });
}

2

อักขระ R 114

library(XML);cat(xpathSApply(xmlParse("http://codegolf.stackexchange.com/posts/28216/body"),'//code',xmlValue)[1])

มายากลไม่จริงที่นี่: <code></code>มันต้องใช้ค่าของฟิลด์ระหว่างแท็กที่ ใช้ไลบรารี่XML(อย่างที่เห็นในโค้ดอย่างชัดเจน) แสดงผลลัพธ์เป็น stdout


1

Java, 300 294

import java.net.*;import java.util.*;public class G{public static void main (String [] a) throws Exception{Scanner s=new Scanner(new URL("http://codegolf.stackexchange.com/posts/28189/body").openConnection().getInputStream()).useDelimiter("./?[c]ode\\W");s.next();System.out.print(s.next());}}

รุ่นปรับปรุงของคำตอบของ bacchusbeale ซึ่ง:

  • ไม่ปิดทรัพยากรโดยไม่จำเป็น
  • ไม่ได้ประกาศตัวแปรที่ไม่จำเป็น
  • ใช้ a Scannerเพื่อหลีกเลี่ยงการวนซ้ำอินพุต
  • ใช้ regexp ที่ไม่ตรงกับตัวเองเพื่อหลีกเลี่ยงการข้ามข้ามเหตุการณ์กลางของเครื่องหมายเริ่ม / จบ

Updated:

  • ใช้ URL โดยตรงไปยังโพสต์ดังนั้นเราไม่จำเป็นต้องมีความคิดเห็นที่ไม่ซ้ำกันเพื่อระบุรหัสเริ่มต้น / สิ้นสุด ตอนนี้ใช้<code>[...]</code>เป็นตัวคั่นเพื่อค้นหา (จริง ๆ แล้วใช้นิพจน์ปกติ "./?42currencyode\W" เพื่อหลีกเลี่ยงการถอดรหัส&lt;และ&gt;- "\ W" เป็นสิ่งจำเป็นมากกว่าความสั้น "" เพื่อหลีกเลี่ยงการจับคู่ส่วนหนึ่งของ URL กับโพสต์โชคไม่ดีที่มีค่าใช้จ่าย 2 ตัวอักษรและเครื่องหมายวงเล็บเหลี่ยมรอบ c ป้องกัน regex จับคู่ตัวเอง)

1
คุณมีช่องว่างที่ไม่จำเป็นมากมาย ชั้นเรียนของคุณไม่จำเป็นต้องเปิดเผยต่อสาธารณะ
aditsu

1
openConnection (). getInputStream () สามารถย่อให้เป็น openStream () ได้ด้วย
aditsu


1

ทับทิม, 237 215 146 132

require'mechanize'
a=Mechanize.new
puts a.get('http://codegolf.stackexchange.com/a/28159').search('.lang-rb code:nth-child(1)').text

ค่อนข้างแน่ใจว่าคุณสามารถลบช่องว่างไม่กี่ที่นี่และมีการบันทึกไม่กี่ไบต์
MisterBla

@ Richard ที่ใส่ใจฉันจะไม่ชนะอยู่ดี
Mhmd

1
ทำเพื่อ lols ไม่ใช่เพื่อชัยชนะ
MisterBla

@RichardA เสร็จแล้วและฉันก็ลบตัวอักษรสองสามตัวออกจาก regexp
Mhmd

1

กำลังดำเนินการ 90

print(loadStrings("http://codegolf.stackexchange.com/posts/28657/body")[2].substring(11));

แก้ไข:ในที่สุดก็รับมัน!


1

bash + awk, 71 ไบต์

curl -sL codegolf.stackexchange.com/q/28154 |awk -F\> '/\#/ {print $3}'

2
ดูเหมือนจะใช้งานไม่ได้ - มันส่งผลอะไรมากมายพร้อมกับคำตอบนี้
Riking

@Riking จริงก็น่าจะเป็นตำแหน่งขึ้นอยู่กับ (ทำลายกฎที่ผ่านมา)
aditsu

http://คุณสามารถปล่อยออกมา
บ๊อบ

@ user155406: ทราบว่าแต่ละคำตอบมี URL - หนึ่งนี้เป็น codegolf.stackexchange.com/a/28179/14710
ฟิล H

0

Javascript, 138

a=window.open("http://codegolf.stackexchange.com/posts/28160/body");setTimeout('alert(a.document.body.innerHTML.match(/a=.*9\\)/)[0])',99)

วิธีนี้ใช้งานได้สมมติว่าหน้าเว็บโหลดได้ต่ำกว่า 99 ms นอกจากนี้ยังจะต้องมีการเรียกใช้ผ่านคอนโซลที่เปิดในหน้า codegolf.SE เนื่องจากนโยบายกำเนิดเดียวกัน


เพียงแค่ทราบ: คุณไม่ต้องการกระสุนใน URL และคำถามสามารถถูกแทนที่ด้วย q
Schism

1
โปรดทราบว่าคุณสามารถทำได้http://codegolf.stackexchange.com/a/28160แทนhttp://codegolf.stackexchange.com/a/28160/12551
Justin

Chrome ไม่ชอบสิ่งนี้: "Uncaught TypeError: ไม่สามารถอ่าน" เอกสาร "ของคุณสมบัติที่ไม่ได้กำหนด"
Spedwards

@Spedwards คุณควรปิดการใช้งานตัวป้องกันป๊อปอัพ
nderscore

0

Perl 5.10, 155 127 122 117 ไบต์

use XML::LibXML;say XML::LibXML->new->parse_file('http://codegolf.stackexchange.com/posts/28330/body')->find('//pre')

XML::LibXMLการใช้



0

Python, 164

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

import urllib2
print urllib2.urlopen("http://codegolf.stackexchange.com/posts/28617/body").read().split(chr(60)+"code"+chr(62))[1].split(chr(60)+"/code"+chr(62))[0]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.