Ява, 540 символів
Попередження: кількість активних щедротів становить ~ 470. Цей код буде отримувати доступ до сторінки в потоковому потоці багато разів. Це може створити вам проблеми з ними, оскільки вони роблять так багато запитів даних.
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 секунд.
Хтось знає, чому він не друкує потрібний номер?