Ява, 540 символов
Предупреждение: количество активных бонусов составляет ~ 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"чтобы определить количество вопросов, которые имеют награды (примечание: если число увеличивается, программа завершается ошибкой, но если она падает, она работает нормально). Он ищет этот номер , используя регулярное выражение: b.>(\\d+). До настоящего времени это работало во всех тестах, но если кто-то задал вопрос, соответствующий этому регулярному выражению, это может не сработать.
Затем мы открываем URL http://stackoverflow.com/questions?pagesize=1&sort=featured&page=+ current question #. Другими словами, мы открываем новую страницу для каждого выбранного вопроса и устанавливаем только количество вопросов 1, чтобы получить их все. Репутация всегда будет совпадать ion.>.(\\d+), поэтому я использую ее, чтобы найти. Я разделил операцию на две части, чтобы я мог дешево проверить, не уменьшилось ли количество вопросов (т.е. возвращаемая строка не является целым числом).
Затем мы суммируем всю репутацию и печатаем ее.
На моей машине потребовалось около 3 минут и 20 секунд.
Кто-нибудь знает, почему он не печатает правильный номер?