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 Code-Golf , also gewinnt der kürzeste Code
Antworten:
JavaScript -
176133130108106Edit 1: Einige Selektoren wurden
?:
gekürzt und der Vorschlag von Googles Closure Compiler wurde übernommen (via @Sirko - danke)Edit 2:
s
Innend
initialisieren undt
als0
statt 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
.find
Aufrufen und ein unnötiger Selektor (plus die Variable, die ihn enthält) beseitigt.Bearbeiten 4: Schieben Sie den
t
Initialisierer 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):
Explodiert / kommentiert :
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.(
Paren, funktioniert das wirklich?Python -
232,231,195,183,176174Analysiert den HTML-Code von https://stackoverflow.com/questions?sort=featured mit regulären Ausdrücken.
Die Obergrenze von
range
in derfor
Schleife muss sein,number of pages + 1
sonst wird der CodeHTTPError
wegen 404s erhöht. Die Standardanzahl der Ergebnisse pro Seite beträgt 15, was im Code verwendet wird (das Weglassen?pagesize=50
von Zeicheneinsparungen ist ebenso effektiv).Vielen Dank an @Gabe für den Tipp , die Anzahl der Zeichen noch weiter zu verringern.
Golf gespielt :
Ausgabe (zum Zeitpunkt der Veröffentlichung):
Nicht golfen :
Hier ist eine etwas ungelernte Version, die etwas leichter zu lesen und zu verstehen sein sollte.
quelle
for
Schleife 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))
+
gefolgt von einer Zahl vorhanden ist. Zum Beispiel könnte ein Fragentitel in dieses Format passen.Rebol -
164133130 (139 mit 404 Scheck)Analysiert das HTML in
parse
der 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
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:quelle
n
Wert ausführen. Derzeit gibt es 28 Seiten mit Kopfgeldern (für Seitengröße 15). Wirkt sich jedoch nicht auf Ihre Zeichenanzahl aus.Rubin, 260
Verwendet die Stack Exchange-API.
Ausgabe (ab dem Zeitpunkt des ursprünglichen Beitrags):
Ich zähle nicht die
&pagesize=100
in 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).quelle
require
s kann durch das-r
Kommandozeilen-Flag ersetzt werden.Rebmu -
108107Test (um 19:05 AEST)
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.
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.
quelle
ti
(Ganzzahl!) wäre sicherer alsdo
in Rebmu ohne Änderung der Codelänge.Rubin - 197
Kurzfassung:
Menschenfreundliche Version:
Und antworte -
39700
Ruby mit Skriptparametern - 139
Um dies von bash auszuführen, geben Sie einfach Folgendes ein
quelle
require
s kann durch das-r
Kommandozeilen-Flag ersetzt werden.PHP - 121 Bytes
Verwenden Sie einen Regex-Modifikator 'eval', um die Verwendung
array_sum
oder ähnliches zu vermeiden . Scheint die kürzeste Lösung unter den gültigen Einträgen zu sein.quelle
e
Modifikator ist seit PHP 5.5 veraltet, aber dennoch zum Golfen nützlich.PHP,
134,131, 127while($q=array_sum(preg_filter('#.*>\+#',0,file("http://stackoverflow.com/questions?sort=featured&page=".++$n))))$s+=$q;echo$s;
Wird alle Seiten durchlaufen ,
pagesize
ist nicht so eingestellt, dass Bytes gespart werden, also mehrGET
s.Sehr, sehr dreckig, aber ... nutzen Sie
PHP
die "Fehler"!echo
while
stoppt bei der ZuordnungRegEx
Ersetzen ist eine Zeichenfolge, die mit dem Kopfgeldbetrag beginntarray_sum()
fügt Zeichenfolgen hinzu$n
und$s
werden initialisiert, aber ausgehend von nichts ist äquiv. als von Null ausgehendquelle
Bash 206
Optimierungen möglich, zu faul
Ergebnis:
quelle
seq 1 11
kann auf reduziert werdenseq 11
.Javascript -
129119110107 ZeichenEDIT: UNGÜLTIGE ANTWORT! Dies behandelt nur die "am häufigsten gestellten Fragen", von denen nur ein Bruchteil vorhanden ist. Alconjas Antwort ist zutreffender.
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.
quelle
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.
Meine Ausgabe war
23400
, aber als ich @ TonyHs Code laufen ließ, bekam ich37550
. Schlechte Nachrichten.Schöner Code:
Die Funktionsweise ist einfach. Es liest aus der URL
http://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 übereinstimmenion.>.(\\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?
quelle
C # - 407
Stackoverflow.com verwenden. Gleich wie unten, außer dass kein Gzip dekomprimiert wird und andere reguläre Ausdrücke verwendet werden.
Prüfung
Seltsamerweise einen anderen Wert als unten erhalten.
C # - 496
Hierfür wird api.stackexchange verwendet, das gzipped und json ist.
Nicht abgeschlossen:
Prüfung
Standardseitengröße:
Seitengröße = 100:
quelle
jQuery 191
Es funktioniert von überall in stackexchange (und vielen anderen Sites), es muss sich nicht auf einer bestimmten Seite befinden, wie in @ Alconja / @ NateKerkhofs Antworten
quelle
$
PHP - 139
Golf gespielt:
Ungolfed - 147
Einfach
file_get_contents
/preg_match
/array_sum
Prüfung:
quelle
Bash 174
Basierend auf https://codegolf.stackexchange.com/a/25180/7664 :
quelle
pagesize=50&
und nur mehr Schleife (ich denke, die Standard-Seitengröße, wenn 15).Python (174 Zeichen):
Erweitern Sie die obige Python-Antwort (Sie haben nicht genug Karma, um einen Kommentar abzugeben):
Anfragen anstelle von urllib reduzieren 2 Zeichen.
quelle
Rubin (176 Zeichen):
Nach Tony Hs Beispiel für die Verwendung von fest codierten Seitenzahlen habe ich Folgendes erhalten:
gab mir zum Zeitpunkt des Schreibens 35300.
quelle