Ile nagród przysługuje na Stackoverflow?


33

Zadanie:

Jesteś niesamowitym programistą i odpowiadającym na Stackoverflow i decydujesz się odpowiedzieć na każde pytanie nagrodą za Stackoverflow. Jesteś tak dobry, że udaje ci się zdobyć wszystkie nagrody we wszystkich pytaniach. Czekając na pojawienie się przedstawiciela, piszesz program, który idzie i sprawdza, jaka jest całkowita liczba przedstawicieli we wszystkich tych zleceniach.

Zasady:

  • Po uruchomieniu
    • Twój program będzie poruszał się po zakładce w Przepełnieniu stosu.
    • Zeskrobuje wartość każdej nagrody,
    • Następnie doda to i wyświetli sumę
  • Musi pobierać dane z dowolnego miejsca na SO (i tylko SO), ale zaleciłbym użycie https://stackoverflow.com/questions?pagesize=50&sort=featured , ponieważ jest to tylko około 10 stron
  • To jest , więc wygrywa najkrótszy kod


2
stackoverflow.com/?tab=featured . Wszystkie polecane pytania na 1 stronie.
Nzall,

7
@NateKerkhofs to nie wszystko. Przewiń w dół. np. kiedy właśnie go załadowałem, pokazywał 96 z 472 pytań.
bazzargh


@ justhalf już dyskutowano ...
TheDoctor

Odpowiedzi:


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)

Edycja 1: zmniejszyłem niektóre selektory i wykorzystałem ?:sugestię z kompilatora zamknięcia Google (przez @ Sirko - dzięki)

Edycja 2: inicjuj swewnątrz di inicjuj tjak 0zamiast""

Edycja 3: zdałem sobie sprawę, że tak naprawdę nie muszę celować w konkretny kontener i mogę zamiatać cały dokument, który pozbywa się wielu .findwywołań i niepotrzebnego selektora (oraz zmiennej przechowującej go)

Edycja 4: wepchnij tinicjator w wywołanie funkcji, aby uniknąć ;(i tak zostanie on podniesiony na górę) i zmiażdż funkcję do jednej instrukcji (połącz dwie instrukcje w jedną w warunku instrukcji trójkowej), aby upuścić{}

Uwaga : nie jestem pewien, czy to oszustwo, ale należy to uruchomić z poziomu okna konsoli przeglądarki, która już wskazuje http://stackoverflow.com/questions?page=1&sort=featured. Opiera się na fakcie, że jQuery i odpowiednie linki stronicowania są dostępne na samej stronie. Wygląda na to, że działa tylko w przeglądarce Firefox, a nie w IE ani Chrome.

Dane wyjściowe (w momencie wysłania):

38150 (in an alert dialog)

Wybuchł / skomentował :

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)

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 - używany kompilator Google Closure.
Sirko,

8
Podstępny wybór języka i kontekstu, aby ominąć wiele wymaganych znaków! (Takich jak „ stackoverflow.com/” ) Podoba mi się!
AlexC

Myślę, że powinieneś wspomnieć, że odbywa się to za pomocą wtyczki jQuery. które moim zdaniem powinno być .. :)
Mr_Green

Chrome zgłasza błąd składniowy. Otwarcie ciała funkcyjnego za pomocą (parena, czy to naprawdę działa?
thejh

@Mr_Green - Już to zauważyłem, ale
odważyłem

21

Python - 232, 231, 195, 183, 176, 174

Analizuje HTML z https://stackoverflow.com/questions?sort=featured przy użyciu wyrażeń regularnych.

Górna granica rangew forpętli musi być number of pages + 1lub kod zostanie podniesiony z HTTPErrorpowodu 404s. Domyślna liczba wyników na stronę wynosi 15, co wykorzystuje kod (pominięcie ?pagesize=50zapisywania znaków i jest równie skuteczne).

Dzięki @Gabe za wskazówkę dotyczącą dalszego zmniejszenia liczby znaków .

Gra w golfa :

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))

Dane wyjściowe (w momencie wysłania):

37700

Bez golfa :

Oto nieco nie golfowa wersja, która powinna być nieco łatwiejsza do odczytania i zrozumienia.

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 )
      )

1
Możesz pozbyć się wyraźnej forpętli i sprowadzić ją do 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

posiadanie zakodowanej górnej granicy sprawia, że ​​testowanie jest trochę trudne
Einacio


6
@Richard Tak, ale to jest golf golfowy , więc zwięzłość przebija, czy to „dobry pomysł”. Mam na myśli, że w prawdziwym życiu nie jest dobrym pomysłem pisać przerażające jedno-linijki bez białych znaków ...
Tim Goodman

3
@ Richard Parsing HTML i ekstrakcja z HTML to całkiem inne zadania. Ponieważ strona internetowa nie jest stabilnym interfejsem API, nic nie gwarantuje, że będzie działać dla tego rodzaju ekstrakcji. Chociaż kod Tony'ego jest nieco przerośnięty, więc nie powiedzie się, jeśli będzie jakikolwiek tag zawierający +po nim cyfrę. Na przykład tytuł pytania może pasować do tego formatu.
CodesInChaos

18

REBOL - 164 133 130 (139 do 404 sprawdzić)

Analizuje html przy użyciu parsepodjęzyka Rebol. Sprawdza pierwsze 98 stron. Uświadomiłem sobie, że mam takie samo ograniczenie jak rozwiązanie python - zbyt wiele powtórzeń trafiło w błędy 404 i zatrzymało wykonanie. Dzięki @rgchris za wiele ulepszeń! Zaktualizowano, aby sprawdzić do 98 stron.

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

Z kontrolą błędów dla 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

Test

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

Wyjaśnienie

Rebol ignoruje białe znaki, dlatego możesz umieścić to wszystko w jednym wierszu, jeśli chcesz. PARSE przyjmuje dwa dane wejściowe, a pierwszy argument ( read join ...) jest dość oczywisty. Ale oto kilka komentarzy do instrukcji parsowania dialektu, w bardziej tradycyjnym wcięciu:

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

Fajnie ... Dodałem zwykłą wersję sformatowaną z kilkoma komentarzami, mam nadzieję, że nie masz nic przeciwko! Zawsze wspaniale jest zobaczyć, jak dobrze Rebol robi tak wiele problemów z taką umiejętnością czytania (wszystko w półmega wieloplatformowym licencjonowanym Apache wykonywalnym, ale to sprawia, że ​​takie rzeczy jak REFORM wystają jak obolały kciuk Co drugi kawałek ma sens, ale wciąż wyglądam na to słowo i idź „REEDuce and FORM przekształca się w REFORM” jest po prostu brzydkie . Obsesja na punkcie tego jest bardzo Hawthorne . Och, i możesz zmienić NIEKTÓRY na KAŻDY i ogolić znak! :-)
Dr. Rebmu

Ups, powinno być 133.
rgchris

Uwaga: Musisz zapętlić do wyższej nwartości ... obecnie jest 28 stron nagród (dla rozmiaru strony 15). Nie wpłynie to jednak na liczbę znaków.
Alconja,

Dzięki Alconja. Łatwo przejść do 98 stron przed dodaniem kolejnych znaków do rozwiązania. Będę musiał ponownie przeprowadzić test z domu wieczorem
John

11

Ruby, 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

Korzysta z interfejsu API wymiany stosu.

Dane wyjściowe (w momencie publikacji oryginalnego postu):

37200

Nie liczę &pagesize=100liczby znaków, ponieważ działa bez niej, ale właśnie dodałem to dla wygody podczas testowania. Jeśli to usuniesz, robi to samo (z wyjątkiem tego, że zjada więcej przydziału i zajmuje nieco więcej czasu).


Fajnie, mam tylko 275 w Pythonie
Claudiu

zjada więcej kwot ??? Miałeś używać tylko SO i SO.
John Dvorak

@JanDvorak ??? Miałem na myśli limit API.
Klamka

1
Symbol requires można zastąpić -rflagą wiersza poleceń.
Justin

8

Rebmu - 108 107

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

Test (o 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 wygląda raczej tajemniczo, ale jest całkiem czytelny, gdy się go zrozumie. Zacznijmy od usunięcia go i prawidłowego ułożenia.

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 jest dialektem Rebola, dzięki czemu można zobaczyć podobieństwa w rozwiązaniu. Rebmu nie może jeszcze zmniejszyć rozmiaru każdej instrukcji, ale jest to język ewoluujący. Jeszcze raz dziękuję @rgchris za ulepszenia mojej pierwszej próby.


ti(do liczby całkowitej!) byłoby bezpieczniejsze niż dow Rebmu bez zmiany długości kodu.
rgchris

6

Rubin - 197

Krótka wersja:

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

Wersja przyjazna dla człowieka:

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

I odpowiedź - 39700

Ruby z parametrami skryptu - 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

Aby uruchomić to z bash, po prostu wpisz

ruby code_golf_stack_overflow2.rb http://stackoverflow.com/questions?sort=featured\&page= .bounty-indicator

Symbol requires można zastąpić -rflagą wiersza poleceń.
Justin

6

PHP - 121 bajtów

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

Użycie modyfikatora wyrażenia regularnego „eval”, aby uniknąć użycia array_sumlub podobnego. Wydaje się, że jest to najkrótsze rozwiązanie spośród ważnych wpisów.


4
emodyfikator jest przestarzała od PHP 5.5, ale wciąż jest przydatna do golfa jednak.
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;

Przechodzi przez wszystkie strony, pagesizenie ustawiono zapisywania bajtów, więc więcej GETs.

Bardzo, bardzo brudny, ale ... korzystając z PHP„wad”!

  • bez spacji po echo
  • while zatrzymuje się przy przydziale
  • wyjście po RegExzamianie jest ciągiem rozpoczynającym się od kwoty nagrody
  • array_sum() dodaje ciągi
  • $ni $ssą inicjowane, ale rozpoczynanie od zera jest równoważne. zaczynając od zera
  • itp...

5

Bash 206

możliwe optymalizacje, zbyt leniwe

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

wynik:

39450

4
Mogę się mylić, ale wygląda na to, że może być bardzo krótki z pewnymi optymalizacjami jakości.
rickcnagy

seq 1 11można zredukować do seq 11.
fedorqui

Powinieneś być w stanie pozbyć się przestrzeni wokół rur, aby zapisać cztery znaki, a na pewno te dwa grepy można połączyć w jeden (czy miałeś na myśli „[0-9] +”?).
Desty

Również „grep -o -E” => „egrep -o”.
Desty

I możesz zmienić: „egrep -o” [0-9] + '”=>„ cut -d' '-f3 ”:)
Desty

5

JavaScript - 129 119 110 107 znaków

EDYCJA: NIEPRAWIDŁOWA ODPOWIEDŹ! To obsługuje tylko „Najczęściej polecane pytania”, które zawierają tylko ułamek z nich. Odpowiedź Alconji jest bardziej aktualna.

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

Wykonaj na https://stackoverflow.com/?tab=featured w oknie konsoli. Na podstawie rozwiązania Alconja.

Grał w golfa trochę więcej, usuwając niepotrzebne białe spacje.

Wykorzystano eval do usunięcia wywołania funkcji, usuwając kolejne 9 znaków.

usunęliśmy trochę niepotrzebnych białych znaków.


3

Java, 540 znaków

Ostrzeżenie: liczba aktywnych nagród wynosi ~ 470. Ten kod będzie wielokrotnie uzyskiwał dostęp do strony w przepełnieniu stosu. Może to sprawić kłopot z nimi za przesyłanie tak wielu żądań danych.

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

Mój wynik był 23400, ale kiedy uruchomiłem kod @ TonyH, dostałem 37550. Złe wieści.

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

Sposób, w jaki to działa, jest prosty. Czyta z adresu URL, http://stackoverflow.com/questions"aby określić liczbę pytań z nagrodami (uwaga: jeśli liczba wzrośnie, program się nie powiedzie, ale jeśli spadnie, działa dobrze). Wyszukuje dla tego numeru przy użyciu wyrażenia regularnego: b.>(\\d+). Działa to we wszystkich testach do tej pory, ale jeśli ktoś zadaje pytanie pasujące do wyrażenia regularnego, może to nie działać.

Następnie otwieramy adres URL http://stackoverflow.com/questions?pagesize=1&sort=featured&page=+ current question #. Innymi słowy, otwieramy nową stronę dla każdego polecanego pytania i wymuszamy, aby liczba pytań była tylko 1, więc otrzymamy je wszystkie. Część dotycząca reputacji zawsze będzie pasować ion.>.(\\d+), więc używam jej do znalezienia. Podzieliłem operację na dwie części, aby móc tanio sprawdzić, czy liczba pytań została zmniejszona (tzn. Zwracany ciąg nie jest liczbą całkowitą).

Następnie podsumowujemy całą reputację i drukujemy ją.

Uruchomienie na moim komputerze zajęło około 3 minut i 20 sekund.


Czy ktoś wie, dlaczego nie drukuje właściwej liczby?


Pagesize = 100 daje dużą liczbę. Myślę, że dzieje się coś dziwnego, ponieważ podajesz rozmiar strony = 1. W mojej odpowiedzi, jeśli nie określiłem „rozmiaru strony”, wynik był zbliżony do twojego numeru.
jzm

@malik Tak, zdałem sobie sprawę, że „źle przeczytałem” Twój komentarz, więc usunąłem mój :-). Pagesize = 100 działa tak, jakby Pagesize = 50. Czy chodziło Ci o to, że uruchomiłeś mój kod z pageize = 100?
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);}}

Korzystanie z Stackoverflow.com. To samo co poniżej, z wyjątkiem braku dekompresji Gzip i innych wyrażeń regularnych.

Test

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

Dziwnie, uzyskanie innej wartości niż poniżej.


C # - 496

Używa api.stackexchange, który jest gzipped i json.

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

Unminified:

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

Test

Domyślny rozmiar strony:

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

Rozmiar strony = 100:

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

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)

Działa z dowolnego miejsca na stosie wymiany (i wielu innych stronach), nie trzeba być na określonej stronie, jak w odpowiedziach @ Alconja / @ NateKerkhofs


jQuery to biblioteka, a nie język. Nie jestem pewien, czy jest ważny czy nie ...
rickcnagy

@ br1ckb0t, jeśli chcesz, użyj javascript. jQuery i tak jest już na stronach Stackexchange, ja właśnie mówiłem wprost o$
Einacio

Tak, to ma sens! Niezły kod.
rickcnagy

2

PHP - 139

Gra w golfa:

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

Niegolfowany - 147

Prosty 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]);

Test:

php run.php

10250


2

Bash 174

Na podstawie 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

Możesz się go pozbyć pagesize=50&i po prostu zapętlić więcej (myślę, że domyślny rozmiar strony to 15).
Alconja,

@Alconja Hmm, prawda, więc mogłem obniżyć to do 162 ... ale tylko z wadą więcej żądań spamu do serwera.
thejh

2

Python (174 znaków):

Rozwijając powyższą odpowiedź na python (nie mam wystarczająco dużo karmy, aby komentować):

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))

Prośby zamiast urllib zmniejszają 2 znaki.


1

Ruby (176 znaków):

Idąc za przykładem Tony'ego H. używania zakodowanych numerów stron, oto co otrzymałem:

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

dał mi 35300 w momencie pisania.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.