Java, 540 karakter
Uyarı: aktif ödüllerin sayısı ~ 470. Bu kod, yığın akışı üzerindeki bir sayfaya birçok kez erişecektir. Çok fazla veri talebi yaptığınız için başınızı belaya sokabilir.
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
Çıktım şuydu , ama @ TonyH'in kodunu çalıştırdığımda anladım 37550
. Kötü haber.
Güzel 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;
}
}
}
Bunun işe yaraması basit. http://stackoverflow.com/questions"
Ödül alan soru sayısını belirlemek için URL'den okur (not: eğer sayı artarsa, program başarısız olur, ancak düşerse iyi çalışır). Bu regex kullanarak bu numara için arama yapar: b.>(\\d+)
. Bu, bugüne kadar yapılan tüm testlerde işe yaradı, ancak birileri bu regex ile eşleşen bir soru sorsa, bu işe yaramayabilir.
Sonra url http://stackoverflow.com/questions?pagesize=1&sort=featured&page=
+ ' yı açarız current question #
. Başka bir deyişle, öne çıkan her soru için yeni bir sayfa açıyoruz ve soru sayısını yalnızca olmaya 1
zorluyoruz, böylece hepsini alacağız. Ün kısmı daima eşleşecekion.>.(\\d+)
, bu yüzden onu bulmak için kullanırım. İşlemi iki parçaya böldüm, böylece soru sayısının azalıp azaltmadığını ucuz bir şekilde kontrol edebildim (yani, döndürülen dize bir tamsayı değil).
Ardından, bütün itibarı toplar ve yazdırırız.
Makinemde çalışması yaklaşık 3 dakika 20 saniye sürdü.
Neden doğru numarayı yazdırmadığını bilen var mı?