Berapa banyak hadiah yang keluar di Stackoverflow?

33

Tugas:

Anda adalah programmer dan Stackoverflow-answerer yang luar biasa, dan Anda memutuskan untuk menjawab setiap pertanyaan dengan hadiah di Stackoverflow. Anda sangat baik, sehingga Anda berhasil mendapatkan semua hadiah dalam semua pertanyaan. Sementara Anda menunggu perwakilan datang membanjiri, Anda menulis sebuah program yang berjalan dan mencari tahu berapa jumlah total perwakilan di semua karunia itu.

Aturan:

  • Saat dijalankan,
    • Program Anda akan menavigasi melalui tab unggulan di Stack Overflow.
    • Ini akan mengikis nilai dari setiap hadiah,
    • Maka itu akan menambahkannya dan menampilkan total
  • Itu harus mengunduh data dari mana saja di SO (dan hanya SO), tetapi saya akan merekomendasikan menggunakan https://stackoverflow.com/questions?pagesize=50&sort=featured , karena hanya sekitar 10 halaman
  • Ini , jadi kode terpendek menang
Dokter
sumber
2
stackoverflow.com/?tab=featured . Semua pertanyaan yang ditampilkan di 1 halaman.
Nzall
7
@NateKerkhofs itu tidak semuanya. Gulir ke bawah. misalnya ketika saya baru saja memuatnya, itu menunjukkan 96 dari 472 pertanyaan.
bazzargh
Bounty API
justhalf
@ justhalf sudah dibahas ...
TheDoctor

Jawaban:

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)

Sunting 1: memangkas beberapa penyeleksi ke bawah dan menggunakan ?:saran dari Google's Closure Compiler (via @Sirko - terima kasih)

Sunting 2: inisialisasi sdalam ddan inisialisasi tsebagai 0gantinya""

Sunting 3: menyadari Saya sebenarnya tidak perlu menargetkan wadah tertentu dan dapat menyapu seluruh dokumen, yang menghilangkan banyak .findpanggilan dan pemilih yang tidak perlu (ditambah variabel yang memegangnya)

Sunting 4: mendorong tpenginisialisasi dalam panggilan fungsi untuk menghindari ;(itu akan diangkat ke atas pula) dan squash fungsi ke satu pernyataan (menggabungkan dua pernyataan menjadi satu di dalam kondisi pernyataan ternary) untuk menjatuhkan{}

Catatan : Saya tidak yakin apakah itu curang, tetapi ini harus dijalankan dari jendela konsol browser yang sudah diarahkan http://stackoverflow.com/questions?page=1&sort=featured. Itu bergantung pada fakta bahwa jQuery dan tautan halaman yang sesuai tersedia di halaman itu sendiri. Selain itu, tampaknya hanya berfungsi di Firefox dan tidak di IE atau Chrome.

Output (pada saat posting):

38150 (in an alert dialog)

Meledak / berkomentar :

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)
Alconja
sumber
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 - digunakan Google Closure Compiler.
Sirko
8
Pilihan bahasa dan konteks yang licik untuk mem-bypass banyak karakter yang diperlukan! (Seperti " stackoverflow.com/" ) Saya menyukainya!
AlexC
Saya pikir Anda harus menyebutkan bahwa itu dilakukan menggunakan plugin jQuery. yang saya pikir seharusnya .. :)
Mr_Green
Chrome melempar kesalahan sintaksis. Membuka tubuh fungsi dengan (paren, apakah itu benar-benar berfungsi?
thejh
@ Mr_Green - Saya sudah mencatat itu, tapi saya sudah berani untuk menarik lebih banyak perhatian ...
Alconja
21

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

Parsing HTML dari https://stackoverflow.com/questions?sort=featured menggunakan ekspresi reguler.

The batas atas rangedi forlingkaran harus menjadi number of pages + 1atau kode akan menaikkan HTTPErrorkarena 404s. Jumlah hasil default per-halaman adalah 15, yang merupakan kode yang digunakan (menghilangkan ?pagesize=50menyimpan karakter dan sama efektifnya).

Terima kasih kepada @Gabe untuk tip tentang mengurangi jumlah char lebih jauh.

Golf :

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))

Output (pada saat posting):

37700

Tidak golf :

Ini versi yang agak tidak golf yang seharusnya sedikit lebih mudah dibaca dan dimengerti.

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 )
      )
Tony Ellis
sumber
1
Anda dapat menyingkirkan forloop eksplisit dan turun ke 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
memiliki hardcoded batas atas membuatnya agak sulit untuk diuji
Einacio
2
oh tuhan
wchargin
6
@ Richard Ya, tapi ini kode golf , jadi singkatnya apakah itu "ide bagus". Maksudku, dalam Kehidupan Nyata itu juga bukan ide yang baik untuk menulis satu kalimat yang menghebohkan tanpa spasi ...
Tim Goodman
3
@Richard Parsing html dan mengekstraksi dari html adalah tugas yang sangat berbeda. Karena situs web bukan API stabil, tidak ada yang dijamin berfungsi untuk ekstraksi semacam ini. Meskipun kode Tony adalah sedikit overgolfed, sehingga akan gagal jika ada setiap tag yang berisi +diikuti dengan nomor. Misalnya judul pertanyaan bisa cocok dengan format itu.
CodesInChaos
18

Rebol - 164 133 130 (139 dengan 404 cek)

Parsing html menggunakan parsesub-bahasa Rebol. Memeriksa 98 halaman pertama. Saya menyadari bahwa saya memiliki kendala yang sama dengan solusi python - terlalu banyak pengulangan mencapai 404 kesalahan dan menghentikan eksekusi. Terima kasih kepada @rgchris untuk banyak peningkatan! Diperbarui untuk memeriksa hingga 98 halaman.

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

Dengan pemeriksaan kesalahan untuk 404 (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

Uji

>> 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

Penjelasan

Rebol mengabaikan spasi, maka Anda bisa meletakkan semuanya pada satu baris seperti itu jika Anda memilih. PARSE mengambil dua input, dan argumen pertama ( read join ...) cukup jelas. Tetapi di sini ada beberapa komentar tentang instruksi dialek parse, dalam lekukan yang lebih tradisional:

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
Johnk
sumber
Bagus ... Saya menambahkan versi berformat oridinary dengan beberapa komentar, semoga Anda tidak keberatan! Selalu menyenangkan untuk melihat seberapa baik Rebol mengatasi begitu banyak masalah dengan kemampuan baca tulis seperti itu (semua dalam setengah-lintas-platform cross-executable berlisensi Apache tapi itu membuat hal-hal seperti REFORM menonjol seperti jempol yang sakit. Setiap bit masuk akal tapi saya masih melihat pada kata itu dan pergi "REduce dan FORMULIR diubah menjadi REFORM" hanya jelek . Terobsesi itu sangat Hawthorne . Oh, dan Anda dapat mengubah BEBERAPA ke APA SAJA dan memotong char! :-)
Dr. Rebmu
Ups, seharusnya 133.
rgchris
Catatan: Anda harus mengulang ke nnilai yang lebih tinggi ... saat ini ada 28 halaman hadiah (untuk ukuran halaman 15). Tidak akan memengaruhi jumlah char Anda.
Alconja
Terima kasih, Alconja. Mudah naik hingga 98 halaman sebelum menambahkan karakter lagi ke solusinya. Saya harus menjalankan kembali tes dari rumah malam ini
johnk
11

Ruby, 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

Menggunakan Stack Exchange API.

Output (pada saat posting asli):

37200

Saya tidak menghitung &pagesize=100dalam jumlah karakter, karena berfungsi tanpa itu, tapi saya hanya menambahkan itu untuk kenyamanan saat pengujian. Jika Anda menghapusnya, ia melakukan hal yang sama (kecuali itu memakan lebih banyak kuota dan memakan waktu sedikit lebih lama).

Gagang pintu
sumber
Bagus, saya hanya mendapatkannya 275 dalam Python
Claudiu
makan lebih banyak kuota ??? Anda seharusnya menggunakan SO dan SO saja.
John Dvorak
@JanDvorak ??? Maksud saya kuota API.
Gagang Pintu
1
The requires bisa diganti dengan -rbendera baris perintah.
Justin
8

Rebmu - 108 107

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

Tes (pukul 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 terlihat agak samar, tetapi cukup mudah dibaca begitu Anda terbiasa. Mari kita mulai dengan menghapusnya dan meletakkannya dengan benar.

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 adalah dialek dari Rebol sehingga Anda dapat melihat kesamaan dalam solusinya. Rebmu belum bisa mengurangi ukuran setiap pernyataan, tetapi itu adalah bahasa yang berkembang. Sekali lagi terima kasih kepada @rgchris untuk peningkatan pada upaya pertama saya.

Johnk
sumber
ti(ke integer!) akan lebih aman daripada dodi Rebmu tanpa perubahan panjang kode.
rgchris
6

Ruby - 197

Versi pendek:

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

Versi ramah manusia:

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

Dan menjawab - 39700

Ruby dengan parameter skrip - 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

Untuk menjalankan ini dari tipe bash saja

ruby code_golf_stack_overflow2.rb http://stackoverflow.com/questions?sort=featured\&page= .bounty-indicator
cyriel
sumber
The requires bisa diganti dengan -rbendera baris perintah.
Justin
6

PHP - 121 byte

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

Menggunakan pengubah 'eval' regex, untuk menghindari penggunaan array_sumatau serupa. Tampaknya menjadi solusi terpendek di antara entri yang valid.

primo
sumber
4
yang emodifikator telah usang sebagai PHP 5.5, tetapi masih berguna untuk bermain golf tetap.
Fabrício Matté
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;

Akan mengulangi semua halaman, pagesizetidak diatur untuk menyimpan byte jadi lebih banyak GET.

Sangat Sangat Kotor, tapi ... mengambil keuntungan dari PHP"kekurangan"!

  • tidak ada ruang setelah echo
  • while berhenti pada tugas
  • output setelah RegExganti adalah string yang dimulai dengan jumlah hadiah
  • array_sum() menambahkan string
  • $ndan $sdiinisialisasi, tetapi mulai dari tidak ada sama sekali. mulai dari nol
  • dll ...
CSᵠ
sumber
5

Bash 206

optimisasi mungkin, terlalu malas

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

hasil:

39450
pengguna19998
sumber
4
Saya bisa saja salah, tetapi sepertinya ini bisa sangat singkat dengan beberapa optimasi kualitas.
rickcnagy
seq 1 11dapat dikurangi menjadi seq 11.
fedorqui
Anda harus dapat menyingkirkan ruang di sekitar pipa untuk menghemat empat karakter, dan tentunya kedua greps tersebut dapat digabung menjadi satu (apakah maksud Anda "[0-9] +"?).
Desty
Juga "grep -o -E" => "egrep -o".
Desty
Dan Anda dapat mengubah: "egrep -o '[0-9] +'" => "cut -d '' -f3" :) :)
Desty
5

Javascript - 129 119 110 107 karakter

EDIT: JAWABAN BURUK! Ini hanya menangani "Pertanyaan unggulan", yang hanya sebagian kecil saja. Jawaban Alconja lebih valid.

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

Jalankan di https://stackoverflow.com/?tab=featured di jendela konsol. Berdasarkan solusi dari Alconja.

Golf sedikit lebih banyak dengan menghapus spasi putih yang tidak dibutuhkan.

Eval yang digunakan untuk menghapus panggilan fungsi, membersihkan 9 karakter lainnya.

membersihkan beberapa spasi putih yang tidak dibutuhkan.

Nzall
sumber
3

Jawa, 540 karakter

Peringatan: jumlah karunia aktif adalah ~ 470. Kode ini akan mengakses halaman di stackoverflow yang berkali-kali. Mungkin membuat Anda bermasalah dengan mereka karena membuat begitu banyak permintaan data.

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;}}}

Output saya 23400, tetapi ketika saya menjalankan kode @ TonyH, saya mendapatkannya 37550. Kabar buruk.

Kode cantik:

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;
        }
    }
}

Cara kerjanya sederhana. Bunyinya dari url http://stackoverflow.com/questions"untuk menentukan jumlah pertanyaan yang memiliki karunia (catatan: jika jumlahnya meningkat, program gagal, tetapi jika turun, itu berfungsi dengan baik). Ini mencari nomor ini menggunakan regex: b.>(\\d+). Ini telah bekerja di semua tes hingga saat ini, tetapi jika seseorang mengajukan pertanyaan yang cocok dengan regex itu, ini mungkin tidak berhasil.

Lalu, kita buka url http://stackoverflow.com/questions?pagesize=1&sort=featured&page=+ current question #. Dengan kata lain, kami membuka halaman baru untuk setiap pertanyaan unggulan, dan memaksa jumlah pertanyaan hanya 1, jadi kami akan mendapatkan semuanya. Bagian reputasi akan selalu cocok ion.>.(\\d+), jadi saya menggunakannya untuk menemukannya. Saya membagi operasi menjadi dua bagian sehingga saya bisa dengan murah memeriksa apakah jumlah pertanyaan berkurang (yaitu string yang dikembalikan bukan bilangan bulat).

Lalu, kami meringkas semua reputasi dan mencetaknya.

Butuh sekitar 3 menit dan 20 detik untuk berjalan di mesin saya.


Adakah yang tahu mengapa ini tidak mencetak nomor yang benar?

Justin
sumber
pagesize = 100 memberikan angka besar. Saya pikir sesuatu yang aneh sedang terjadi karena Anda melewati pageize = 1. Dalam jawaban saya, jika saya tidak menentukan 'pageize', hasilnya dekat dengan nomor Anda.
jzm
@malik Ya saya menyadari bahwa saya "salah membaca" komentar Anda, jadi saya menghapus komentar saya :-). pageize = 100 bertindak seolah-olah pageize = 50. Apakah maksud Anda menjalankan kode saya dengan pageize = 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);}}

Menggunakan Stackoverflow.com. Sama seperti di bawah ini, kecuali tidak ada dekompresi Gzip dan regex yang berbeda.

Uji

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

Anehnya, mendapat nilai berbeda dari di bawah.


C # - 496

Ini menggunakan api.stackexchange yang di-gzip dan 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);}}

Tidak dijinakkan:

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);
    }
}

Uji

Pagesize standar:

> 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
jzm
sumber
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)

Ia bekerja dari mana saja di stackexchange (dan banyak situs lainnya), tidak perlu berada di halaman tertentu seperti di @ Alconja / @ NateKerkhofs jawaban

Einacio
sumber
jQuery adalah perpustakaan, bukan bahasa. Tidak yakin apakah itu valid atau tidak ...
rickcnagy
@ br1ckb0t anggap sebagai javascript jika Anda suka. jQuery sudah ada di situs stackexchange, saya hanya menjadi eksplisit tentang$
Einacio
Ya, itu masuk akal! Kode yang bagus
rickcnagy
2

PHP - 139

Golf:

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

Tidak Digubah - 147

Sederhana 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]);

Uji:

php run.php

10250

Aziz Saleh
sumber
2

Bash 174

Berdasarkan 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
thejh
sumber
Anda dapat menyingkirkan pagesize=50&dan hanya loop lagi (saya pikir ukuran halaman default jika 15).
Alconja
@Alconja Hmm, benar, jadi saya bisa mendapatkan ini ke 162 ... tetapi hanya dengan kelemahan dari lebih banyak permintaan spam ke server.
thejh
2

Python (174 karakter):

Memperluas jawaban python di atas (tidak memiliki cukup karma untuk berkomentar):

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))

Permintaan pengganti urllib mengurangi 2 karakter.

pengguna35581
sumber
1

Ruby (176 karakter):

Mengikuti contoh Tony H. tentang menggunakan nomor halaman kode-keras, inilah yang saya dapat:

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

memberi saya 35300 pada saat penulisan.

difotoionisasi
sumber