Ile odpowiedzi ma to pytanie?


16

Napisz program lub funkcję, która wypisze całkowitą liczbę odpowiedzi na to pytanie. Twoje rozwiązanie powinno nadal działać w miarę dodawania kolejnych odpowiedzi.

Języki działające w przeglądarce mogą być uruchamiane z konsoli js na tej stronie. W przeciwnym razie prawdopodobnie będziesz musiał pobrać tę stronę. Rozwiązania wielojęzyczne, np wget. Przeglądanie strony i analizowanie jej przy użyciu, grepsą w porządku. Wystarczy podsumować wiersz poleceń i wszystkie użyte źródła.

To jest kod golfowy; najkrótsza odpowiedź w bajtach wygrywa.

EDYTOWAĆ:

Pozwólmy, aby maksymalnie jeden adres URL tej strony się nie liczył, ani jako dane wejściowe, ani w źródle. Brak skracaczy adresów URL, brak danych zapisywanych jako parametry pobierania itp. Liczby wokół adresu URL, w razie potrzeby, nadal się liczą. Pobieranie adresu URL również jest w porządku. Jeśli chcesz usunąć część adresu URL, np. /how-many-answers...Możesz, ale prawdopodobnie to ci nie pomoże.


Prawdopodobnie jest już za późno na wypowiedzenie się w tej sprawie, ale czy liczba powinna uwzględniać usunięte odpowiedzi?
— Dennis

2
@ Dennis Nie widzę usuniętych odpowiedzi, więc powiedziałbym, że nikt nie musi się o nie martwić. Policz je, jeśli chcesz. Nie policzę ich, ponieważ ich nie widzę.
— Filip Haglund,

Czy funkcja może zaakceptować adres URL jako dane wejściowe? Czy dane wejściowe liczą się do bajtecount?
— JungHwan Min

2
@FilipHaglund, myślę, że najrozsądniej byłoby odjąć liczbę bajtów URL-a w kodzie odjąć od całkowitej liczby lub podać jako dane wejściowe, ponieważ uniemożliwia to języki, które nie działają w przeglądarce mieć szansę na wygraną
— Daniel

1
To (chociaż w niektórych językach przyjmowanie danych wejściowych może wymagać jeszcze więcej bajtów) lub pozwala na odejmowanie tylko wtedy, gdy URL http://...pojawia się dosłownie w kodzie źródłowym.
— Dennis

Odpowiedzi:


14

JavaScript + jQuery, 23 bajty

_=>+$("h2>span").text()

Czy nie może się to nie udać, jeśli h2>spanw treści znajduje się wyzwanie?
— Martin Ender

3
Może warto dodać to do odpowiedzi. :)
— Martin Ender

1
Czy można to uruchomić („fragment kodu uruchomienia”)?
— RudolfJelin

13
Zauważ, że używa to jQuery, który nie jest czystym JavaScriptem (tzn. Nie powinien być oznaczony jako „JavaScript”). Korzystanie z biblioteki dołączonej do języka powinno przynajmniej zostać wyraźnie określone. Nie sprzeciwiam się używaniu jQuery, po prostu należy to stwierdzić.
— Makyen

1
@Makyen Sieć StackOverflow korzysta z jQuery. Pytanie brzmi: „Języki działające w przeglądarce mogą być uruchamiane z konsoli js na tej stronie”. jQuery nie musi być ładowany, ponieważ już był. Być może dlatego jQuery nie jest określony.
— Ismael Miguel

4

Mathematica, 33 bajty

Length@Import[#,"Data"][[4,2]]-1&

Dane wejściowe to adres URL tej strony.


4

Python 2, 120 bajtów, 79 bez adresu URL

Nie mogę powiedzieć, że Python został stworzony do tego wyzwania.

import urllib
print[l for l in urllib.urlopen("http://codegolf.stackexchange.com/q/96298")if"answerCount"in l][0][83:-9]

Niestety import wbudowany ma tę samą długość :(

Jakakolwiek pomoc w grze w golfa byłaby bardzo mile widziana!

Jeśli jako dane wejściowe można przyjąć adres URL (aż 41 bajtów - ponad 1/3 mojej liczby bajtów), to ma on 82 bajty:

import urllib
lambda u:[l for l in urllib.urlopen(u)if"answerCount"in l][0][83:-9]

1
Spróbuj użyć requestsbiblioteki
— noɥʇʎԀʎzɐɹƆ

Myślę, że ukośnik można pominąć ...?
— TheInitializer

@TheInitializer, o tak, dzięki!
— Daniel

Jeśli zmienisz wiersz import urllibna import urllib as u, możesz zapisać 3 bajty
— sonrad10

@ sonrad10, jak to? Ostatecznie ma taką samą długość, nie?
— Daniel

3

JavaScript, 67 bajtów

alert($(".answers-subheader").children().first().children().html())

To spojrzenie jest o wiele za długie


3

JavaScript (ES5), 46 44 40 38 33 bajtów

_=>parseInt($('#answers').text())

5 bajtów zaoszczędzonych dzięki Ismael Miguel

Uwaga: Jest to dość powolne i nie będzie działać, jeśli masz skrypt użytkownika PPCG-Design.


Nie różni się to zbytnio od innej odpowiedzi Javascript . W rzeczywistości jest to po prostu niezoptymalizowana wersja.
— Ismael Miguel

@ IsmaelMiguel 1. Został napisany przed drugim i 2. Używa elementu przed ukrytym, którego używa druga odpowiedź.
— Tylko ASCII,

Słusznie. Ale możesz użyć parseInt($('#answers').text()), który zadziała. To oszczędza ci kilka bajtów.
— Ismael Miguel

3

CJam, 15 bajtów

lg"2>"/1=A>S/0=

Oczekuje, że adres URL tej strony zostanie wprowadzony.

Jak to działa

l                e# Read a line (the URL) from STDIN.
 g               e# Fetch the resource the URL points to.
  "2>"/          e# Split the source at occurrences of "2>".
       1=        e# Select the second chunk, i.e., everything between the first
                 e# <h2> and the first </h2>.
         A>      e# Discard the first 10 characters (a linefeed and 9 tabs).
           S/0=  e# Split at spaces and select the first chunk.

1

171 bajtów bash + 3 klucze ryś

lynx -cfg=<(echo PRINTER:Answercount:grep [0-9]*.Answers %s|less:FALSE:999') http://codegolf.stackexchange.com/questions/96298/how-many-answers-does-this-question-have

Hrabia Hrabia właśnie wzrósł z 5 do 6 ;-)
— Roman Czyborra

1
Można wymienić http:// ... zhttp://codegolf.stackexchange.com/q/96298
— JungHwan Min

Wolałem przekierowanie zerowe, ponieważ nadal byłbym beznadziejnie opóźniony nawet przy 171-49 = 122.
— Roman Czyborra

1

99 bajtów sh + curl + jq + stackexchange API

curl -s --compressed api.stackexchange.com/questions/96298/answers?site=codegolf|jq .items\|length

Korzystając z interfejsu API, udało mi się uniknąć problemów związanych z formatowaniem strony i HTML. Niestety, 60 bajtów mojej odpowiedzi to maksymalnie golfowy adres URL dla tego konkretnego zapytania API, a kolejne 13 bajtów na curl do rozpakowania wyniku zapytania, ponieważ stackexchange odmawia podania nieskompresowanych danych przez API.

Rzeczywista „logika” pochodzi z zwijania interfejsu API z prośbą o odpowiedź jsona z odpowiedziami na ten post. Jest to rozpakowywane, a następnie przesyłane do jq, parsera json, który wyodrębnia tablicę „items” i wyświetla jej długość.

Możesz imponująco zbliżyć się do tego, aby interfejs API po prostu zwrócił liczbę odpowiedzi, ale z tego, co mogłem wymyślić, nie można uzyskać 100% drogi, a zbliżenie się do niego kosztowałoby więcej bajtów niż tylko przepuszczenie go przez jq.

101 bajtów do zwrócenia {„total”:}:

curl -s --compressed api.stackexchange.com/questions/96298/answers?site=codegolf&filter=!)V)MSZJUgX_

Parametr filtru w zapytaniach interfejsu API jest bardzo wydajny, ale nie wystarcza, aby zapewnić rozwiązanie „just curl a url”. Może być tutaj środek, gdzie można uzyskać krótszą odpowiedź, a następnie policzyć wiersze lub wyodrębnić liczbę, ale niestety łańcuchy filtrów mają ustaloną długość, a wymagana komenda jq była już bardziej wydajna.


Chłodny. Zauważ, że możesz zaoszczędzić wiele bajtów, używając skracacza URL i dodając opcję -L, aby curl podążał za przekierowaniami; na przykładcurl -sL --compressed bit.ly/2ebw404|jq .total
— sergioFC

1

@Dennis Nie wiedziałem o tym, dziękuję.
— sergioFC

1

PHP, 76 (kod) + 41 (URL) = 117 bajtów

preg_match_all('<h2>(.*) answers<span',file_get_contents("http://codegolf.stackexchange.com/q/96298"),$o);
echo $o[0];

1

Java, 230 269–41 = 228 bajtów

interface A{static void main(String[]a)throws Exception{System.out.print(new java.util.Scanner(new java.net.URL("http://codegolf.stackexchange.com/q/96298").openStream()).useDelimiter("\\Z").next().replaceAll("\n|\r","").replaceAll("^.+?\\s+(\\d+) Answers.+$","$1"));}}

(Zlicza tylko nieusunięte odpowiedzi)


0

JavaScript + jQuery (już zawarte na stronie), 20 bajtów

+$('h2>span').text()

Jest to program przeznaczony do uruchomienia w konsoli dla bieżącej strony (otwartej za pomocą F12). Wyświetla liczbę odpowiedzi bez cudzysłowów. Działa w Chrome, Firefox, IE11 i Edge. Powinien działać w innych przeglądarkach, ale przetestowałem go tylko w tych wymienionych.

W przeciwieństwie do innych rozwiązań tutaj kod JavaScript, to program sam w sobie, a nie wyrazem funkcji za pomocą notację funkcji strzałki ES6 . Również w przeciwieństwie do tych rozwiązań, w rzeczywistości generuje dane wyjściowe (bez cudzysłowów) w konsoli z liczbą odpowiedzi (zamiast być tylko wyrażeniem funkcyjnym, które nie generuje danych wyjściowych). Generowanie danych wyjściowych zależy od funkcji w konsoli każdej przeglądarki, że wartość wyrażenia jest wyprowadzana po ocenie tego wyrażenia.

Opiera się to na jedynej <span>na stronie z rodzicem, który jest <h2>elementem zawierającym liczbę odpowiedzi jako treść tekstową. Po eksperymentach, to wydaje się być przypadek, i nie wydaje się możliwe, aby celowo stworzyć <h2>z <span>dzieckiem przy użyciu edytora: wszystkie jawnie wstawione <span>elementy są usuwane i nie Markdown , stosowany na stosie Exchange, tworzy rzeczywiste <span>wewnątrz<h2> . Jeśli ktoś może zademonstrować przypadek, w którym można manipulować stroną w taki sposób, że 'h2>span'selektor nie jest już unikatowy, należy to zmienić.

Jeśli ocena do łańcucha zamiast liczby jest dopuszczalna, wówczas

JavaScript + jQuery (już zawarte na stronie), 19 bajtów

$('h2>span').text()

Jednak nie oznacza to uwzględnienia "", ale we wszystkich testowanych konsolach generuje wyjście, które jest w nim zawarte "". Przeczytałem komentarze Filipa Haglunda na ten temat, które wykluczają ten wynik.


0

R, 80 bajtów

Odpowiedź polega na przeszukaniu wektora zwróconego za readLinespomocą wyrażeń regularnych. Zgaduję, że to może być zerwane przez tekst w komentarzach / odpowiedziach (być może nawet moich). Usunie, jeśli tak. Wzorzec może być również kopytny, ale nie jestem pewien, czy zwiększy to prawdopodobieństwo otrzymania fałszywej wartości.

x=readLines(scan(,""));regmatches(x,regexpr("(?<=answerCount\">).*?(?=<)",x,,T))
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.