Java, 540 caracteres
Advertencia: el número de recompensas activas es ~ 470. Este código accederá a una página en stackoverflow que muchas veces. Puede meterte en problemas con ellos por hacer tantas solicitudes de datos.
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;}}}
Mi salida fue 23400
, pero cuando ejecuté el código de @ TonyH, obtuve 37550
. Malas noticias.
Código bonito:
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;
}
}
}
La forma en que esto funciona es simple. Se lee de la urlhttp://stackoverflow.com/questions"
para determinar el número de preguntas que tienen recompensas (nota: si el número aumenta, el programa falla, pero si cae, funciona bien). Se busca de este número mediante la expresión regular: b.>(\\d+)
. Esto ha funcionado en todas las pruebas hasta la fecha, pero si alguien hizo una pregunta que coincida con esa expresión regular, esto podría no funcionar.
Luego, abrimos la url http://stackoverflow.com/questions?pagesize=1&sort=featured&page=
+ current question #
. En otras palabras, abrimos una nueva página para cada pregunta destacada, y forzamos que el número de preguntas sea solo1
, de modo que las obtengamos todas. La parte de reputación siempre coincidirá ion.>.(\\d+)
, así que la uso para encontrarla. Dividí la operación en dos partes para poder comprobar de forma económica si se redujo el número de preguntas (es decir, la cadena devuelta no es un número entero).
Luego, resumimos toda la reputación e imprimimos.
Me llevó unos 3 minutos y 20 segundos ejecutar mi máquina.
¿Alguien sabe por qué no está imprimiendo el número correcto?