จำนวนรางวัลใน Stackoverflow มีเท่าไร?


33

งาน:

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

กฎ:

  • เมื่อวิ่ง
    • โปรแกรมของคุณจะนำทางผ่านแท็บวิดีโอเด่นบน Stack Overflow
    • มันจะถูมูลค่าของแต่ละความโปรดปราน
    • จากนั้นจะเพิ่มขึ้นและแสดงผลรวม
  • มีการดาวน์โหลดข้อมูลจากที่ใดก็ได้บน SO (และเฉพาะ SO) แต่ฉันขอแนะนำให้ใช้https://stackoverflow.com/questions?pagesize=50&sort=featuredเนื่องจากมันมีเพียงประมาณ 10 หน้า
  • นี่คือดังนั้นรหัสที่สั้นที่สุดชนะ


2
stackoverflow.com/?tab=featured คำถามเด่นทั้งหมดใน 1 หน้า
Nzall

7
@NateKerkhofs นั่นไม่ใช่ทั้งหมดของพวกเขา เลื่อนไปที่ด้านล่าง เช่นเมื่อฉันเพิ่งโหลดมันแสดง 96 คำถามจาก 472 คำถาม
bazzargh


@justhalf ได้รับการกล่าวถึง ...
TheDoctor

คำตอบ:


23

JavaScript - 176 133 130 108 106

function f()(t+=$("[title~=an]").text(),u=$("[rel*=x]")[0])?$("html").load(u.href,f):alert(eval(t));f(t=0)

แก้ไข 1: ตัดตัวเลือกบางส่วนลงและใช้?:คำแนะนำจากตัวรวบรวมการปิดของ Google (ผ่าน @Sirko - ขอบคุณ)

แก้ไข 2: Initialise sภายในdและ Initialise tเป็น0แทน""

แก้ไข 3: ตระหนักแล้วว่าฉันไม่จำเป็นต้องกำหนดเป้าหมายไปยังคอนเทนเนอร์เฉพาะและสามารถกวาดเอกสารทั้งหมดซึ่งจะกำจัดการ.findโทรจำนวนมากและตัวเลือกที่ไม่จำเป็น (รวมถึงตัวแปรที่ถือไว้)

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

หมายเหตุ : ฉันไม่แน่ใจว่าเป็นการโกงหรือไม่ แต่จะต้องเรียกใช้จากหน้าต่างคอนโซลของเบราว์เซอร์ที่ชี้ไปที่http://stackoverflow.com/questions?page=1&sort=featuredแล้ว ขึ้นอยู่กับข้อเท็จจริงที่ว่าjQueryและลิงค์เพจจิ้งที่เหมาะสมมีอยู่ในหน้านั้นเอง นอกจากนี้ยังใช้งานได้เฉพาะในFirefox เท่านั้นไม่ใช่ใน IE หรือ Chrome

เอาท์พุท (ตอนที่โพสต์):

38150 (in an alert dialog)

ระเบิด / แสดงความคิดเห็น :

function f()
    //concat all the bounty labels to t (they take the format "+50")
    //happens to be elements with title attribute containing word 'an'
    (t+=$("[title~=an]").text(),
    //find the "next" (has rel=next attribute) button
    u = $("[rel*=x]")[0])       
        ?
        //if there is a next button, load it, and then recurse f again
        $("html").load(u.href,f)
        :
        //else eval the 0+a+b+...+z tally and alert the result
        alert(eval(t))
//kick off the initial scrape (and simultaneously init the total tally)
f(t=0)

s=" #mainbar";d=$(s);t="";function a(){d.find(".bounty-indicator").each(function(){t+=this.innerHTML});(u=d.find("[rel=next]")[0])?d.load(u.href+s,a):alert(eval(t))}a();169 - คอมไพเลอร์ปิดของ Google ที่ใช้
Sirko

8
ตัวเลือกของภาษาและบริบทที่จะผ่านตัวละครที่ต้องการจำนวนมาก! (เช่น " stackoverflow.com/" ) ฉันชอบ!
AlexC

ฉันคิดว่าคุณควรพูดถึงว่ามันทำโดยใช้ปลั๊กอิน jQuery ซึ่งฉันคิดว่ามันควรจะเป็น .. :)
Mr_Green

Chrome พ่นข้อผิดพลาดทางไวยากรณ์ การเปิดฟังก์ชั่นของร่างกายด้วย(paren มันใช้งานได้จริงเหรอ?
thejh

@Mr_Green - ฉันได้ตั้งข้อสังเกตแล้ว แต่ฉันกล้าที่จะดึงดูดความสนใจมากขึ้น ...
Alconja

21

Python - 232, 231, 195, 183, 176, 174

แยก HTML จากhttps://stackoverflow.com/questions?sort=featuredโดยใช้นิพจน์ทั่วไป

ผูกพันบนของrangeในforวงจะต้องเป็นnumber of pages + 1หรืออื่น ๆ รหัสจะเพิ่มHTTPErrorเพราะ 404 จำนวนผลลัพธ์เริ่มต้นต่อหน้าคือ 15 ซึ่งเป็นสิ่งที่รหัสใช้ (ไม่ต้อง?pagesize=50บันทึกอักขระและมีประสิทธิภาพ)

ขอบคุณ@Gabeสำหรับเคล็ดลับในการลดจำนวนถ่านให้ดียิ่งขึ้น

Golfed :

import requests,re;print sum(sum(map(int,re.findall(r"<.*>\+(\d+)<.*>",requests.get("https://stackoverflow.com/questions?sort=featured&page=%u"%i).text)))for i in range(1,33))

เอาท์พุท (ตอนที่โพสต์):

37700

เลิกเล่น :

ต่อไปนี้เป็นเวอร์ชันที่ไม่ได้ตีกอล์ฟที่ควรอ่านและเข้าใจง่ายขึ้น

import requests, re

print sum(
          sum(
              map( int,
                   re.findall( r"<.*>\+(\d+)<.*>",
                               requests.get( "https://stackoverflow.com/questions?sort=featured&page=%u" % i).text
                   )
              )
          ) for i in range( 1, 33 )
      )

1
คุณสามารถกำจัดforลูปที่ชัดเจนและทำให้มันลดลงเหลือ 176:import urllib,re;print sum(sum(map(int,re.findall(r"<.*>\+(\d+)<.*>",urllib.urlopen("http://stackoverflow.com/questions?sort=featured&page=%u"%i).read())))for i in range(1,33))
Gabe

การมีขอบเขตบนฮาร์ดโค้ดทำให้ยากในการทดสอบเล็กน้อย
Einacio


6
@ ริชาร์ดใช่ แต่นี่คือรหัสกอล์ฟดังนั้นสั้นกระชับว่ามันเป็น "ความคิดที่ดี" ผมหมายถึงในชีวิตจริงก็ยังไม่ได้เป็นความคิดที่ดีที่จะเขียนน่ากลัวหนึ่งสมุทรที่ไม่มีช่องว่าง ...
ทิมสามี

3
@Richard การแยกวิเคราะห์ html และการแยกจาก html นั้นเป็นงานที่แตกต่างกันไป เนื่องจากเว็บไซต์ไม่ใช่ API ที่มีเสถียรภาพจึงไม่มีสิ่งใดรับประกันว่าจะสามารถใช้งานได้กับการแยกประเภทนี้ แม้ว่ารหัสของโทนี่จะค่อนข้าง overgolfed ดังนั้นมันจะล้มเหลวหากมีแท็กใด ๆที่มี+ตามด้วยหมายเลข ตัวอย่างเช่นชื่อคำถามสามารถจัดรูปแบบนั้นได้
CodesInChaos

18

Rebol - 164 133 130 (139 กับ 404 เช็ค)

แยกวิเคราะห์ html โดยใช้parseภาษาย่อยของ Rebol ตรวจสอบ 98 หน้าแรก ฉันรู้ว่าฉันมีข้อ จำกัด เช่นเดียวกับโซลูชันงูหลาม - มีการซ้ำหลายครั้งที่มีข้อผิดพลาด 404 ครั้งและหยุดการทำงาน ขอบคุณ @rgchris สำหรับการปรับปรุงมากมาย! อัปเดตเพื่อตรวจสอบสูงสุด 98 หน้า

s: 0 repeat n 99[parse read join http://stackoverflow.com/questions?sort=featured&page= n[15[thru{>+}copy x to{<}(s: s + do x)]]]s

ด้วยข้อผิดพลาดในการตรวจสอบสำหรับ 404s (139):

s: 0 repeat n 99[attempt[parse read join http://stackoverflow.com/questions?sort=featured&page= n[15[thru{>+}copy x to{<}(s: s + do x)]]]]s

ทดสอบ

>> s: 0 repeat n 20[parse read join http://stackoverflow.com/questions?sort=featured&page= n[15[thru{>+}copy x to{<}(s: s + do x)]]]s
== 23600

>> s: 0 repeat n 99[attempt[parse read join http://stackoverflow.com/questions?sort=featured&page= n[15[thru{>+}copy x to{<}(s: s + do x)]]]]s
Script: none Version: none Date: none
== 36050

คำอธิบาย

Rebol ไม่สนใจช่องว่างดังนั้นคุณสามารถใส่มันทั้งหมดในบรรทัดเดียวถ้าคุณเลือก PARSE รับสองอินพุตและอาร์กิวเมนต์แรก( read join ...)อธิบายได้ด้วยตนเอง แต่นี่คือความคิดเห็นบางส่วนเกี่ยวกับคำแนะนำการแยกวิเคราะห์ภาษาในการเยื้องแบบดั้งเดิมมากขึ้น:

s: 0
repeat n 99 [
    parse read join http://stackoverflow.com/questions?sort=featured&page= n [
        ;-- match the enclosed pattern 15 times (the rule will fail politely when there are less entries)
        15 [
            ;-- seek the match position up THRU (and including) the string >+
            thru {>+}
            ;-- copy contents at the current position up TO (but not including) <
            copy x to {<}
            ;-- (Basically, run some non-dialected Rebol if this match point is reached) the do is a bit dangerous as it runs the string as code
            (s: s + do x)
        ]
    ]
]
;-- evaluator returns last value, we want the value in S
;-- (not the result of PARSE, that's a boolean on whether the end of input was reached)
s

ดี ... ฉันเพิ่มเวอร์ชันที่มีการจัดรูปแบบดั้งเดิมพร้อมความคิดเห็นหวังว่าคุณจะไม่สนใจ! มันยอดเยี่ยมเสมอที่เห็นว่า Rebol ตอกย้ำปัญหามากมายด้วยความรู้(ทั้งหมดในครึ่งเมกะไบต์ข้ามแพลตฟอร์ม Apache ได้รับใบอนุญาตปฏิบัติการแต่นั่นทำให้สิ่งต่าง ๆ เช่น REFORM โผล่ออกมาเหมือนนิ้วหัวแม่มือเจ็บทุกบิตอื่น ๆ ทำให้รู้สึก แต่ฉันยังคงมอง ที่คำว่าและไป "ผลิตและแบบฟอร์มการกลายเป็นรูปแบบ" เป็นที่น่าเกลียดเพียงแค่การครอบงำมันเป็นHawthorneมากโอ้และคุณสามารถเปลี่ยนบางอย่างเพื่อใด ๆ และโกนถ่าน! :-)
ดร. Rebmu

อ๊ะควรจะเป็น 133
rgchris

หมายเหตุ: คุณต้องวนซ้ำไปยังnค่าที่สูงกว่า... ขณะนี้มีรางวัล 28 หน้า (สำหรับขนาดหน้า 15) จะไม่ส่งผลกระทบต่อจำนวนถ่านของคุณ
Alconja

ขอบคุณ Alconja ง่ายต่อการไปถึง 98 หน้าก่อนที่จะเพิ่มตัวอักษรใด ๆ เพิ่มเติมในการแก้ปัญหา ฉันจะต้องทำการทดสอบอีกครั้งจากที่บ้านคืนนี้
johnk

11

ทับทิม, 260

require'open-uri'
require'zlib'
i=b=0
d=''
until /"has_more":f/=~d
i+=1
d=Zlib::GzipReader.new(open("http://api.stackexchange.com/2.2/questions/featured?site=stackoverflow&page=#{i}&pagesize=100")).read
b+=d.scan(/"bounty_amount":(\d+)/).map{|x|x[0].to_i}.reduce :+
end
p b

ใช้ Stack Exchange API

เอาท์พุท (ณ เวลาที่โพสต์ต้นฉบับ):

37200

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


ดีฉันเพิ่งได้รับถึง 275 ใน Python
Claudiu

กินโควต้ามากขึ้น ??? คุณควรจะใช้ SO และ SO เท่านั้น
John Dvorak

@JanDvorak ??? ฉันหมายถึงโควต้า API
Doorknob

1
requires สามารถถูกแทนที่ด้วย-rธงบรรทัดคำสั่ง
Justin

8

Rebmu - 108 107

rtN99[parseRDrj[http://stackoverflow.com/questions?sort=featured&page=N][15[thru{>+}copyXto{<}(a+JdoX)]]]j

ทดสอบ (เวลา 19:05 AEST)

>> rebmu [rtN99[parseRDrj[http://stackoverflow.com/questions?sort=featured&page=N][15[thru{>+}copyXto{<}(a+JdoX)]]]j]
Script: none Version: none Date: none
== 79200

Rebmuดูค่อนข้างลึกลับ แต่ก็สามารถอ่านได้เมื่อคุณได้รับมัน เริ่มกันเลยโดยการถอนมันออกแล้ววางมันอย่างเหมาะสม

rt n 99 [
    parse rd rj [
        http://stackoverflow.com/questions?sort=featured&page= n
    ][
        15 [
            thru {>+}
            copy x to {<}
            (a+ j do x)
        ]
    ]
]
j

Rebmu เป็นภาษาของ Rebol เพื่อให้คุณเห็นความเหมือนในโซลูชัน Rebmu ไม่สามารถลดขนาดของทุกคำสั่งได้ แต่มันเป็นภาษาที่พัฒนา ขอขอบคุณ @rgchris อีกครั้งสำหรับการปรับปรุงครั้งแรกของฉัน


ti(เป็นจำนวนเต็ม!) จะปลอดภัยกว่าdoใน Rebmu โดยไม่มีการเปลี่ยนแปลงความยาวโค้ด
rgchris

6

ทับทิม - 197

เวอร์ชั่นสั้น:

require 'nokogiri'
require 'open-uri'
s=0
(1..33).each{|p|Nokogiri::HTML(open("http://stackoverflow.com/questions?page=#{p}&sort=featured")).css('.bounty-indicator').each{|b|s+=b.content.to_i}}
p s

รุ่นที่เป็นมิตรกับมนุษย์:

require 'nokogiri'
require 'open-uri'
s=0
(1..33).each do |p|
    Nokogiri::HTML(open("http://stackoverflow.com/questions?page=#{p}&sort=featured")).css('.bounty-indicator').each do |b|
        s += b.content.to_i
    end
end
puts s

และคำตอบ - 39700

ทับทิมกับพารามิเตอร์สคริปต์ - 139

require 'nokogiri'
require 'open-uri'
s=0
(1..33).each{|p|Nokogiri::HTML(open(ARGV[0]+p.to_s)).css(ARGV[1]).each{|b|s+=b.content.to_i}}
p s

หากต้องการรันสิ่งนี้จาก bash ให้พิมพ์

ruby code_golf_stack_overflow2.rb http://stackoverflow.com/questions?sort=featured\&page= .bounty-indicator

requires สามารถถูกแทนที่ด้วย-rธงบรรทัดคำสั่ง
Justin

6

PHP - 121 ไบต์

<?for(;preg_filter('/>\+(\d+)/e','$t+=\1',@file('http://stackoverflow.com/questions?sort=featured&page='.++$n)););echo$t;

การใช้ตัวปรับเปลี่ยน 'eval' ของ regex เพื่อหลีกเลี่ยงการใช้array_sumหรือคล้ายกัน ดูเหมือนจะเป็นทางออกที่สั้นที่สุดในรายการที่ถูกต้อง


4
โมดิeฟายเออร์เลิกใช้แล้วใน PHP 5.5 แต่ยังคงมีประโยชน์สำหรับการเล่นกอล์ฟอย่างไรก็ตาม
FabrícioMatté

6

PHP, 134 , 131 , 127

while($q=array_sum(preg_filter('#.*>\+#',0,file("http://stackoverflow.com/questions?sort=featured&page=".++$n))))$s+=$q;echo$s;

จะวนซ้ำทุกหน้าpagesizeไม่ได้ถูกตั้งค่าให้บันทึกGETเป็นจำนวนมาก

สกปรกมาก แต่ ... ใช้ประโยชน์จากPHP"ข้อบกพร่อง" ของ!

  • ไม่มีที่ว่างหลังจาก echo
  • while หยุดที่ได้รับมอบหมาย
  • เอาต์พุตหลังจากRegExแทนที่เป็นสตริงที่เริ่มต้นด้วยจำนวนเงินที่โปรดปราน
  • array_sum() เพิ่มขึ้นสตริง
  • $nและ$sจะเริ่มต้นได้ แต่เริ่มต้นจากไม่มีอะไรเป็น equiv เริ่มจากศูนย์
  • ฯลฯ ...

5

Bash 206

การเพิ่มประสิทธิภาพเป็นไปได้ขี้เกียจเกินไป

s=0;for i in `seq 1 11`;do for j in `wget -q -O - "http://stackoverflow.com/questions?pagesize=50&sort=featured&page=$i" | grep -o -E "bounty worth [0-9]*" | grep -o -E "[0-9]*"`;do s=$(($s+$j));done;done;echo $s

ผล:

39450

4
ฉันอาจจะผิด แต่ดูเหมือนว่ามันจะสั้นมากกับการเพิ่มประสิทธิภาพคุณภาพบางอย่าง
rickcnagy

seq 1 11สามารถลดลงseq 11ได้
fedorqui

คุณควรกำจัดช่องว่างรอบ ๆ ท่อเพื่อบันทึกสี่ตัวอักษรและแน่นอนว่า greps ทั้งสองนั้นสามารถรวมกันเป็นหนึ่งเดียวได้ (คุณหมายถึง "[0-9] +"?)
Destiny

นอกจากนี้ "grep -o -E" => "egrep -o"
Desty

และคุณสามารถเปลี่ยน: "egrep -o '[0-9] +'" => "cut -d '' -f3" :)
Desty

5

Javascript - 129 119 110 107 ตัวละคร

แก้ไข: คำตอบที่ไม่ถูกต้อง! สิ่งนี้จะจัดการเฉพาะ "คำถามยอดนิยม" ซึ่งมีเพียงส่วนน้อยเท่านั้น คำตอบของ Alconja นั้นถูกต้องมากกว่า

s="#mainbar";t="";eval("$(s).find('.bounty-indicator').each(function(){t+=this.innerHTML});alert(eval(t))")

ดำเนินการในhttps://stackoverflow.com/?tab=featuredในหน้าต่างคอนโซล ขึ้นอยู่กับการแก้ปัญหาโดย Alconja

นำมาเพิ่มอีกเล็กน้อยโดยการลบช่องว่างที่ไม่จำเป็นออกไป

ใช้ eval เพื่อลบการเรียกใช้ฟังก์ชันการล้างอีก 9 ตัวอักษร

ลบช่องว่างที่ไม่ต้องการออกไปแล้ว


3

Java, 540 chars

คำเตือน: จำนวนของรางวัลที่ใช้งานอยู่คือ ~ 470 รหัสนี้จะเข้าถึงหน้าหนึ่งใน stackoverflow ที่หลายครั้ง มันอาจทำให้คุณมีปัญหากับพวกเขาสำหรับการร้องขอข้อมูลจำนวนมาก

import java.io.*;import java.net.*;public class B{public static void main(String[]A){String u="http://stackoverflow.com/questions",d;Long i,s=i=0L,n=i.parseLong(o(u).replaceAll("^.*b.>(\\d+).*$","$1"));while(i++<n){d=o(u+"?pagesize=1&sort=featured&page="+n).replaceAll("^.*ion.>.(\\d+).*$","$1");s+=d.matches(".*\\D.*")?0:n.parseLong(d);}System.out.print(s);}static String o(String s){String d="";try{BufferedReader r=new BufferedReader(new InputStreamReader(new URL(s).openStream()));while((s=r.readLine())!=null)d+=s;}finally{return d;}}}

เอาท์พุทของฉันคือ23400แต่เมื่อฉันวิ่งรหัสของ @ TonyH ฉันได้รับ37550ของผมได้ ข่าวร้าย.

พริตตี้รหัส:

import java.io.*;
import java.net.*;

public class StackOverflowBounty {

    public static void main(String[] args) {
        String u = "http://stackoverflow.com/questions", d;
        Long i, s = i = 0L, n = i.parseLong(o(u).replaceAll("^.*b.>(\\d+).*$", "$1"));
        while (i++ < n) {
            d = o(u + "?pagesize=1&sort=featured&page=" + n).replaceAll("^.*ion.>.(\\d+).*$", "$1");
            s += d.matches(".*\\D.*") ? 0 : n.parseLong(d);
        }
        System.out.print(s);
    }

    static String o(String s) {
        String d = "";
        try {
            BufferedReader r = new BufferedReader(new InputStreamReader(new URL(s).openStream()));
            while ((s = r.readLine()) != null) {
                d += s;
            }
        } finally {
            return d;
        }
    }
}

วิธีการทำงานนี้ง่าย มันอ่านจาก url http://stackoverflow.com/questions"เพื่อกำหนดจำนวนคำถามที่มีค่าหัว (หมายเหตุ: หากจำนวนเพิ่มขึ้นโปรแกรมจะล้มเหลว แต่ถ้ามันลดลงจะทำงานได้ดี) มันค้นหาหมายเลขนี้โดยใช้ regex:b.>(\\d+)นี้: สิ่งนี้ได้ผลในการทดสอบทั้งหมดจนถึงปัจจุบัน แต่ถ้ามีคนถามคำถามที่ตรงกับ regex นั่นอาจไม่ได้ผล

จากนั้นเราจะเปิดที่ url +http://stackoverflow.com/questions?pagesize=1&sort=featured&page= current question #กล่าวอีกนัยหนึ่งเราเปิดหน้าใหม่สำหรับคำถามเด่นแต่ละข้อและบังคับจำนวนคำถามให้เป็นเท่านั้น1ดังนั้นเราจะได้ทั้งหมด ส่วนชื่อเสียงมักจะตรงกันion.>.(\\d+)ดังนั้นฉันจึงใช้มันเพื่อค้นหา ฉันแบ่งการดำเนินการออกเป็นสองส่วนเพื่อให้ฉันสามารถตรวจสอบได้อย่างถูกต้องว่าจำนวนคำถามลดลงหรือไม่

จากนั้นเราจะสรุปชื่อเสียงทั้งหมดและพิมพ์ออกมา

ใช้เวลาประมาณ 3 นาที 20 วินาทีในการทำงานบนเครื่องของฉัน


ไม่มีใครรู้ว่าทำไมมันไม่พิมพ์หมายเลขที่ถูกต้อง?


pagesize = 100 ให้จำนวนมาก ฉันคิดว่ามีบางสิ่งแปลก ๆ เกิดขึ้นเพราะคุณกำลังส่งหน้าเพจ = 1 ในคำตอบของฉันหากฉันไม่ได้ระบุ 'ขนาดหน้า' ผลลัพธ์จะใกล้เคียงกับหมายเลขของคุณ
jzm

@malik ใช่ฉันรู้ว่าฉัน "ผิด" ความคิดเห็นของคุณดังนั้นฉันจึงลบของฉัน :-) Pagesize = 100 ทำหน้าที่เหมือนกับ pagesize = 50 คุณหมายถึงว่าคุณใช้รหัสของฉันกับ pagesize = 100 หรือไม่?
Justin

2

C # - 407

class B{void Main(string[] a){var o=0;for(int i=1;i<11;i++){var r=((System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(new Uri(string.Format(a[0]+"&page={0}",i)))).GetResponse();if(r.ContentLength>0){using(var s=new StreamReader(r.GetResponseStream()))foreach(Match m in Regex.Matches(s.ReadToEnd(),"bounty worth (.+?) "))o+=int.Parse(m.Value.Substring(m.Value.IndexOf('h')+2));}}Console.Write(o);}}

ใช้ Stackoverflow.com เหมือนกับด้านล่างยกเว้นไม่มีการคลายบีบอัด Gzip และ regex อื่น

ทดสอบ

> prog.exe http://stackoverflow.com/questions?pagesize=50&sort=featured
38150

รับค่าแตกต่างจากด้านล่างอย่างแปลก


C # - 496

ใช้ api.stackexchange ซึ่งเป็น gzipped และ json

using System.IO.Compression;class B{void Main(string[] a){var o=0;for(int i=1;i<11;i++){var r=((System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(new Uri(string.Format(a[0]+"&page={0}",i)))).GetResponse();if(r.ContentLength>0)using(var s=new StreamReader(new GZipStream(r.GetResponseStream(),CompressionMode.Decompress)))foreach(Match m in Regex.Matches(s.ReadToEnd(),@"bounty_amount"":(.+?),"))o+=int.Parse(m.Value.Substring(m.Value.IndexOf(':')+1).Replace(",",""));}Console.Write(o);}}

Unminified:

using System.IO.Compression;

class B
{
    void Main(string[] a)
    {
        var o = 0;
        for (int i=1; i<11; i++) {
            var w = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(new Uri(string.Format(a[0]+"&page={0}",i)));
            if(w.GetResponse().ContentLength > 0)
                using(var s = new StreamReader(new GZipStream(w.GetResponse().GetResponseStream(),CompressionMode.Decompress)))
                    foreach(Match m in Regex.Matches(s.ReadToEnd(), @"bounty_amount"":(.+?),"))
                        o += int.Parse(m.Value.Substring(m.Value.IndexOf(':')+1).Replace(",", ""));
        }
        Console.Write(o);
    }
}

ทดสอบ

ขนาดหน้าเริ่มต้น:

> prog.exe http://api.stackexchange.com/2.2/questions/featured?site=stackoverflow
25300

pagesize = 100:

> prog.exe "http://api.stackexchange.com/2.2/questions/featured?site=stackoverflow&pagesize=100"
37400

2

jQuery 191

i=0;function f(p){$.get('//api.stackexchange.com/2.2/questions/featured?site=stackoverflow&page='+p,function(d){for(x in d.items)i+=d.items[x].bounty_amount;d.has_more?f(p+1):alert(i)})};f(1)

มันทำงานได้จากทุกที่ใน stackexchange (และเว็บไซต์อื่น ๆ ) ไม่จำเป็นต้องอยู่ในหน้าใดหน้าหนึ่งใน @ Alconja / @ NateKerkhofs


jQuery เป็นห้องสมุดไม่ใช่ภาษา ไม่แน่ใจว่ามันถูกต้องหรือไม่ ...
rickcnagy

@ br1ckb0t ถือว่าเป็น javascript ถ้าคุณชอบ jQuery มีอยู่แล้วในไซต์ stackexchange ต่อไปฉันเพิ่งถูกชัดเจนเกี่ยวกับ$
Einacio

ใช่นั่นเหมาะสมแล้ว! รหัสที่ดี
rickcnagy

2

PHP - 139

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

<?php
$a=file_get_contents('http://stackoverflow.com/?tab=featured');preg_match_all('/n">\+([0-9]+)<\/div>/',$a,$r);echo array_sum($r[1]);

Ungolfed - 147

เรียบง่ายfile_get_contents/ preg_match/array_sum

<?php
$a = file_get_contents('http://stackoverflow.com/?tab=featured');
preg_match_all('/n">\+([0-9]+)<\/div>/', $a, $r);
echo array_sum($r[1]);

ทดสอบ:

php run.php

10250


2

ทุบตี 174

อิงจากhttps://codegolf.stackexchange.com/a/25180/7664 :

s=0;for i in {1..11};do for j in `wget -qO- "stackoverflow.com/questions?pagesize=50&sort=featured&page=$i"|cut -d' ' -f18|egrep '^[0-9]+$'`;do s=$(($s+$j));done;done;echo $s

คุณสามารถกำจัดpagesize=50&และเพียงวนรอบเพิ่มเติม (ฉันคิดว่าขนาดหน้าเริ่มต้นถ้า 15)
Alconja

@Alconja อืมใช่แล้วฉันจะได้รับถึง 162 ... แต่ด้วยข้อเสียของการร้องขอสแปมเพิ่มเติมไปยังเซิร์ฟเวอร์
thejh

2

Python (174 ตัวอักษร):

ขยายคำตอบของงูหลามข้างต้น (ไม่มีกรรมพอที่จะแสดงความคิดเห็น):

import requests,re;print sum(sum(map(int,re.findall(r"<.*>\+(\d+)<.*>",requests.get("http://stackoverflow.com/questions?sort=featured&page=%u"%i).text)))for i in range(1,33))

คำร้องขอแทน urllib จะลดลง 2 ตัวอักษร


1

Ruby (176 ตัวอักษร):

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

require'open-uri';b=0;(1..29).each{|i|d=open("http://stackoverflow.com/questions?sort=featured&page=#{i}").read;b+=d.scan(/<.*>\+(\d+)<.*>/).map{|x|x[0].to_i}.reduce 0,:+};p b

ให้ฉัน 35,300 ในขณะที่เขียน

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