Java, 540 znaków
Ostrzeżenie: liczba aktywnych nagród wynosi ~ 470. Ten kod będzie wielokrotnie uzyskiwał dostęp do strony w przepełnieniu stosu. Może to sprawić kłopot z nimi za przesyłanie tak wielu żądań danych.
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;}}}
Mój wynik był 23400
, ale kiedy uruchomiłem kod @ TonyH, dostałem 37550
. Złe wieści.
Ładny kod:
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;
}
}
}
Sposób, w jaki to działa, jest prosty. Czyta z adresu URL, http://stackoverflow.com/questions"
aby określić liczbę pytań z nagrodami (uwaga: jeśli liczba wzrośnie, program się nie powiedzie, ale jeśli spadnie, działa dobrze). Wyszukuje dla tego numeru przy użyciu wyrażenia regularnego: b.>(\\d+)
. Działa to we wszystkich testach do tej pory, ale jeśli ktoś zadaje pytanie pasujące do wyrażenia regularnego, może to nie działać.
Następnie otwieramy adres URL http://stackoverflow.com/questions?pagesize=1&sort=featured&page=
+ current question #
. Innymi słowy, otwieramy nową stronę dla każdego polecanego pytania i wymuszamy, aby liczba pytań była tylko 1
, więc otrzymamy je wszystkie. Część dotycząca reputacji zawsze będzie pasować ion.>.(\\d+)
, więc używam jej do znalezienia. Podzieliłem operację na dwie części, aby móc tanio sprawdzić, czy liczba pytań została zmniejszona (tzn. Zwracany ciąg nie jest liczbą całkowitą).
Następnie podsumowujemy całą reputację i drukujemy ją.
Uruchomienie na moim komputerze zajęło około 3 minut i 20 sekund.
Czy ktoś wie, dlaczego nie drukuje właściwej liczby?