Wie viel Kopfgeld fließt in Stackoverflow?

33

Aufgabe:

Sie sind ein großartiger Programmierer und Stackoverflow-Beantworter und entscheiden sich, jede Frage mit einem Kopfgeld auf Stackoverflow zu beantworten. Du bist so gut, dass du es schaffst, alle Kopfgelder in allen Fragen zu bekommen. Während Sie darauf warten, dass die Wiederholung eintritt, schreiben Sie ein Programm, in dem Sie herausfinden, wie viele Wiederholungen sich in all diesen Bounties befinden.

Regeln:

  • Wenn ausgeführt,
    • Ihr Programm navigiert durch die Registerkarte "Stack Overflow" (Stapelüberlauf).
    • Es wird den Wert jeder Prämie auskratzen,
    • Dann wird es addiert und die Summe angezeigt
  • Es muss Daten von überall auf SO herunterladen (und nur von SO), aber ich würde die Verwendung von https://stackoverflow.com/questions?pagesize=50&sort=featured empfehlen , da es nur etwa 10 Seiten umfasst
  • Das ist , also gewinnt der kürzeste Code
Der Doktor
quelle
2
stackoverflow.com/?tab=featured . Alle vorgestellten Fragen auf 1 Seite.
Nzall
7
@NateKerkhofs das sind nicht alle. Scrolle nach unten. ZB als ich es gerade geladen habe, wurden 96 von 472 Fragen angezeigt.
Bazzargh
Bounty API
Hälfte
@ Justhalf bereits diskutiert worden ...
TheDoctor

Antworten:

23

JavaScript - 176 133 130 108 106

function f()(t+=$("[title~=an]").text(),u=$("[rel*=x]")[0])?$("html").load(u.href,f):alert(eval(t));f(t=0)

Edit 1: Einige Selektoren wurden ?:gekürzt und der Vorschlag von Googles Closure Compiler wurde übernommen (via @Sirko - danke)

Edit 2: sInnen dinitialisieren und tals 0statt initialisieren""

Edit 3: Es wurde mir klar, dass ich eigentlich nicht auf einen bestimmten Container abzielen muss und das gesamte Dokument durchsuchen kann. Dadurch werden eine Reihe von .findAufrufen und ein unnötiger Selektor (plus die Variable, die ihn enthält) beseitigt.

Bearbeiten 4: Schieben Sie den tInitialisierer in den Funktionsaufruf, um a zu vermeiden ;(er wird ohnehin nach oben gehoben), und drücken Sie die Funktion auf eine Anweisung (kombinieren Sie zwei Anweisungen innerhalb der ternären Anweisungsbedingung zu einer), um das zu löschen{}

Hinweis : Ich bin nicht sicher, ob es betrügt, aber dies muss in einem Konsolenfenster eines Browsers ausgeführt werden, auf den bereits gezeigt wird http://stackoverflow.com/questions?page=1&sort=featured. Es basiert auf der Tatsache, dass jQuery und die entsprechenden Paging-Links auf der Seite selbst verfügbar sind. Außerdem scheint es nur in Firefox und nicht in IE oder Chrome zu funktionieren .

Ausgabe (zum Zeitpunkt der Veröffentlichung):

38150 (in an alert dialog)

Explodiert / kommentiert :

function f()
    //concat all the bounty labels to t (they take the format "+50")
    //happens to be elements with title attribute containing word 'an'
    (t+=$("[title~=an]").text(),
    //find the "next" (has rel=next attribute) button
    u = $("[rel*=x]")[0])       
        ?
        //if there is a next button, load it, and then recurse f again
        $("html").load(u.href,f)
        :
        //else eval the 0+a+b+...+z tally and alert the result
        alert(eval(t))
//kick off the initial scrape (and simultaneously init the total tally)
f(t=0)
Alconja
quelle
s=" #mainbar";d=$(s);t="";function a(){d.find(".bounty-indicator").each(function(){t+=this.innerHTML});(u=d.find("[rel=next]")[0])?d.load(u.href+s,a):alert(eval(t))}a();169 - verwendet Google Closure Compiler.
Sirko
8
Raffinierte Wahl der Sprache und des Kontexts, um viele der erforderlichen Zeichen zu umgehen! (Wie " stackoverflow.com/" ) Ich mag es!
AlexC
Ich denke, Sie sollten erwähnen, dass es mit jQuery Plugin gemacht wird. was ich denke, es sollte sein .. :)
Mr_Green
Chrome löst einen Syntaxfehler aus. Öffnen eines Funktionskörpers mit einem (Paren, funktioniert das wirklich?
Thejh
@Mr_Green - Ich habe das bereits bemerkt, aber ich habe es gewagt, um mehr Aufmerksamkeit zu erregen ...
Alconja
21

Python - 232, 231, 195, 183, 176174

Analysiert den HTML-Code von https://stackoverflow.com/questions?sort=featured mit regulären Ausdrücken.

Die Obergrenze von rangein der forSchleife muss sein, number of pages + 1sonst wird der Code HTTPErrorwegen 404s erhöht. Die Standardanzahl der Ergebnisse pro Seite beträgt 15, was im Code verwendet wird (das Weglassen ?pagesize=50von Zeicheneinsparungen ist ebenso effektiv).

Vielen Dank an @Gabe für den Tipp , die Anzahl der Zeichen noch weiter zu verringern.

Golf gespielt :

import requests,re;print sum(sum(map(int,re.findall(r"<.*>\+(\d+)<.*>",requests.get("https://stackoverflow.com/questions?sort=featured&page=%u"%i).text)))for i in range(1,33))

Ausgabe (zum Zeitpunkt der Veröffentlichung):

37700

Nicht golfen :

Hier ist eine etwas ungelernte Version, die etwas leichter zu lesen und zu verstehen sein sollte.

import requests, re

print sum(
          sum(
              map( int,
                   re.findall( r"<.*>\+(\d+)<.*>",
                               requests.get( "https://stackoverflow.com/questions?sort=featured&page=%u" % i).text
                   )
              )
          ) for i in range( 1, 33 )
      )
Tony Ellis
quelle
1
Sie können die explizite forSchleife loswerden und auf 176:import urllib,re;print sum(sum(map(int,re.findall(r"<.*>\+(\d+)<.*>",urllib.urlopen("http://stackoverflow.com/questions?sort=featured&page=%u"%i).read())))for i in range(1,33))
Gabe
Eine fest codierte Obergrenze zu haben, macht es ein wenig schwierig zu testen
Einacio
2
oh Gott
wchargin
6
@ Richard Ja, aber das ist Code Golf , so Kürze Trümpfe , ob es sich um eine „gute Idee“ ist. Ich meine, im wirklichen Leben ist es auch keine gute Idee, horrende Einzeiler ohne Leerzeichen zu schreiben ...
Tim Goodman
3
@Richard HTML-Parsing und HTML-Extraktion sind ziemlich unterschiedliche Aufgaben. Da eine Website keine stabile API ist , funktioniert für diese Art der Extraktion garantiert nichts . Obwohl Tonys Code etwas überfrachtet ist, würde es scheitern, wenn ein Tag mit einem +gefolgt von einer Zahl vorhanden ist. Zum Beispiel könnte ein Fragentitel in dieses Format passen.
CodesInChaos
18

Rebol - 164 133 130 (139 mit 404 Scheck)

Analysiert das HTML in parseder Subsprache von Rebol. Überprüft die ersten 98 Seiten. Mir wurde klar, dass ich die gleiche Einschränkung habe wie die Python-Lösung - zu viele Wiederholungen führen zu 404-Fehlern und stoppen die Ausführung. Vielen Dank an @rgchris für viele Verbesserungen! Aktualisiert, um bis zu 98 Seiten zu prüfen.

s: 0 repeat n 99[parse read join http://stackoverflow.com/questions?sort=featured&page= n[15[thru{>+}copy x to{<}(s: s + do x)]]]s

Bei der Fehlerprüfung für 404s (139):

s: 0 repeat n 99[attempt[parse read join http://stackoverflow.com/questions?sort=featured&page= n[15[thru{>+}copy x to{<}(s: s + do x)]]]]s

Prüfung

>> s: 0 repeat n 20[parse read join http://stackoverflow.com/questions?sort=featured&page= n[15[thru{>+}copy x to{<}(s: s + do x)]]]s
== 23600

>> s: 0 repeat n 99[attempt[parse read join http://stackoverflow.com/questions?sort=featured&page= n[15[thru{>+}copy x to{<}(s: s + do x)]]]]s
Script: none Version: none Date: none
== 36050

Erläuterung

Rebol ignoriert Whitespace, daher können Sie alles auf eine Zeile setzen, wenn Sie möchten. PARSE verwendet zwei Eingaben, und das erste Argument ( read join ...) ist ziemlich selbsterklärend. Aber hier sind einige Kommentare zu den Anweisungen zum Parsen des Dialekts in einem traditionelleren Einzug:

s: 0
repeat n 99 [
    parse read join http://stackoverflow.com/questions?sort=featured&page= n [
        ;-- match the enclosed pattern 15 times (the rule will fail politely when there are less entries)
        15 [
            ;-- seek the match position up THRU (and including) the string >+
            thru {>+}
            ;-- copy contents at the current position up TO (but not including) <
            copy x to {<}
            ;-- (Basically, run some non-dialected Rebol if this match point is reached) the do is a bit dangerous as it runs the string as code
            (s: s + do x)
        ]
    ]
]
;-- evaluator returns last value, we want the value in S
;-- (not the result of PARSE, that's a boolean on whether the end of input was reached)
s
Johnk
quelle
Nizza ... Ich habe eine oridinary-formatierte Version mit einigen Kommentaren hinzugefügt, hoffe, es macht Ihnen nichts aus! Es ist immer wieder toll zu sehen, wie gut Rebol so viele Probleme mit solchen Kenntnissen löst (alles in einer plattformübergreifenden, von Apache lizenzierten, ausführbaren Datei mit einer Größe von einer halben Million, aber das lässt Dinge wie REFORM wie einen wunden Daumen herausragen. Alles andere macht Sinn, aber ich sehe immer noch so aus zu diesem Wort und gehen „reduce und FORM wird in REFORM gedreht“ gerade ist hässlich besessen es sehr ist. Hawthorne Oh, und Sie könnten einige zu ANY und abrasieren ein Zeichen ändern :-).!
Dr. Rebmu
Ups
Hinweis: Sie müssen eine Schleife mit einem höheren nWert ausführen. Derzeit gibt es 28 Seiten mit Kopfgeldern (für Seitengröße 15). Wirkt sich jedoch nicht auf Ihre Zeichenanzahl aus.
Alconja
Vielen Dank, Alconja. Sie können problemlos bis zu 98 Seiten aufrufen, bevor Sie der Lösung weitere Zeichen hinzufügen. Ich muss den Test heute Abend von zu Hause aus
wiederholen
11

Rubin, 260

require'open-uri'
require'zlib'
i=b=0
d=''
until /"has_more":f/=~d
i+=1
d=Zlib::GzipReader.new(open("http://api.stackexchange.com/2.2/questions/featured?site=stackoverflow&page=#{i}&pagesize=100")).read
b+=d.scan(/"bounty_amount":(\d+)/).map{|x|x[0].to_i}.reduce :+
end
p b

Verwendet die Stack Exchange-API.

Ausgabe (ab dem Zeitpunkt des ursprünglichen Beitrags):

37200

Ich zähle nicht die &pagesize=100in der Zeichenanzahl, weil es ohne es funktioniert, aber ich habe das nur für die Bequemlichkeit beim Testen hinzugefügt. Wenn Sie das entfernen, geschieht dasselbe (außer, dass es mehr Kontingent frisst und etwas länger dauert).

Türknauf
quelle
Schön, ich habe es in Python nur auf 275 geschafft
Claudiu
isst mehr Quote ??? Sie sollten nur SO und SO verwenden.
John Dvorak
@JanDvorak ??? Ich meinte API-Quote.
Doorknob
1
Das requires kann durch das -rKommandozeilen-Flag ersetzt werden.
Justin
8

Rebmu - 108 107

rtN99[parseRDrj[http://stackoverflow.com/questions?sort=featured&page=N][15[thru{>+}copyXto{<}(a+JdoX)]]]j

Test (um 19:05 AEST)

>> rebmu [rtN99[parseRDrj[http://stackoverflow.com/questions?sort=featured&page=N][15[thru{>+}copyXto{<}(a+JdoX)]]]j]
Script: none Version: none Date: none
== 79200

Rebmu sieht ziemlich kryptisch aus, ist aber gut lesbar, sobald Sie den Dreh raus haben. Beginnen wir damit, das Geräusch zu entfernen und es richtig auszulegen.

rt n 99 [
    parse rd rj [
        http://stackoverflow.com/questions?sort=featured&page= n
    ][
        15 [
            thru {>+}
            copy x to {<}
            (a+ j do x)
        ]
    ]
]
j

Rebmu ist ein Dialekt von Rebol, so dass Sie die Ähnlichkeiten in der Lösung sehen können. Rebmu kann noch nicht jede Aussage verkleinern, aber es ist eine sich entwickelnde Sprache. Nochmals vielen Dank an @rgchris für die Verbesserungen an meinem ersten Versuch.

Johnk
quelle
ti(Ganzzahl!) wäre sicherer als doin Rebmu ohne Änderung der Codelänge.
Rgchris
6

Rubin - 197

Kurzfassung:

require 'nokogiri'
require 'open-uri'
s=0
(1..33).each{|p|Nokogiri::HTML(open("http://stackoverflow.com/questions?page=#{p}&sort=featured")).css('.bounty-indicator').each{|b|s+=b.content.to_i}}
p s

Menschenfreundliche Version:

require 'nokogiri'
require 'open-uri'
s=0
(1..33).each do |p|
    Nokogiri::HTML(open("http://stackoverflow.com/questions?page=#{p}&sort=featured")).css('.bounty-indicator').each do |b|
        s += b.content.to_i
    end
end
puts s

Und antworte - 39700

Ruby mit Skriptparametern - 139

require 'nokogiri'
require 'open-uri'
s=0
(1..33).each{|p|Nokogiri::HTML(open(ARGV[0]+p.to_s)).css(ARGV[1]).each{|b|s+=b.content.to_i}}
p s

Um dies von bash auszuführen, geben Sie einfach Folgendes ein

ruby code_golf_stack_overflow2.rb http://stackoverflow.com/questions?sort=featured\&page= .bounty-indicator
Cyriel
quelle
Das requires kann durch das -rKommandozeilen-Flag ersetzt werden.
Justin
6

PHP - 121 Bytes

<?for(;preg_filter('/>\+(\d+)/e','$t+=\1',@file('http://stackoverflow.com/questions?sort=featured&page='.++$n)););echo$t;

Verwenden Sie einen Regex-Modifikator 'eval', um die Verwendung array_sumoder ähnliches zu vermeiden . Scheint die kürzeste Lösung unter den gültigen Einträgen zu sein.

primo
quelle
4
Der eModifikator ist seit PHP 5.5 veraltet, aber dennoch zum Golfen nützlich.
Fabrício Matté
6

PHP, 134 , 131 , 127

while($q=array_sum(preg_filter('#.*>\+#',0,file("http://stackoverflow.com/questions?sort=featured&page=".++$n))))$s+=$q;echo$s;

Wird alle Seiten durchlaufen , pagesizeist nicht so eingestellt, dass Bytes gespart werden, also mehr GETs.

Sehr, sehr dreckig, aber ... nutzen Sie PHPdie "Fehler"!

  • kein Leerzeichen danach echo
  • while stoppt bei der Zuordnung
  • Ausgabe nach RegExErsetzen ist eine Zeichenfolge, die mit dem Kopfgeldbetrag beginnt
  • array_sum() fügt Zeichenfolgen hinzu
  • $nund $swerden initialisiert, aber ausgehend von nichts ist äquiv. als von Null ausgehend
  • etc...
CSᵠ
quelle
5

Bash 206

Optimierungen möglich, zu faul

s=0;for i in `seq 1 11`;do for j in `wget -q -O - "http://stackoverflow.com/questions?pagesize=50&sort=featured&page=$i" | grep -o -E "bounty worth [0-9]*" | grep -o -E "[0-9]*"`;do s=$(($s+$j));done;done;echo $s

Ergebnis:

39450
user19998
quelle
4
Ich könnte mich irren, aber das scheint bei einigen Qualitätsoptimierungen sehr kurz zu sein.
Rickcnagy
seq 1 11kann auf reduziert werden seq 11.
Fedorqui
Sie sollten in der Lage sein, die Leerzeichen um die Pipes zu entfernen, um vier Zeichen zu sparen, und diese beiden Greps können sicher zu einem zusammengeführt werden (meinten Sie "[0-9] +"?).
Desty
Auch "grep -o -E" => "egrep -o".
Desty
Und Sie können ändern: "egrep -o '[0-9] +'" => "cut -d '' -f3" :)
Desty
5

Javascript - 129 119 110 107 Zeichen

EDIT: UNGÜLTIGE ANTWORT! Dies behandelt nur die "am häufigsten gestellten Fragen", von denen nur ein Bruchteil vorhanden ist. Alconjas Antwort ist zutreffender.

s="#mainbar";t="";eval("$(s).find('.bounty-indicator').each(function(){t+=this.innerHTML});alert(eval(t))")

Führen Sie auf https://stackoverflow.com/?tab=featured in einem Konsolenfenster. Basierend auf der Lösung von Alconja.

Golfen Sie ein bisschen mehr, indem Sie nicht benötigte Leerzeichen entfernen.

Mit eval wird der Funktionsaufruf entfernt und weitere 9 Zeichen gelöscht.

löschte noch mehr nicht benötigtes Leerzeichen.

Nzall
quelle
3

Java, 540 Zeichen

Achtung: Die Anzahl der aktiven Kopfgelder beträgt ~ 470. Dieser Code greift mehrmals auf eine Seite im Stapelüberlauf zu. Es kann Ihnen Probleme bereiten, wenn Sie so viele Datenanforderungen stellen.

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;}}}

Meine Ausgabe war 23400 , aber als ich @ TonyHs Code laufen ließ, bekam ich 37550. Schlechte Nachrichten.

Schöner Code:

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;
        }
    }
}

Die Funktionsweise ist einfach. Es liest aus der URLhttp://stackoverflow.com/questions" , um die Anzahl der Fragen mit Kopfgeldern zu bestimmen (Hinweis: Wenn die Anzahl zunimmt, schlägt das Programm fehl, aber wenn es abfällt, funktioniert es einwandfrei). Es wird nach dieser Nummer mit der Regex: b.>(\\d+). Dies hat bisher in allen Tests funktioniert, aber wenn jemand eine Frage gestellt hat, die diesem regulären Ausdruck entspricht, funktioniert dies möglicherweise nicht.

Dann öffnen wir die URL http://stackoverflow.com/questions?pagesize=1&sort=featured&page=+ current question #. Mit anderen Worten, wir öffnen für jede vorgestellte Frage eine neue Seite und erzwingen, dass nur die Anzahl der Fragen angegeben wird1 , damit wir sie alle erhalten. Der Reputationsteil wird immer übereinstimmen ion.>.(\\d+), also benutze ich ihn, um ihn zu finden. Ich habe die Operation in zwei Teile geteilt, um kostengünstig zu überprüfen, ob die Anzahl der Fragen reduziert wurde (dh die zurückgegebene Zeichenfolge ist keine Ganzzahl).

Dann fassen wir den Ruf zusammen und drucken ihn aus.

Es dauerte ungefähr 3 Minuten und 20 Sekunden, um auf meinem Computer zu laufen.


Weiß jemand, warum nicht die richtige Nummer gedruckt wird?

Justin
quelle
pagesize = 100 gibt die große Zahl an. Ich denke, etwas Seltsames passiert, weil Sie pageize = 1 übergeben. Wenn ich in meiner Antwort nicht "Seitengröße" angegeben habe, war das Ergebnis in der Nähe Ihrer Nummer.
JZM
@malik Ja, mir ist aufgefallen, dass ich deinen Kommentar "falsch gelesen" habe, also habe ich meinen gelöscht :-). pagesize = 100 verhält sich so, als ob pagesize = 50. Meinten Sie, dass Sie meinen Code mit pagesize = 100 ausgeführt haben?
Justin
2

C # - 407

class B{void Main(string[] a){var o=0;for(int i=1;i<11;i++){var r=((System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(new Uri(string.Format(a[0]+"&page={0}",i)))).GetResponse();if(r.ContentLength>0){using(var s=new StreamReader(r.GetResponseStream()))foreach(Match m in Regex.Matches(s.ReadToEnd(),"bounty worth (.+?) "))o+=int.Parse(m.Value.Substring(m.Value.IndexOf('h')+2));}}Console.Write(o);}}

Stackoverflow.com verwenden. Gleich wie unten, außer dass kein Gzip dekomprimiert wird und andere reguläre Ausdrücke verwendet werden.

Prüfung

> prog.exe http://stackoverflow.com/questions?pagesize=50&sort=featured
38150

Seltsamerweise einen anderen Wert als unten erhalten.


C # - 496

Hierfür wird api.stackexchange verwendet, das gzipped und json ist.

using System.IO.Compression;class B{void Main(string[] a){var o=0;for(int i=1;i<11;i++){var r=((System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(new Uri(string.Format(a[0]+"&page={0}",i)))).GetResponse();if(r.ContentLength>0)using(var s=new StreamReader(new GZipStream(r.GetResponseStream(),CompressionMode.Decompress)))foreach(Match m in Regex.Matches(s.ReadToEnd(),@"bounty_amount"":(.+?),"))o+=int.Parse(m.Value.Substring(m.Value.IndexOf(':')+1).Replace(",",""));}Console.Write(o);}}

Nicht abgeschlossen:

using System.IO.Compression;

class B
{
    void Main(string[] a)
    {
        var o = 0;
        for (int i=1; i<11; i++) {
            var w = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(new Uri(string.Format(a[0]+"&page={0}",i)));
            if(w.GetResponse().ContentLength > 0)
                using(var s = new StreamReader(new GZipStream(w.GetResponse().GetResponseStream(),CompressionMode.Decompress)))
                    foreach(Match m in Regex.Matches(s.ReadToEnd(), @"bounty_amount"":(.+?),"))
                        o += int.Parse(m.Value.Substring(m.Value.IndexOf(':')+1).Replace(",", ""));
        }
        Console.Write(o);
    }
}

Prüfung

Standardseitengröße:

> prog.exe http://api.stackexchange.com/2.2/questions/featured?site=stackoverflow
25300

Seitengröße = 100:

> prog.exe "http://api.stackexchange.com/2.2/questions/featured?site=stackoverflow&pagesize=100"
37400
jzm
quelle
2

jQuery 191

i=0;function f(p){$.get('//api.stackexchange.com/2.2/questions/featured?site=stackoverflow&page='+p,function(d){for(x in d.items)i+=d.items[x].bounty_amount;d.has_more?f(p+1):alert(i)})};f(1)

Es funktioniert von überall in stackexchange (und vielen anderen Sites), es muss sich nicht auf einer bestimmten Seite befinden, wie in @ Alconja / @ NateKerkhofs Antworten

Einacio
quelle
jQuery ist eine Bibliothek, keine Sprache. Nicht sicher, ob es gültig ist oder nicht ...
Rickcnagy
@br1ckb0t nimm es als Javascript, wenn du magst. jQuery ist sowieso schon auf Stackexchange-Sites, ich war nur explizit über die$
Einacio
Ja, das macht Sinn! Netter Code.
Rickcnagy
2

PHP - 139

Golf gespielt:

<?php
$a=file_get_contents('http://stackoverflow.com/?tab=featured');preg_match_all('/n">\+([0-9]+)<\/div>/',$a,$r);echo array_sum($r[1]);

Ungolfed - 147

Einfach file_get_contents/ preg_match/array_sum

<?php
$a = file_get_contents('http://stackoverflow.com/?tab=featured');
preg_match_all('/n">\+([0-9]+)<\/div>/', $a, $r);
echo array_sum($r[1]);

Prüfung:

php run.php

10250

Aziz Saleh
quelle
2

Bash 174

Basierend auf https://codegolf.stackexchange.com/a/25180/7664 :

s=0;for i in {1..11};do for j in `wget -qO- "stackoverflow.com/questions?pagesize=50&sort=featured&page=$i"|cut -d' ' -f18|egrep '^[0-9]+$'`;do s=$(($s+$j));done;done;echo $s
thejh
quelle
Sie können die loswerden pagesize=50&und nur mehr Schleife (ich denke, die Standard-Seitengröße, wenn 15).
Alconja
@Alconja Hmm, richtig, also ich könnte das auf 162 bringen ... aber nur mit dem Nachteil von mehr Anforderungs-Spam an den Server.
Thejh
2

Python (174 Zeichen):

Erweitern Sie die obige Python-Antwort (Sie haben nicht genug Karma, um einen Kommentar abzugeben):

import requests,re;print sum(sum(map(int,re.findall(r"<.*>\+(\d+)<.*>",requests.get("http://stackoverflow.com/questions?sort=featured&page=%u"%i).text)))for i in range(1,33))

Anfragen anstelle von urllib reduzieren 2 Zeichen.

user35581
quelle
1

Rubin (176 Zeichen):

Nach Tony Hs Beispiel für die Verwendung von fest codierten Seitenzahlen habe ich Folgendes erhalten:

require'open-uri';b=0;(1..29).each{|i|d=open("http://stackoverflow.com/questions?sort=featured&page=#{i}").read;b+=d.scan(/<.*>\+(\d+)<.*>/).map{|x|x[0].to_i}.reduce 0,:+};p b

gab mir zum Zeitpunkt des Schreibens 35300.

photoionisiert
quelle